Princípios gerais de funcionamento do QEMU-KVM

Princípios gerais de funcionamento do QEMU-KVM

Minha compreensão atual:

1) KVM

KVM (Kernel-based Virtual Machine) é um hipervisor (VMM - Virtual Machine Manager) que opera como um módulo no sistema operacional Linux. O hipervisor é necessário para executar um software em um ambiente que não existe (virtual) e, ao mesmo tempo, esconder o hardware físico real em que esse software está funcionando. O hipervisor atua como um 'intermediário' entre o hardware físico (host) e o sistema operacional virtual (convidado).

Como o KVM é um módulo padrão do kernel Linux, ele recebe todas as funcionalidades do kernel (gerenciamento de memória, escalonador etc.). Assim, todos esses benefícios também são repassados aos convidados (já que os convidados operam em um hipervisor que funciona no/núcleo do sistema operacional Linux).

O KVM é muito rápido, mas em si não é suficiente para executar um sistema operacional virtual, pois para isso é necessária a emulação de I/O. Para I/O (processador, discos, rede, vídeo, PCI, USB, portas seriais etc.), o KVM utiliza o QEMU.

2) QEMU

QEMU (Quick Emulator) é um emulador de vários dispositivos, que permite executar sistemas operacionais destinados a uma arquitetura em outra (por exemplo, ARM -> x86). Além do processador, o QEMU emula vários dispositivos periféricos: placas de rede, HDD, placas de vídeo, PCI, USB etc.

Funciona da seguinte maneira:

Instruções/código binário (por exemplo, ARM) são convertidas em código intermediário independente de plataforma por meio de um conversor TCG (Tiny Code Generator) e, em seguida, esse código binário independente de plataforma é convertido em instruções/código de destino (por exemplo, x86).

ARM -> código_intermediário -> x86

Na verdade, você pode executar máquinas virtuais no QEMU em qualquer host, mesmo em modelos antigos de processadores que não suportam Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). No entanto, assim, o desempenho será bastante lento, devido ao fato de o código binário executável precisar ser recompilado em tempo real duas vezes, usando o TCG (TCG é um compilador Just-in-Time).

Ou seja, o QEMU por si só é incrível, mas funciona muito lentamente.

3) Anéis de proteção

Princípios gerais de funcionamento do QEMU-KVM

O código de programa binário nos processadores não opera de forma aleatória, mas está disposto em diferentes níveis (anéis / Protection rings) com diferentes níveis de acesso aos dados, desde o mais privilegiado (Anel 0) até o mais restritivo, regulado e 'apertado' (Anel 3).

O sistema operacional (núcleo do SO) opera em Ring 0 (modo kernel) e pode fazer o que quiser com quaisquer dados e dispositivos. Aplicativos de usuário funcionam em Ring 3 (modo usuário) e não têm o direito de fazer o que desejarem, devendo, em vez disso, solicitar acesso para realizar determinada operação (dessa forma, os aplicativos de usuário têm acesso apenas aos seus próprios dados e não podem "invadir" a "caixa de areia" de outrem). Rings 1 e 2 são destinados ao uso por drivers.

Antes da invenção do Intel VT-x / AMD SVM, hipervisores operavam em Ring 0 e os convidados em Ring 1. Como Ring 1 não tem privilégios suficientes para o funcionamento normal do SO, a cada chamada privilegiada do sistema convidado, o hipervisor precisava modificar essa chamada em tempo real e executá-la em Ring 0 (de forma semelhante ao que faz o QEMU). Ou seja, o código binário convidado NÃO era executado diretamente no processador, mas passava por várias modificações intermediárias em tempo real a cada vez.

As sobrecargas eram consideráveis e isso representava um grande problema, e então os fabricantes de processadores, independentemente, lançaram um conjunto avançado de instruções (Intel VT-x / AMD SVM), permitindo a execução de código dos sistemas operacionais convidados DIRECTAMENTE no processador host (pulando todas as etapas intermediárias custosas, como era feito anteriormente).

Com a chegada do Intel VT-x / AMD SVM, um novo nível especial Ring -1 (menos um) foi criado. E agora, neste nível, opera o hipervisor, enquanto os convidados funcionam em Ring 0 e recebem acesso privilegiado ao CPU.

Ou seja, no final das contas:

  • o host opera em Ring 0
  • os convidados operam em Ring 0
  • o hipervisor opera em Ring -1

4) QEMU-KVM

KVM fornece aos convidados acesso ao Ring 0 e utiliza o QEMU para emular I/O (processador, discos, rede, vídeo, PCI, USB, portas seriais etc., que os convidados "veem" e com os quais trabalham).

Daí QEMU-KVM (ou KVM-QEMU) 🙂

CRÉDITOS
Imagem para chamar a atenção
Imagem Protection rings

P.S. O texto deste artigo foi originalmente publicado no canal Telegram @RU_Voip como resposta a uma pergunta de um dos participantes do canal.

Escreva nos comentários onde eu não compreendi corretamente o assunto ou se há algo a adicionar.

Obrigado!

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster