KVM: Quais recursos da CPU tornam as VMs melhores?

21

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

  • Dell R910
  • Kernel 3.2.0-25-genérico # 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 CPUs Intel (R) Xeon (R) E7-4870 a 2,40 GHz (cada uma com 10 núcleos, HT e Intel VT ativado)
  • Os convidados do Windows atualmente não têm o VirtIO, mas isso vai mudar em breve

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

Geralmente usamos "qemu-system-x86_64 para nosso convidado do Windows 32 Bit, 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 convidado acabou sendo um pouco baixo. Nós não rodamos nenhum benchmark ainda, mas vamos dizer que copiar grandes quantidades de dados (arquivos) dentro da VM de um diretório para outro é muito mais rápido quando mudamos o modelo da CPU de "-cpu qemu32" para "-cpu Nehalem ". Os arquivos que demoram 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 escolher o modelo de CPU correto pode afetar muito o desempenho do convidado.

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 de maior desempenho nessa lista. Agora eu me pergunto, como saber qual modelo de CPU é o melhor para meu convidado? Navegando na Internet, encontrei os seguintes recursos:

Quando leio esses sites corretamente, eles alegam que o "host -cpu" pode trazer o melhor desempenho. Eu ainda não me preocupo com migração, já que ambos os hosts KVM sã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"?

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

    
por Valentin 03.07.2012 / 00:03

5 respostas

13

É bem simples na verdade. Para clusters homogêneos e configurações de host único, use a opção host . Para clusters mistos, use a menor versão disponível da CPU, portanto, se um host for o Penryn e o outro Nehalem, use o Penryn em ambos.

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

Voltando ao desempenho, você definitivamente precisa do virtio em todos os lugares em que possa colocá-lo. E se você ainda atingir os gargalos de desempenho, eles geralmente podem ser resolvidos caso a caso, dependendo de onde eles ocorrem.

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

    
por 03.07.2012 / 14:38
10

The Windows guests currently have no VirtIO

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

Apenas um exemplo com um de nossos servidores:
- sem 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 suporta de 120 a 125 usuários com pouca lentidão. E nós adicionamos outra máquina virtual para executar o SQL Server um mesmo computador físico

    
por 03.07.2012 / 01:08
7

O Qemu não funciona da mesma forma que muitos outros hipervisores fazem. Para começar, 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, como você está usando, ele não faz isso ... o processador é exposto não importa o que aconteça, mas o que é reportado ao SO será alterado pelo -cpu flag.

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

Citando um de seus links ( Ajustando o KVM ):

To pass all available host processor features to the guest, use the command line switch

 qemu -cpu host

if you wish to retain compatibility, you can expose selected features to your guest. If all your hosts have these features, compatibility is retained:

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

Assim, se você acha que pode acabar com as coisas o suficiente para criar um problema, você pode encontrar todos os conjuntos de instruções suportados que você acha que qualquer processador seu tem agora ou pode ter no futuro suportando e listando esses itens. / p>

Na maioria das vezes, no entanto, você quer ficar com -cpu host . Especificar uma CPU com menos flags disponíveis significa que os aplicativos evitarão o uso de recursos que poderiam torná-los mais rápidos.

    
por 03.07.2012 / 00:28
3

Você está confundindo a opção '-cpu host'. Esta opção NÃO habilita apenas todos os recursos da CPU específicos para o seu sistema host, ela habilita TODOS os recursos que a 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 e que seu cpu não suporta, o sistema convidado pode ser um pouco mais lento sempre que tentar usar um desses recursos que precisam ser emulados.

Fonte: link

    
por 18.03.2014 / 23:01
-2

O CentOS 6.7 me dá o desempenho adequado do KVM + Spice no Dell R910. Eu acho que uma vez que você dê uma chance, você não voltará a nada (sério)!

    
por 24.09.2015 / 01:09