Princípios gerais de operação do QEMU-KVM

Princípios gerais de operação do QEMU-KVM

Meu entendimento atual:

1) KVM

KVM (Kernel-based Virtual Machine) é um hipervisor (VMM – Virtual Machine Manager) executado como um módulo no sistema operacional Linux. Um hipervisor é necessário para executar algum software em um ambiente inexistente (virtual) e ao mesmo tempo ocultar desse software o hardware físico real no qual esse software é executado. O hipervisor atua como um “espaçador” 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 todos os recursos necessários do kernel (gerenciamento de memória, agendador, etc.). E, consequentemente, no final, todos esses benefícios vão para os convidados (já que os convidados trabalham em um hipervisor que roda no kernel do sistema operacional Linux).

KVM é muito rápido, mas por si só não é suficiente para rodar um sistema operacional virtual, porque... Isso requer emulação de E/S. Para E/S (CPU, discos, rede, vídeo, PCI, USB, portas seriais, etc.) o KVM usa QEMU.

2) QEMU

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

Funciona assim:

Instruções/código binário (por exemplo, ARM) são convertidos em código intermediário independente de plataforma usando o conversor TCG (Tiny Code Generator) e então 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

Essencialmente, você pode executar máquinas virtuais no QEMU em qualquer host, mesmo com modelos de processadores mais antigos que não suportam Intel VT-x (Intel Virtualization Technology)/AMD SVM (AMD Secure Virtual Machine). Porém, neste caso, funcionará muito lentamente, devido ao fato de que o código binário em execução precisa ser recompilado duas vezes em tempo real, usando TCG (TCG é um compilador Just-in-Time).

Aqueles. O QEMU em si é muito legal, mas funciona muito devagar.

3) Anéis de proteção

Princípios gerais de operação do QEMU-KVM

O código binário do programa nos processadores funciona por uma razão, mas está localizado em diferentes níveis (anéis/anéis de proteção) com diferentes níveis de acesso aos dados, desde o mais privilegiado (anel 0), até o mais limitado, regulamentado e “com as porcas apertadas ”(Anel 3).

O sistema operacional (kernel do SO) é executado no Anel 0 (modo kernel) e pode fazer o que quiser com quaisquer dados e dispositivos. Os aplicativos de usuário operam no nível Ring 3 (modo de usuário) e não têm permissão para fazer o que quiserem, mas em vez disso devem solicitar acesso a cada vez para realizar uma operação específica (assim, os aplicativos de usuário só têm acesso aos seus próprios dados e não podem “obter na” caixa de areia de outra pessoa). Os anéis 1 e 2 destinam-se ao uso dos motoristas.

Antes da invenção do Intel VT-x/AMD SVM, os hipervisores rodavam no Anel 0 e os convidados rodavam no Anel 1. Como o Anel 1 não tem direitos suficientes para a operação normal do sistema operacional, com cada chamada privilegiada do sistema convidado, o o hipervisor teve que modificar esta chamada imediatamente e executá-la no Anel 0 (assim como o QEMU faz). Aqueles. binário convidado NÃO foi executado diretamente no processador e, a cada vez, passou por várias modificações intermediárias em tempo real.

A sobrecarga era significativa e isso era um grande problema, e então os fabricantes de processadores, independentemente uns dos outros, lançaram um conjunto estendido de instruções (Intel VT-x / AMD SVM) que permitiam a execução do código do sistema operacional convidado DIRETAMENTE no processador host (ignorando quaisquer etapas intermediárias dispendiosas, como acontecia antes).

Com o advento do Intel VT-x/AMD SVM, um novo anel especial de nível -1 (menos um) foi criado. E agora o hipervisor é executado nele, e os convidados são executados no Anel 0 e obtêm acesso privilegiado à CPU.

Aqueles. eventualmente:

  • host é executado no anel 0
  • convidados trabalham no Anel 0
  • hipervisor é executado no Anel -1

4) QEMU-KVM

O KVM dá aos convidados acesso ao Ring 0 e usa QEMU para emular a E/S (processador, discos, rede, vídeo, PCI, USB, portas seriais, etc. que os convidados “vêem” e trabalham).

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

CRÉDITOS
Imagem para chamar a atenção
Imagem de anéis de proteção

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

Escreva nos comentários onde não entendi bem o assunto ou se há algo a acrescentar.

Obrigado!

Fonte: habr.com

Adicionar um comentário