Niveau : intermédiaire
Lorsque j'ai installé mon serveur ZFS, je n'avais aucun problème de performances.
Au contraire, les débits des grappes, de NFS et de SAMBA étaient très bons, excellents.
Pourtant, lorsque j'ai mis en place mes premières machines virtuelles sur VMWare ESXi, via NFS, je me suis rendu compte que les opérations d'écriture étaient affreusement lentes.
Explication
Après avoir fait mon enquête, ESXi utilise les montages NFS en mode synchrone. Autrement dit, pour toute opération d'écriture, NFS doit certifier que les données ont été écrites sur le support de masse.
ESXi est sur ce point paranoïaque, et veut être absolument certain que les images des VMs seront cohérentes en cas de plantage (si ne serait-ce qu'un octet n'a pas été écrit sur le stockage de masse et que le serveur de stockage plante, il y aura corruption des données).
C'est un gros avantage, mais cela fait aussi que les performances ne sont absolument pas bonnes.
Ce n'est d'ailleurs pas un problème lié à ZFS en particulier ...
Quels sont les moyens d'améliorer les performances ?
Comme dit précédemment, il n'est pas possible de changer le mode de fonctionnement du client NFS d'ESXi, il ne supporte que le mode synchrone.
1 - Ajouter un disque SSD (rapide et SLC de préférence, en RAID 1 lorsque vous en avez le budget) comme partition SLOG. Le cache ZIL validera alors l'opération d'écriture lorsque elle aura été écrite sur le SLOG. Le transfert vers la grappe de disques pourra alors avoir lieu à postériori. Cela permet un gain très significatif du débit, tout en étant rassuré sur l'intégrité des données. Voir l'article d'introduction à ZFS
2 - Utiliser iSCSI. Les opérations d'écriture seront validées rapidement, et ça sera alors au serveur de stockage de s'assurer de la cohérence des données.
3 - Désactiver les écritures synchrones, directement sur ZFS, via une commande simple : zfs set sync=disabled
Bien que la dernière solution soit accessible immédiatement et sans coût supplémentaire, elle a aussi un désavantage : si le serveur venait à planter, il se pourrait que vos VMs soient corrompues.
C'est un "bricolage" qui peut être mis en place dans un lab ou à la maison (à condition d'avoir des sauvegardes régulières), mais elle est absolument déconseillée dans un environnement de production.