====== Benchmark des stockages de Proxmox ====== ==== Introduction ==== L'idée de cette page est de déterminer quel est la meilleure solution pour le stockage des Machines Virtuelles, afin de sortir quel système de stockage local, et quelles options sont les plus judiciables d'un point de vue performance mais aussi en terme de fonctionnalité. J’essaie d’être le plus exhaustif en terme de configuration, même si certaines options ont pues être ignorées/oubliées. Afin de réaliser ce benchmark, je vais utiliser la machine suivante : ^ **__Type__** ^ **__Equipement__** | ^ CPU | Intel Core i5 7600K | ^ Carte mère | Asus Z170 PRO GAMING | ^ Mémoire | 2*8GB Corsair 2133MHz DDR4 | ^ Disque Dur | KINGSTON SSD A400 480GB | | ::: | Samsung SSD 970 EVO Plus NMVe 250GB | Proxmox((a jour au 2020-04-01)), ainsi que la racine de la VM sont stocké sur le SSD Kingston, et tous les benchmarks seront faits sur le SSD NVMe Samsung qui est dédié uniquement a ceux-ci. \\ Ce choix permet de limiter l'impact de limitation de bande passante d'IO, ni par d'autres usages. La VM, elle est configuré comme ceci : ^ **__Type__** ^ **__Equipement__** | ^ Mémoire | 8GB | ^ CPU | 1 socket, 2 cores (host) | ^ Bios | Seabios | ^ Disque principal | 20GB sur du LVM-Thin avec discard en virtio | ^ OS | Debian 10 Buster sans UI ((a jour au 2020-04-01)) | Afin d'effectuer ces tests je vais lancer sur le disque (sans système de fichier) avec les commandes suivantes : * Pour le test d'écriture : # dd if=/dev/zero of=/dev/${DISQUE} count=10 bs=1000M conv=fdatasync * Pour le test de lecture : # sync; echo 3 > /proc/sys/vm/drop_caches; dd if=/dev/${DISQUE} of=/dev/null count=10 bs=1000M * Pour le test de latence : # ioping -B -c 10 /dev/${DISQUE} | awk '{print $6}' ==== Les résultats ==== J'ajoute quelques précisions pour mieux comprendre les résultats. Les valeurs "Host" présentes sur la totalité des graphs sont les valeurs de référence, en l’occurrence ce que le Proxmox lui-même obtient comme résultat (pas dans un VM donc). Ah, et les valeurs sont en MB/s {{ :kb:linux:proxmox:disk-benchmark-device.png |}} {{ :kb:linux:proxmox:disk-benchmark-format.png |}} {{ :kb:linux:proxmox:disk-benchmark-scsi-controller.png |}} {{ :kb:linux:proxmox:disk-benchmark-cache.png |}} {{ :kb:linux:proxmox:disk-benchmark-snapshot.png |}} {{ :kb:linux:proxmox:disk-benchmark-thin.png |}} Voici quelques remarques intéressantes : * Les options **Discard**, **IO Thread** et **SSD Emulation** n'ont pas d’impacts sur les performances.((IO Thread peut être utile dans le cas ou vous avez plusieurs disques)) * Le **VMDK** est extrêmement lent lors de l'écriture de nouveaux blocks a cause du Thin Provisionning, d'où la présence de deux passes * Il n'y a pas de différence flagrante sur le système de fichiers entre **ext4** et **xfs** * La libraire compression sur le **ZFS** n'a peu d’impact sur les performances. Mais si vous désactivez la compression, les performances sont plus faible ((Lors ce que la compression était désactivée, le proxmox avait tendance a redémarrer tout seul pendant les tests.)) * Le support de stockage **LVM** n'est pas affiché dans les précédents graphs car ne rentrant dans aucune catégorie. Pour faire simple, il n'a aucun avantage par rapport au Directory + RAW ou LVM-Thin. (1474MB/s Read, 2679MB/s Write) Pour approfondir le sujet, voici {{ :kb:linux:proxmox:proxmox_disk_benchmark.ods |le document}} contenant tout les résultats aux tests effectué. ====Conclusion==== Quel système de stockage je recommande ?\\ Même si il y a beaucoup de d'options possibles, je pense que d'utiliser la combinaison : * Controlleur SCSI VirtIO * disques VirtIO ((SCSI si pas compatible)) * Pas de cache * Discard si compatible avec l'OS guest (a partir de Linux 5.0) * IO Thread si plusieurs disques lourdement utilisé Après pour le support, j'en recommande 2, dépendant des besoins/possibilités: * **Directory** avec images en **Qcow2** car supporte l'ensemble les fonctionnalités de thin-provisioning et les snapshot, et permet aussi simplement de partager ce volume avec les sauvegardes, les ISO, et autres.... * **LVM-Thin** pour simplement le thin-provisionning, et le support des Snapshots.