KVM: Quais recursos da CPU tornam as VMs executadas melhor?

21

Estamos usando o Ubuntu 12.04 com os seguintes parâmetros:

  • Dell R910
  • Kernel 3.2.0-25-generic # 40-Ubuntu SMP x86_64 x86_64 x86_64 GNU / Linux
  • kvm 1: 84 + dfsg-0ubuntu16 + 1.0 + noroms + 0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • qemu-common 1.0 + noroms-0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • 4 x CPU Intel (R) Xeon (E) E7- 4870 a 2,40GHz (cada um com 10 núcleos físicos, HT e Intel VT ativados)
  • Os convidados do Windows atualmente não têm VirtIO, mas isso mudará em breve

Estamos executando vários convidados do Windows nesta máquina, um deles é o Windows 2003 32 bits, outro o Windows 2008 (64 bits). No momento, estamos lutando com problemas de desempenho e brincando com os modelos de CPU.

Normalmente usamos "qemu-system-x86_64 para nosso convidado de 32 bits do Windows, por exemplo:

/usr/bin/qemu-system-x86_64 -S -M pc-1.0 -cpu qemu32 -enable-kvm -m 4096 -smp 4,sockets=4,cores=1,threads=1 [...] 

O desempenho deste hóspede acabou sendo um pouco baixo. Ainda não executamos nenhum benchmark, mas digamos que copiar grande quantidade de dados (arquivos) dentro da VM de um diretório para outro vá muito mais rápido quando trocamos o modelo de CPU de "-cpu qemu32" para "-cpu Nehalem " Os arquivos que demoravam cerca de 2: 40h para copiar agora são copiados em 40 minutos. É claro que este não é um teste de alta qualidade e há muito espaço para uma tentativa mais profissional. Mas este é um indicador claro de que a escolha do modelo de CPU correto pode afetar fortemente o desempenho do hóspede.

Agora fiquei curioso e corri:

qemu-x86_64 -cpu ?
x86           [n270]
x86         [athlon]
x86       [pentium3]
x86       [pentium2]
x86        [pentium]
x86            [486]
x86        [coreduo]
x86          [kvm32]
x86         [qemu32]
x86          [kvm64]
x86       [core2duo]
x86         [phenom]
x86         [qemu64]

E:

kvm -cpu ?model
 x86       Opteron_G3  AMD Opteron 23xx (Gen 3 Class Opteron)
 x86       Opteron_G2  AMD Opteron 22xx (Gen 2 Class Opteron)
 x86       Opteron_G1  AMD Opteron 240 (Gen 1 Class Opteron)
 x86          Nehalem  Intel Core i7 9xx (Nehalem Class Core i7)
 x86           Penryn  Intel Core 2 Duo P9xxx (Penryn Class Core 2)
 x86           Conroe  Intel Celeron_4x0 (Conroe/Merom Class Core 2)
 x86           [n270]  Intel(R) Atom(TM) CPU N270   @ 1.60GHz
 x86         [athlon]  QEMU Virtual CPU version 1.0
 x86       [pentium3]
 x86       [pentium2]
 x86        [pentium]
 x86            [486]
 x86        [coreduo]  Genuine Intel(R) CPU           T2600  @ 2.16GHz
 x86          [kvm32]  Common 32-bit KVM processor
 x86         [qemu32]  QEMU Virtual CPU version 1.0
 x86          [kvm64]  Common KVM processor
 x86       [core2duo]  Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
 x86         [phenom]  AMD Phenom(tm) 9550 Quad-Core Processor
 x86         [qemu64]  QEMU Virtual CPU version 1.0

Com todas essas versões diferentes, é um pouco difícil de adivinhar. "Nehalem" parece ser o mais bem sucedido nessa lista. Agora me pergunto, como saber qual modelo de CPU é o melhor para o meu convidado? Navegando na Internet, encontrei os seguintes recursos:

Quando leio esses sites corretamente, eles alegam que o "-cpu host" pode trazer o melhor desempenho. Ainda não tenho nenhuma preocupação com a migração, pois os dois hosts KVM estão equipados igualmente (exatamente o mesmo hardware).

Então, o que os administradores experientes do KVM recomendam? Existe uma regra de ouro ou mesmo uma matriz, como "este modelo é o melhor para esse sistema operacional convidado"?

Peço desculpas se eu pudesse descobrir essas informações por conta própria - fiz várias pesquisas no Google e naveguei em muitos sites. Não consegui encontrar algo que responda à minha pergunta.

Valentin
fonte
Por que se preocupar com a opção -cpu? Apenas deixe de fora.
Psusi
1
Por que não se preocupar com isso? Afaik poderia trazer melhorias de desempenho.
Valentin
Se precisar intervir e imitar as coisas, prejudicará o desempenho. Experimente sem.
Psusi
2
Acabei de descobrir que a libvirt adiciona o parâmetro "-host qemu32" automaticamente, porque não o definimos.
Valentin
3
@psusi: Acabei de testar hoje ... quando deixo a opção -cpu fora, o desempenho é tão bom quanto escolho o melhor modelo de CPU possível.
Valentin

Respostas:

13

É bem simples mesmo. Para clusters homogêneos e configurações de host único, use a hostopção Para clusters mistos, use a versão mais baixa da CPU disponível; portanto, se um host for Penryn e o outro Nehalem, use Penryn nos dois.

Se você estiver usando RHEV ou oVirt, isso já está incorporado. O VMWare chama isso de "EVC" e o posiciona como um grande recurso.

Voltando ao desempenho, você definitivamente precisa do virtio em qualquer lugar que possa colocá-lo. E se você ainda tiver gargalos de desempenho, eles geralmente podem ser abordados caso a caso, dependendo de onde eles ocorrem.

