QEMU + KVM + LVM - desempenho da unidade de dispositivo de bloco versus imagem do arquivo

6

Estou criando uma nova configuração para minhas máquinas virtuais e testando qual método de armazenamento é mais rápido. Meu ambiente de teste consiste em HDD drive com LVM no LUKS. Eu criei um único LV para o drive de máquina virtual e o reutilizei para que ambos os testes mantivessem o mesmo local no HDD drive para manter um desempenho consistente (a velocidade de leitura / gravação do HDD depende da posição física).

  • Host: Arch Linux, kernel 4.12.8
  • Convidado: Ubuntu Desktop 17.04

Desempenho testado com o comando:

    dd if=/dev/zero of=test bs=16M count=100 conv=sync

Primeiro teste: usando LV diretamente como unidade de máquina virtual

Comando:

qemu-system-x86_64 \
  -drive format=raw,file=/dev/mapper/vg_vm-lv_vm_test,if=virtio,aio=native,cache.direct=on \
  -net nic,model=virtio \
  -net user \
  -vga virtio \
  -display gtk,gl=on \
  -smp 3 \
  -cpu host \
  -machine type=pc,accel=kvm \
  -m 3G

Resultados (cada valor representa uma única execução):

  • Criando novo arquivo: 98,4 MB / s; 112 MB / s
  • Escrevendo para o arquivo existente: 62,5 MB / s; 68,7 MB / s; 64,8 MB / s

Segundo teste: criação de ext4 em LV e colocação de arquivo de imagem bruta nesse

Comando:

qemu-system-x86_64 \
  -drive format=raw,file=./ubuntu_17,if=virtio,aio=native,cache.direct=on \
  -net nic,model=virtio \
  -net user \
  -vga virtio \
  -display gtk,gl=on \
  -smp 3 \
  -cpu host \
  -machine type=pc,accel=kvm \
  -m 3G

Resultados (cada valor representa uma única execução):

  • Criando novo arquivo: 254 MB / s; 242 MB / s
  • Escrevendo para o arquivo existente: 187 MB / s; 189 MB / s; 190 MB / s

Terceiro teste: usando LV diretamente como unidade de máquina virtual, configurações diferentes

Comando:

qemu-system-x86_64 \
  -drive format=raw,file=/dev/mapper/vg_vm-lv_vm_test,if=virtio,cache=none \
  -net nic,model=virtio \
  -net user \
  -vga virtio \
  -display gtk,gl=on \
  -smp 3 \
  -cpu host \
  -machine type=pc,accel=kvm \
  -m 3G

Resultados (cada valor representa uma única execução):

  • Criando novo arquivo: 129 MB / s; 125 MB / s
  • Escrevendo para o arquivo existente: 103 MB / s; 97 MB / s; 81,9 MB / s

Pergunta

É evidente que há diferença entre essas duas soluções, entretanto, eu esperava que o dispositivo de bloco bruto fosse pelo menos tão rápido quanto o arquivo de imagem, porque não deveria haver nenhuma sobrecarga do sistema de arquivos do host. Eu suponho que algum cache ocorre entre para a imagem do arquivo ou opções para o dispositivo de bloco cru não são ideais. Por que o LV bruto é mais lento nesse caso? O que posso fazer para melhorar seu desempenho? Ou se apenas devesse ser mais lento, então por quê?

EDIT: Adicionei o terceiro caso de teste usando as configurações de: link . Acaba por ser um pouco mais rápido, mas ainda mais lento do que a imagem do arquivo. Eu observei também que com cada execução de um arquivo existente ele está ficando mais lento - no entanto, a fragmentação não deve ocorrer durante a sobregravação do arquivo, por isso não sei por que isso acontece.

    
por nobody 03.09.2017 / 12:40

1 resposta

6

A incompatibilidade de tamanho de bloco pode ser o problema.

O ideal é que você corresponda ao seu sistema de arquivos com o tamanho de bloco subjacente da mídia. Enquanto você não compartilhou o que você escolheu para tamanhos de blocos, eu acho que você tem 4 kilobytes para a tentativa de ext4 e 512 bytes para o LV. Se o tamanho do bloco natural de sua mídia subjacente é de 4 kilobytes, então acho que isso explica tanto o problema de velocidade quanto a velocidade decrescente. Como você possivelmente está escrevendo apenas 512 em um bloco de 4k, você perdeu 75% do bloco e as gravações subsequentes usarão mais blocos, incorrendo em mais sobrecarga e desperdício.

Repita o teste com um tamanho de bloco de sistema de arquivos bem compatível com o tamanho do bloco de mídia subjacente. Nesse caso, tente seu LV com um tamanho de bloco de 4k.

O LVM adiciona um pouco mais de sobrecarga do que o Ext4. Resposta de estouro de pilha Então eu acho que isso explicaria porque é um pouco mais lento. :)

    
por 12.09.2017 / 15:03