Virtualização: Qual é a diferença entre KVM e QEMU?


Melhor resposta

KVM é um fork do QEMU. O código KVM é modificado para suportar aceleração de hardware quando disponível (mesma arquitetura para host e VM guest)

Na maioria das vezes, QEMU é usado para emular outra arquitetura (por exemplo, emular ARM / Power arch. Usando processador x86) . Tenho usado isso para executar uma imagem RaspberryPI que roda em ARM em meu laptop que tem um processador Intel.

Uma diferença entre eles é que o QEMU roda em um processador sem a necessidade de extensão de virtualização de hardware (Intel VT / VT-d, AMD-V) enquanto o KVM o usa. As extensões de virtualização de hardware permitem que você acesse o hardware na máquina física diretamente. A desvantagem é que a base de código KVM não pode “emular outra arquitetura.

Mas quando o KVM é executado em uma máquina sem qualquer HW virt ext., ele alterna para QEMU para executar a VM.

Para verificar se o seu processador suporta hardware virt., para Windows, você pode usar http://www.cpuid.com/cpuz.php ou http://www.grc.com/securable.htm e verifique a extensão “vmx” ou “svm”. (O último é muito mais fácil)

No Linux, use

  • egrep “(vmx | svm)” / proc / cpuinfo

A fusão de ambas as bases de código está em processo e vamos vê-las como um projeto no futuro. Isso tornará o KVM obsoleto e mesclada à base de código QEMU.

A propósito, quase todos os novos processadores lançados pela Intel e AMD suportam virtualização, mas eu vi um laptop Acer com processador Intel que não suporta virtualização de hardware. Além disso, verifique se o BIOS está com essa extensão habilitada. Outro BIOS tem a extensão desabilitada por padrão.

Resposta

Originalmente de Falha do servidor

KVM :

KVM é algumas coisas: primeiro é um módulo do kernel Linux (agora incluído na linha principal) que muda o processador para um novo estado de “convidado”. O estado de convidado tem seu próprio conjunto de estados de anel, mas as instruções anel0 privilegiadas voltam ao código do hipervisor. Por ser um novo modo de execução do processador, o código não precisa ser modificado de nenhuma forma.

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

segundo, KVM é um fork do executável Qemu. Ambas as equipes trabalham ativamente para manter a diferença no mínimo, e há avanços para reduzi-la. Eventualmente, o objetivo é que o Qemu funcione em qualquer lugar e, se um módulo de kernel KVM estiver disponível, ele poderá ser usado. Mas para o futuro previsível, a equipe do Qemu se concentra na emulação de hardware e portabilidade, enquanto o pessoal do KVM se concentra no módulo do kernel (às vezes movendo pequenas partes da emulação para lá, se comprovado que melhora o desempenho) e na interface com o resto 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 chamar o KQemu, ele gera um thread (isso é importante); o thread chama o módulo do kernel KVM para alternar para o modo convidado e prossegue para executar o código VM. Em uma instrução de privilégio, ele volta para o módulo do kernel KVM, que, se necessário, sinaliza ao thread Qemu para lidar com a maior parte da emulação de hardware.

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

Qemu :

QEmu é um software completo e autônomo por conta própria. Você o usa para emular máquinas, é muito flexível e portátil. Principalmente funciona por um “recompilador” 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 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 seriais / paralelas, etc.

Fonte: Diferença entre KVM e QEMU

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *