web-dev-qa-db-fra.com

QEMU + KVM + LVM - Performances de l'image de fichier de périphérique de bloc VS image

Je crée une nouvelle configuration pour mes machines virtuelles et que vous testez la méthode de stockage le plus rapide. Mon environnement de test se compose d'un lecteur de disque dur avec LVM sur LUKS. J'ai créé un seul LV pour le lecteur de machine virtuelle et la réutiliser pour les deux tests pour conserver le même endroit sur un lecteur de disque dur pour maintenir des performances cohérentes (la vitesse de lecture/écriture du disque dur dépend de la position physique).

  • Hôte: Arch Linux, noyau 4.12.8
  • Guest: Ubuntu Desktop 17.04

Performance testée avec commande:

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

Premier test: Utilisation de LV directement sous forme de lecteur de machine virtuelle

Commander:

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

Résultats (chaque valeur représente une seule fois):

  • Création de nouveau fichier: 98,4 Mo/s; 112 Mo/s
  • Écrire au fichier existant: 62,5 Mb/s; 68,7 Mo/s; 64,8 Mo/s

Deuxième test: Création d'ext4 sur LV et placer un fichier d'image brut à ce sujet

Commander:

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

Résultats (chaque valeur représente une seule fois):

  • Création de nouveau fichier: 254 Mo/s; 242 Mo/s
  • Écrire au fichier existant: 187 Mo/s; 189 Mo/s; 190 Mo/s

Troisième test: Utilisation de LV directement sous forme de lecteur de machine virtuelle, différents paramètres

Commander:

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

Résultats (chaque valeur représente une seule fois):

  • Création de nouveau fichier: 129 Mo/s; 125 Mo/s
  • Écrire au fichier existant: 103 Mo/s; 97 Mo/s; 81,9 Mo/s

Question

Il est clair que la différence entre ces deux solutions, mais je m'attendais à ce que le dispositif de bloc brut soit au moins aussi rapide que le fichier image car il ne devrait pas y avoir de frais généraux du système de fichiers d'hôte. Je suppose que certaines mises en cache se produisent entre l'image de fichier ou les options pour le périphérique de bloc brut ne sont pas optimales. Pourquoi RAW LV est-il plus lent dans ce cas? Que puis-je faire pour améliorer sa performance? Ou s'il devrait juste être plus lent, alors pourquoi?

EDIT: J'ai ajouté le troisième cas de test à l'aide des paramètres de: http://www.linux-kvm.org/page/tuning_kvm . S'avère être un peu plus rapide mais toujours plus lent que l'image de fichier. J'ai également observé qu'avec chaque exécution pour le fichier existant, il devient plus lent - mais la fragmentation ne devrait pas se produire pour l'écrasement de fichier, donc je ne sais pas pourquoi cela se produit.

6
Marcin Sucharski

La gravité de la taille du bloc peut être le problème.

Vous souhaitez idéalement correspondre à votre système de fichiers avec la taille de bloc sous-jacente du support. Pendant que vous n'avez pas partagé ce que vous avez sélectionné pour les tailles de bloc, je pense que vous avez 4 kilo-octets pour tentative ext4 et 512 octets pour le LV. Si la taille de bloc naturel de votre média sous-jacente est de 4 kilo-octets, je pense que cela explique à la fois votre problème de vitesse et votre vitesse décroissante. Étant donné que vous n'écrivez probablement que 512 dans un bloc de 4k, vous avez perdu 75% du bloc et les écrivies suivantes utiliseront plus de blocs, entraînant plus de frais généraux et de déchets.

Réessayez votre test avec une taille de bloc de système de fichiers joliment adaptée correspondant à la taille du bloc de support sous-jacent. Dans ce cas, essayez votre LV avec une taille de bloc 4K.

LVM ajoute un peu plus de frais généraux que EXT4. Stack Overflow Réponse Donc, je pense que cela expliquerait pourquoi il est juste un peu plus lent. :)

6
David Aubin