web-dev-qa-db-fra.com

Performances de stockage QEMU extrêmement lentes avec des images QCow2

Je gère des images à l'aide de libvirt sur une petite cluster openstack. Les performances de stockage sur ces machines sont extrêmement médiocres: mon outil de surveillance montre une utilisation de 100% (généralement sur les écrit, mais parfois sur des lectures) avec des débits aussi bas que 50 kb/s - jusqu'à un montant maximum d'environ 1 Mo/s.

Ceci est une capture d'écran de l'outil nmon montrant les performances de la CPU dans le temps et le débit de stockage actuel. Ce qu'ils montrent est typique:

enter image description here

J'ai répliqué le même problème de performance sur deux autres machines à l'aide de l'outil packer pour créer des images Debian et Ubuntu à l'aide de QEMU. Voici ma ligne de commande QEMU:

/ usr/bin/qemu-system-x86_64 -netdev utilisateur, id = user.0, hostfwd = TCP :: 3213-: 22 -Avice virtio-net, netDev = user.0 -cdrom/home/$ User/Packer_Cache/23E6874116128E16E11CFAD1C369C54BE97C20023E59B9B9D39D312233E09D39D312233E09CD6.ISO -M 512M -DISPLAY SDL -Machine Type = PC, Accel = KVM -VNC 0.0.0.0:47 -Name Packer-OpenStack -Drive File = sortie-OpenStack/Packer-OpenStack.qcow2, if = Virtio, cache = Aucun -Boot une fois = D

Comme vous pouvez le constater, j'utilise le pilote virtio et cache=none.

J'ai même patché Packer à utiliser -o preallocation=metadata dans les arguments à qemu-img create. Cela semblait améliorer les choses légèrement, mais la performance reste des ordres de magnitude inférieure à celle du système hôte.

Cette capture d'écran particulière a été prise pendant l'étape "Installation du système de base" d'une installation Ubuntu, mais elle est cohérente avec plus ou moins toute utilisation de stockage.

Il a été pris sur mon poste de travail qui est un PRO Macbrook avec un SSD; La machine openstack qui a le même problème est d'exécuter un cluster RAID10 que j'ai comparé à environ 1200 Mo/s écrit sur le système hôte.

Évidemment, je ne m'attends pas à ce que les performances de stockage sous QEMU correspondent à celle du système hôte - mais il est remarquable à quel point cela est lent. Host VMS sur le cluster OpenStack prend plusieurs secondes pour exécuter des opérations aussi simples qu'un CREATE DATABASE Déclaration à Postgres.

Pour le moment, le seul indice que j'ai laissé est cette capture d'écran ici:

enter image description here

Ici nmon montre que /dev/sda a une utilisation complète, mais /dev/sda7 - la partition qui détient en fait l'image Qcow2 - n'a que 1% d'utilisation. Cette dernière statistique correspond à ce que je m'attends à ce que les performances du disque soient ici.

Il convient de noter que la saturation n'est pas simplement un artefact de mon outil de surveillance: Toutes les opérations sur la machine hôte sont très lentes pendant que cela se produit.

Comment puis-je tracer ce qui se passe réellement ici?

Devrais-je regarder des choses comme en utilisant elevator=noop Sur l'hôte et les invités pour accorder le planificateur?

-

Edit: Voici la sortie de uname -a sur mon poste de travail:

Linux $hostname 3.18.6-1-Arch #1 SMP PREEMPT Sat Feb 7 08:44:05 CET 2015 x86_64 GNU/Linux

Et ici sur la machine OpenStack:

Linux $hostname 3.13.0-40-generic #69-Ubuntu SMP Thu Nov 13 17:53:56 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
4
Cera

Le backend de fichier QCow2 peut être considérablement lent avec le cache = NONE Réglage. De plus, "-O PROLOCATION = MetaData" Préallocate Metadata uniquement et les données de fichier réelles seront fragmentées. En d'autres termes, le fichier Qcow2 reste un peu rare avec un seul coup d'allocation (pour métadonnées). Dans le passé, une option "-o préallocation = pleine" est apparue, dans la dernière version QEMU-IMG, je ne l'ai pas trouvée.

Vous pouvez essayer de:
[.____] 1) utiliser cache=writeback (C'est un pari beaucoup plus sûr que l'option "dangereuse")
[.____] 2) Preallocation de l'ensemble du fichier QCow2 en émettant "fallocate <filename> <filesize> "Sur le fichier Qcow2?

Vous pouvez trouver d'autres informations ici et ici .

Évidemment, effectuez l'opération ci-dessus sur les tests VM uniquement! Si, après le test, tout va bien, vous pouvez propager les modifications à d'autres VMS.

4
shodanshok