Diferença entre o KVM e o QEMU

117

Eu tenho lido sobre KVM e Qemu por algum tempo. A partir de agora, tenho uma compreensão clara do que eles fazem.

O KVM suporta a virtualização de hardware para fornecer um desempenho quase nativo aos sistemas Operacionais Convidados. Por outro lado, o QEmu emula o sistema operacional de destino.

O que estou confuso é em que nível esses dois coordenam. Como

  1. Quem gerencia o compartilhamento de RAM e / ou memória?
  2. Quem programa operações de E / S?
por Abhishek Gupta 03.12.2010 / 09:42

3 respostas

160

Qemu :

O QEmu é um software completo e autônomo. Você o usa para emular máquinas, é muito flexível e portátil. Principalmente, ele funciona por um 'recompiler' especial que transforma o código binário escrito para um determinado processador em outro (digamos, para executar o código MIPS em um Mac PPC ou o ARM em um PC x86).

Para emular mais do que apenas o processador, o Qemu inclui uma longa lista de emuladores periféricos: disco, rede, VGA, PCI, USB, portas serial / paralela, etc.

KQemu :

No caso específico em que origem e destino são a mesma arquitetura (como o caso comum de x86 em x86), ele ainda precisa analisar o código para remover quaisquer 'instruções privilegiadas' e substituí-las por opções de contexto. Para torná-lo o mais eficiente possível no Linux x86, existe um módulo do kernel chamado KQemu que lida com isso.

Sendo um módulo de kernel, o KQemu é capaz de executar a maioria dos códigos inalterados, substituindo apenas as instruções somente de nível 0 do nível mais baixo. Nesse caso, o espaço de usuário Qemu ainda aloca toda a RAM para a máquina emulada e carrega o código. A diferença é que, em vez de recompilar o código, ele chama o KQemu para varrer / corrigir / executá-lo. Toda a emulação de hardware periférico é feita no Qemu.

Isso é muito mais rápido que o Qemu simples porque a maioria dos códigos não é alterada, mas ainda precisa transformar o código ring0 (a maior parte do código no kernel da VM), então o desempenho ainda sofre.

KVM :

O KVM é um par de coisas: primeiro é um módulo do kernel do Linux - agora incluído na linha principal - que transforma o processador em um novo estado 'convidado'. O estado convidado possui seu próprio conjunto de estados de toque, mas as instruções privilegiadas de anel retornam ao código do hipervisor. Como é um novo modo de execução do processador, o código não precisa ser modificado de forma alguma.

Além da comutação de estado do processador, o módulo do kernel também lida com algumas partes de baixo nível da emulação, como os registradores MMU (usados para manipular VM) e algumas partes do hardware emulado PCI.

Em segundo lugar, o KVM é um fork do executável do Qemu. Ambas as equipes trabalham ativamente para manter as diferenças no mínimo, e há avanços em reduzi-las. Eventualmente, o objetivo é que o Qemu funcione em qualquer lugar, e se um módulo KVM do kernel estiver disponível, ele poderá ser usado automaticamente. Mas no futuro previsível, a equipe da Qemu se concentra na emulação e portabilidade de hardware, enquanto o pessoal do KVM se concentra no módulo do kernel (às vezes movendo pequenas partes da emulação, melhorando o desempenho) e fazendo interface com o restante do código do espaço do usuário.

O executável kvm-qemu funciona como o Qemu normal: aloca RAM, carrega o código e, em vez de recompilá-lo, ou chamando o KQemu, ele gera um encadeamento (isso é importante). O encadeamento chama o módulo KVM do kernel para alternar para o modo convidado e continua a executar o código da VM. Em uma instrução privilegiada, ela retorna ao módulo KVM do kernel, que, se necessário, sinaliza o encadeamento do Qemu para lidar com a maior parte da emulação de hardware.

Uma das coisas legais dessa arquitetura é que o código do convidado é emulado em um encadeamento posix que você pode gerenciar com ferramentas normais do Linux. Se você quiser uma VM com 2 ou 4 núcleos, o kvm-qemu cria 2 ou 4 encadeamentos, cada um deles chama o módulo KVM do kernel para iniciar a execução. A simultaneidade - se você tiver núcleos reais suficientes - ou agendamento - se não for - é gerenciada pelo agendador normal do Linux, mantendo o código pequeno e surpresas limitadas.

    
por 03.12.2010 / 15:40
78

Ao trabalhar em conjunto, o KVM arbitra o acesso à CPU e à memória, e o QEMU emula os recursos de hardware (disco rígido, vídeo, USB, etc.). Ao trabalhar sozinho, o QEMU emula a CPU e o hardware.

    
por 03.12.2010 / 09:46
-1

O QEMU é mais lento e o KVM está lá para ajudar o QEMU a obter uma velocidade de hardware muito rápida para fornecer o melhor desempenho para o sistema. QEMU é hipervisor / emulador.

    
por 14.11.2016 / 11:58