kvm baixo io desempenho

6

o desempenho da minha configuração é muito bom (geekbench, como é 'sentir', ...) mesmo o rendimento do disco (libvirt na partição lvm bruta) está muito próximo do desempenho bruto no servidor) but Os IOPs são tão baixos quanto 100 a 200 guestside (comparado a ~ 1000 hostside) tanto no linux quanto no windows-guests.
Isso é algo para se viver (kvm não pode fazer melhor) ou estou fazendo algo completamente errado?

O interessante é que eu consegui impactar o throughput alterando a configuração (qcow2 vs raw-image vs raw-partition) ou a configuração (caching ou io-scheduling) e variações, mas as IOPs ficaram no mesmo ponto baixo sobre todas essas combinações.

hardware #

• supermicro dual xeon E5520 com 24 GB de RAM | • 2x constelação seagate 1TB (RAID1 no Adaptec 3405)
• 2x chitas seagate (RAID1 no Adaptec 6405).

software

• ubuntu 11.10 3.0.0-13-server
O emulador kvm / QEMU versão 0.14.1 (qemu-kvm-0.14.1)
• benchmarking dos discos (bonnie ++, hdparm) dos anfitriões e convidados (bonnie ++, hdparm, hdtune no windows)

config

eu testei várias configurações de disco, a configuração atual é:

hosts linux

(Eles simplesmente não "precisam" de alto desempenho IO para manter os arquivos discfiles mais confortáveis)
Arquivos de disco qcow2 em lvm em minhas constelações • qemu / ide

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/media/vm/images/mex/mex_root.qcow2'/>
  <target dev='hda' bus='ide'/>
  <address type='drive' controller='0' bus='0' unit='0'/>
</disk>

hosts do Windows ###

(Executando o SQL-Server e o Remote Desktop Services, então eu definitivamente preciso de um bom desempenho IO)
• partições lvm brutas em minhas chitas
• virtio

<emulator>/usr/bin/kvm</emulator>
<disk type='block' device='disk'>
  <driver name='qemu' type='raw' cache='none'/>
  <source dev='/dev/Cheetah/mts'/>
  <target dev='vda' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
    
por phhe 16.02.2012 / 10:07

2 respostas

8

A configuração ideal é (geralmente) como segue:

  1. No host, defina elevator=deadline
  2. Use o virtio e apenas o virtio
  3. use LVs brutos sempre que possível. Qcow2 dá sobrecarga. Arquivos em um FS também têm sobrecarga
  4. na VM, use o elevator=noop
  5. no host e na VM, use noatime,nodiratime no fstab sempre que possível
  6. Verifique se os drivers do virtio estão atualizados, especialmente os do Windows.
  7. As distribuições baseadas no Debian são (possivelmente) não tão boas quanto o Fedora e o RHEL para QEMU / KVM. Não para começar um flamewar, mas a maior parte do desenvolvimento e teste é feito no Fedora e RHEL, e na minha própria experiência, tem havido muitos problemas no Ubuntu e no Debian que eu não consegui reproduzir no Fedora e no RHEL. Você pode ignorar esse item em particular se quiser, mas se você está procurando uma solução, vale a pena tentar uma referência rápida em outra distro.
por 16.02.2012 / 11:58
1

Tente definir "prazo final" como o agendador de E / S para os discos do host antes de iniciar o KVM:

 for f in /sys/block/sd*/queue/scheduler; do echo "deadline" > $f; done

Se você tiver carga vinculada de E / S, ela pode ser sua melhor escolha como este documento da IBM sugere.

    
por 16.02.2012 / 11:39