IO de disco extremamente lento na VM qemu-kvm

2

Eu tenho uma VM rodando o Debian Woody (kernel 2.4.18). Qemu-2.1.2, 2 núcleos de CPU, 512M de RAM, imagem qcow2 conectada como IDE, ext3. O problema é que o disco IO é lento. Aqui está um resultado do dd "benchmark" logo após a reinicialização da VM:

(none):~# time dd if=/dev/zero of=test1 bs=102400 count=100
100+0 records in
100+0 records out

real    0m0.035s
user    0m0.000s
sys 0m0.020s
(none):~# time dd if=/dev/zero of=test1 bs=102400 count=100
100+0 records in
100+0 records out

real    0m0.022s
user    0m0.000s
sys 0m0.020s
(none):~# time dd if=/dev/zero of=test1 bs=102400 count=100
100+0 records in
100+0 records out

real    0m55.589s
user    0m0.020s
sys 0m0.560s

Se eu observar o que acontece no host, vejo o processo do qemu consumindo ~ 90% da CPU (de um total de 600%) e lendo e gravando cerca de 1.2MB / s. O disco rígido em si é ok, a velocidade de gravação é de cerca de 70MB / s. Eu tentei diferentes configurações de VM (incluindo "threading" e "usafe"), convertendo a imagem em raw, movendo a imagem para o sistema de arquivos recém-formatado (tentei ext4 & btrfs). Nenhuma diferença visível.

Também notei problemas de velocidade de IO para outras VMs com kernels mais recentes, mas não tive tempo suficiente para testá-los bem e usei o NFS mount para contornar o problema.

O que há de errado aqui?

UPD Mesmo mount -t nfs ... trava. strace diz que mount() se auto congela:

mount("192.168.1.1:/mnt/gw/tmp", "/mnt", "nfs", 0xc0ed0000, 0x805a920) = -1 ENOSYS (Function not implemented)
mount("192.168.1.1:/mnt/gw/tmp", "/mnt", "nfs", 0xc0ed0000, 0x805a920) = -1 ENOSYS (Function not implemented)
mount("192.168.1.1:/mnt/gw/tmp", "/mnt", "nfs", 0xc0ed0000, 0x805a920) = -1 ENOSYS (Function not implemented)
mount("192.168.1.1:/mnt/gw/tmp", "/mnt", "nfs", 0xc0ed0000, 0x805a920[here it freezes for a several minutes]) = 0
    
por Equidamoid 05.02.2015 / 17:43

2 respostas

2

Eu estava querendo fazer isso de qualquer maneira, então eu fiz algumas instalações.

O padrão para dispositivos de estilo IDE nesta configuração parece rodar no modo de velocidade PIO, já que o haparm está reivindicando o DMA ... fazer isso dentro da VM faz com que seja 70 vezes mais rápido na minha máquina.

hdparm -d1 /dev/hda
echo hdparm -d1 /dev/hda > /etc/rcS.d/S00hdparm.sh
chmod +x /etc/rcS.d/S00hdparm.sh

A outra opção é usar uma emulação de disco SCSI, na linha de comando qemu substitua isso

-hda $DISK

com isso

-drive if=scsi,file=$DISK

fornece uma emulação de dispositivo compatível com "sym53c8xx" que o instalador detecta automaticamente. Isso tem o efeito legal de que o dispositivo será chamado "/ dev / sda" em vez do estilo antigo "/ dev / hda".

Mas cuidado, mudar isso em um sistema já instalado não é simples.

Nota: usar o ahci não funcionará; O Debian woody é anterior à SATA.

PS: Meu teste de fumaça de compatibilidade parece ser principalmente bem-sucedido, apenas um par de sinalizadores mudos do GCC. Boa sorte com a sua.

    
por 22.02.2015 / 10:45
0

Eu uso kvm com libvirt, usando as configurações inseguras e threads para i / o faça o vm realmente rápido, claro que inseguro significa usar NÃO em produção. Para o formato eu uso cru sem lvm

    
por 07.01.2017 / 07:17