Dans notre article précédent, nous avons comparé les deux technologies de virtualisation disponible dans Proxmox, soit LXC et KVM. Après analyse, on constate que les deux technologies délivrent de bonnes performances CPU, similaire à l’hôte. Par contre, les performances en lecture et écriture sur disque sont loin d’être avantageuses pour KVM. Dans cet article, on va approfondir notre analyse pour vérifier comment se comparent les différents formats de stockage disponible pour KVM, soit ZVOL, RAW et QCOW2, avec les configurations par défaut. Bien nous analysions seulement trois formats, il en existe plusieurs autres supporter par Proxmox tel NFS, GluserFS, LVM, iSCSI, Ceph, etc. La liste complète est disponible sur la page “Storage” dans le wiki de Proxmox.

Choisir son format de stockage

Dans Promox VE 4.4, il est possible d’utiliser différent format de stockage pour la machine virtuelle. Avec une une configuration préalable, il est possible de sélectionner le format de stockage lors de la création d’une machine virtuelle.

Configuration d'un disque au format QCOW2
Configuration d'un disque au format ZVOL

Les formats de stockage

Local / RAW

Ce format de stockage est probablement le moins sophistiqué. Le disque de la machine virtuel est représenté par un fichier plat (anglais: flat file). Si votre disque virtuel a la taille de 8GiB, ce fichier sera alors de 8GiB. Il est à noter que ce format de stockage ne permet pas la création de snapshot. L’un des avantages du format RAW est qu’il est facile à sauvegarder et copier, car ce n’est qu’un fichier.

Local / QCOW2

Ce format de stockage est plus sophistiqué que le format RAW. Le disque virtuel sera toujours présenté sous la forme d’un fichier. Par contre, QCOW2 permet de créer un disque en “thin provisioning”, c’est-à-dire qu’il vous est possible de créer un disque virtuel de 8GiB, mais sa taille réelle ne sera pas de 8GiB. Sa taille réelle va augmenter au fur et à mesure que l’on ajoute des données dans le disque virtuel. De plus, ce format permet la création de “snapshot”. Par contre, le temps nécessaire pour faire un rollback est un peu long en comparaison à ZVOL.

ZVOL

Ce format de stockage est disponible seulement si vous utilisez ZFS. Il faut en plus configurer un ZPOOL dans Proxmox. Alors, un volume ZVOL peut être utilisé directement par KVM avec tous les avantages de ZFS: intégrité des données, snapshots, clone, compression, déduplication, etc. Avec Proxmox, il est possible de créer un ZVOL en “thin provisionning”.

Configuration de stockage ZFS en thin provisionning

Différence architecturale

Le diagramme suivant présente les différences architecturales entre les trois formats que l’on veut tester.

Différence architecturale entre RAW, QCOW2 et ZVOL.

De ce diagramme, il faut comprendre que RAW et QCOW2 sont superposés aux couches VFS et Local File, alors que ZVOL peut être utilisé directement par QEMU évitant ainsi les couches Locales Files, VFS et ZFS Posix Layer. Selon toute vraisemblance, ZVOL devrait être plus performant que RAW et QCOW2. C’est ce que l’on va vérifier avec nos tests.

Avant de présenter les résultats de nos tests, voici un tableau qui résume les distinctions de chaque format de stockage.

 Local / RAWLocal / QCOW2ZVOL
Facile à manipulerOuiOuiNon*
Proxmox rend toutes les opérations de base très faciles.
Thin ProvisioningNonOuiOui
CompressionNonNonOui
SnapshotNonOui*
Cette opération est assez longue à exécuter.
Oui
MigrationOuiOuiOui

Analyse des résultats

Local / RAW

Étonnamment, le format RAW surpasse les performance de ZVOL dans certains tests. Dans les autres tests, le format RAW permet d’obtenir des résultats satisfaisants. Par contre, il ne fournit pas assez d’avantages en comparaison aux autres formats de stockage (clone, snapshot, compression, etc.). Il faut en comprendre que ce format est une bonne option, mais qu’il existe de meilleures alternatives.

Local / QCOW2

QCOW2 est définitivement à proscrire. Il a été impossible d’obtenir un résultat mesurable dans 3 différents tests. Dans le test AIO Stress, parce que KVM est devenu complètement instable et a arrêté de répondre. Dans le test tiobench, parce qu’après plus de 48 heures le test n’avait toujours pas terminé. Les autres formats produisent un résultat en moins de 3 heures.

Prenez notes que QCOW2 offre une performance raisonnable quand le fichier est écrit sur une partition au format ext4. On en conclut que la combinaison avec ZFS pose problème.

ZVOL

Ce format fournit des performances similaires à RAW, parfois un peu plus lent. Par contre, il est fourni avec un ensemble de fonctionnalités qui ne sont pas négligeables dans les gestions de machine virtuelle: thin provisioning, compression, snapshot, clone, migration, etc.

Les tests en lecture fournissent de meilleurs résultats. C’est évidemment en écriture que les performances sont moins bonnes.

Conclusion

Selon toute vraisemblance, le format ZVOL est un bon choix en comparaison à RAW et QCOW2. Un peu plus lent en écriture, mais fournit un ensemble de fonctionnalité non négligeable. Toutefois, il faut considérer ZFS étant très gourmand en terme de ressources machine (mémoire et I/O). Un serveur avec ZFS a besoin de meilleures spécifications techniques si on attend un bon rendement. On a d’ailleurs constaté le problème avec nos vieux serveurs.

Cela dit, ZFS offre plusieurs paramètres de configuration pour s’adapter aux différentes charges de travail. Nos quelques analyses permettent de constater que les paramètres par défaut de Promox ne sont pas optimaux pour nos machines virtuelles. Dans nos prochains articles, nous allons tester certains de ces paramètres en vue d’optimiser les performances de ZFS/ZVOL.

Comment convertir vos disques vers ZVOL?

Avec proxmox, il est très facile de passer d’un format de stockage vers un autre. Avec l’interface web, il suffit de sélectionner le disque à convertir et d’utiliser l’action “Move Disk”. Il vous sera alors possible de sélectionner le nouveau format de stockage.

Étapes pour convertir un disque vers ZVOL.

Résultats

Voici le résultat de nos tests qui permet de comparer la différence de performance entre les trois formats de stockage.

SQLite - Timed SQLite Insertions
( plus petit c’est mieux)

  • RAW: 1299.97 seconds
  • QVOW2: 1085.8 seconds
  • ZVOL: 1434.07 seconds

Apache Benchmark - Static Web Page Serving
( plus grand c’est mieux)

  • RAW: 6249.33 Requests/s
  • QVOW2: 6205.42 Requests/s
  • ZVOL: 6065.95 Requests/s

Threaded I/O Tester - 64MB Random Read - 32 Threads
( plus grand c’est mieux)

  • RAW: 997.68 MB/s
  • ZVOL: 1453.97 MB/s

** QCOW2 n’a produit aucun résulat valable pour ce test.

Threaded I/O Tester - 64MB Random Write - 32 Threads
( plus grand c’est mieux)

  • RAW: 0.59 MB/s
  • ZVOL: 0.58 MB/s

** QCOW2 n’a produit aucun résulat valable pour ce test.