O desempenho do QEMU (ainda) fica abaixo do VirtualBox e existe uma maneira de melhorá-lo sem o suporte ao hardware + o módulo kvm kernel?


9

Percebi vários artigos que afirmavam que o QEMU é mais lento que o VirtualBox (sem assistência de hardware), mas vários têm anos e o mais novo parecia ser do ano passado.

  • É verdade que o QEMU é mais lento que o VirtualBox?
  • Se sim, por quê?
  • Existem truques para diminuir a diferença de desempenho?

Alguns dos meus sistemas host não têm suporte para virtualização de hardware, por isso estou especialmente interessado em dicas de desempenho que funcionam sem o módulo do kernel.

Respostas:


10

Se você está falando sobre virtualização x86 em um host x86, saiba que o kqemu (o antigo módulo do kernel de aceleração do qemu) está obsoleto. A KVM (Kernel Virtual Machine) é "o caminho a seguir", mas funciona apenas em hosts Linux. O convidado pode ser o SO que você quiser, contanto que seja a arquitetura x86.

Entre arquiteturas, o qemu ainda é muito lento; Ainda hoje eu estava tentando o mais recente qemu com o Debian MIPS64 no convidado ... era utilizável em um terminal, mas terrivelmente lento no Xorg. de acordo com o meu conhecimento, você não pode usar instruções de aceleração de processador, como tabelas de páginas estendidas ou VT-x, quando estiver fazendo arquitetura cruzada. É tudo emulado em software.

Portanto, para virtualização x86 a x86, o qemu "bruto" é lento, mas o KVM (que usa o qemu) é rápido. Muito rápido. Tão rápido que é a solução de virtualização recomendada da Red Hat para RHEL.

O VirtualBox ainda impressiona tudo o que o qemu / kvm pode oferecer em termos de desempenho gráfico 2d / 3d acelerado por hardware, porque o kvm se concentra na virtualização de servidores e o virtualbox se concentra na virtualização de desktops. Mas eu definitivamente recomendo que você verifique o kvm se estiver lidando com um servidor.

Edit: Para seus hosts que não possuem nenhuma aceleração de hardware, você sofrerá uma sobrecarga bastante grande, independentemente da solução virt que você usar. Emular coisas de hardware em software é difícil e caro.


2
ls $(which kvm)mostra um link simbólico para qemu-system-x86_64. Acho que é exatamente disso que você estava falando com o KVM usando o QEMU?
Catskul

Sim, mas o KVM é, como o nome indica, uma máquina virtual baseada em kernel , o que significa que as tripas do hipervisor estão no módulo do kernel 'kvm'. Você pode pensar nisso como sendo semelhante ao antigo kqemu, se quiser, mas arquitetonicamente é muito diferente. O qemu é mais um frontend do que um hypervisor real quando o kvm está em operação.
allquixotic

Ah, esqueci de acrescentar: a razão pela qual o qemu (e qualquer outro sistema de virtualização) é tão lento sem um "módulo do kernel" (como você diz; o que você realmente quer dizer é "sem aceleração de hardware") é que certas operações de hardware que o o desempenho do convidado é muito difícil de imitar no software. Bem, não é difícil em termos de não confiável ou complicado; apenas sloooooooooooooow. É por isso que a Intel passou a maior parte de uma década nos dando instruções aceleradas por hardware para os bits mais lentos da virtualização no caminho do VT-x e EPT. A única correção é usar o hardware que suporta esses conjuntos de instruções.
allquixotic

Existe algo que torna o virtualbox mais rápido, mesmo sem aceleração de hardware?
Catskul

Não. Sem a aceleração de hardware, o desempenho deve ser bastante igual. O VirtualBox pode ter otimizações avançadas do x86 que o tornam um pouco mais rápido em software, o que seria apropriado, pois o virtualbox suporta apenas o x86 em primeiro lugar, enquanto o qemu possui um campo de atuação muito mais amplo (arquiteturas não-x86). Mas esse é um detalhe de implementação / design que basicamente se resumia à localidade do cache, loops internos otimizados, assembler codificado à mão, cache de E / S de disco do lado do host ou outros truques. Não tenho certeza em que medida vbox faz essas coisas que qemu não, mas eles não são muito relevantes ...
allquixotic

1

Supondo que um host com uma CPU com capacidade de virtualização (Intel VT-x, AMD SVM), executando o Qemu em um kernel (Linux com KVM), seja razoavelmente rápido.

As razões técnicas para o Qemu ser lento com 2D (youtube, planilhas, jogos) e emulação 3D são obscuras para mim. No entanto, posso supor que os "drivers de vídeo" simplesmente não sejam bons o suficiente - o hardware gráfico no hardware não é usado da maneira ideal.

Pelo lado positivo, um desenvolvimento recente introduziu a estrutura SPICE no qemu. Na verdade, tem alguns anos e parece razoavelmente maduro. Os benefícios de desempenho de vídeo da execução com o driver de vídeo QXL são enormes na minha experiência (desenvolvimento web em 2D). Não sei como ele se compara ao Virtualbox, mas é definitivamente uma melhoria. Eu acho que o SPICE é essencial para quem executa o Windows no Qemu.

Esta é apenas a minha opinião e deve-se notar que eu nunca tentei executar nenhuma reprodução em 3D ou de vídeo no convidado.


1
Se por "emulação orientada a gráficos" você se refere à aceleração 3D, é porque as GPUs não podem ser virtualizadas como CPUs. A emulação de software é impossivelmente lenta, portanto, existem atualmente duas soluções: 1. Passagem de API (ou seja, chamadas DirectX no convidado são executadas como chamadas DirectX no host) 2. Passagem VGA (o negócio real: a placa gráfica inteira é disponibilizada para o hóspede). QEMU suporta # 2.
Marcus

@ Marcus Passthrough é o caminho a percorrer.
Ярослав Рахматуллин
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.