[offtop] Na sua escolha de distribuição, eu já comentei em outro tópico [/ offtop]

dyasny
fonte
Obrigado dyasny, estava esperando que você respondesse e me fornecesse algum tipo de "regra de ouro"!
Valentin
11

Os convidados do Windows atualmente não têm VirtIO

Não perca mais tempo ajustando algo.
Instale os drivers do virtIO e volte. A diferença é tão grande que qualquer aprimoramento que você encontrar agora não terá significado com o virtIO.

Apenas um exemplo em um de nossos servidores:
- sem o virtIO, um W2k3 pode lidar com cerca de 10 usuários do Terminal Server
- com o virtIO, a mesma máquina com o mesmo sistema operacional atualmente gerencia de 120 a 125 usuários com um pouco de lentidão. E adicionamos outra máquina virtual para executar o SQL Server no mesmo computador físico

Gregory MOUSSAT
fonte
Obrigado pela dica. Sim, o VirtIO deve ser habilitado de maneira definitiva, mas estamos com alguns problemas com o convidado do Windows 2003 que devem ser resolvidos primeiro. Além disso, quero esclarecer o tópico do modelo da CPU.
Valentin
Essa é uma das razões pelas quais uso o Hyper-V. Desde 2008, isso significa NÃO INSTALAR e todos os drivers do Hyper-V mantidos com o Windows Update. Problemas de compatibilidade são muito mortais.
TomTom
O @TomTom Hyper-V não é o único hipervisor certificado para executar o Windows. E a certificação neste contexto significa SVVP / WHQL.
dyasny
1
Não, mas é o único que funciona imediatamente, pois possui os drivers já instalados;) Além disso, acho que o XEN é compatível com os drivers do Hyper-V. Não precisar manter outro elemento atualizado externamente é uma coisa muito boa. Eu não me importo se eles são assinados - o ponto é que eu não tenho que assistir outro provedor, pois tudo vem através do Windows Update. Eu só queria MS abriria Windows Update para o terceiro softawre parte;)
TomTom
1
Como tenho certeza de que você já ouviu falar de modelos de slipstreaming e VM, (quase) não os mencionarei :) Meu problema com o Hyper-V é o suporte extremamente ruim dos hóspedes do Linux.
Dyasny
8

O Qemu não funciona da mesma maneira que muitos outros hipervisores. Para iniciantes, ele pode fornecer emulação completa. Isso significa que você pode executar o código x86 em um processador ARM, por exemplo. Quando no modo KVM, enquanto você o usa, ele realmente não faz isso ... o processador é exposto, não importa o que aconteça, mas o que é relatado ao sistema operacional será alterado pelo -cpusinalizador.

Se você deseja velocidades mais rápidas, é um ponto de partida para tentar combinar os recursos do processador virtual com o seu processador real da melhor maneira possível. Isso reduzirá os casos em que os opcodes subótimos são chamados para executar tarefas e também reduzirá os opcodes que não são possíveis no seu hardware ser traduzido para outra coisa primeiro. Desde que seu modelo de processador Xeon foi lançado no início de 2011, provavelmente é compatível principalmente com a série Core i7. Por isso, eu diria que a arquitetura Nehalem é sua melhor emulação.

Citando um de seus links ( Tuning KVM ):

Para passar todos os recursos disponíveis do processador host para o convidado, use a opção de linha de comando

 qemu -cpu host

se você deseja manter a compatibilidade, pode expor os recursos selecionados ao seu convidado. Se todos os seus hosts tiverem esses recursos, a compatibilidade será mantida:

 qemu -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+x2apic

Portanto, se você sentir que pode acabar movendo as coisas o suficiente para criar um problema, poderá encontrar todos os conjuntos de instruções suportados que você acha que qualquer processador que você tem agora ou pode ter no futuro suporta e listá-los.

Na maioria das vezes, porém, você deseja se manter -cpu host. Especificar uma CPU com menos sinalizadores disponíveis significa que os aplicativos evitarão o uso de recursos que possam torná-los mais rápidos.

Jeff Ferland
fonte
4
Ele está usando o KVM, que precisa dessas extensões de virtualização e não executa emulação; mesmo se ele é baseado no qemu
Javier
1
Ainda tenho um voto de mim pelos esforços e pela recomendação de usar o host -cpu!
Valentin
3

Você está confundindo a opção '-cpu host'. Essa opção NÃO habilita apenas todos os recursos da CPU específicos do seu sistema host, habilita TODOS os recursos que sua CPU suporta e tudo o que pode ser emulado, mesmo que sua CPU não os suporte.

-cpu host
é uma boa opção, mas não a mais eficiente, pois pode ativar opções que podem ser emuladas que sua cpu não oferece suporte, o sistema convidado pode ficar um pouco mais lento a qualquer momento que tentar usar um desses recursos que precisam ser emulados .

Fonte: http://wiki.qemu.org/Features/CPUModels

Joe Huss
fonte
1
Inicialmente, pensei que esta resposta se referisse ao suporte de instruções, por exemplo, suporte SSE que poderia ser emulado. Mas é claro que isso não faz sentido, pois você executa no modo KVM ou no TCG e não mistura os dois. Então eu acho que a emulação mencionada aqui pode ser algo como x2apic, onde não há suporte h / w, mas o kernel pode fingir. Eu apenas mencionei isso para tentar esclarecer o que foi exposto acima, pois ele me confundiu inicialmente.
Neil McGill
-2

O CentOS 6.7 fornece um desempenho KVM + Spice adequado no Dell R910. Eu acho que depois que você tentar, você não voltará para mais nada (sério)!

Marc Cyr
fonte