Configuration du cache ZFS pour IO à grande vitesse

Configuration du cache ZFS pour IO à grande vitesse
L'équipe derrière ZFS croit que la mémoire libre et inutilisée est une mémoire gaspillée. Ainsi, ils ont conçu ZFS pour mettre en cache les données très agressivement. ZFS essaie de mettre en cache autant de données que possible dans la mémoire (RAM) pour fournir un accès plus rapide au système de fichiers.

Malheureusement, la mémoire (RAM) est très coûteuse. Ainsi, ZFS vous permet également d'utiliser des SSD rapides pour la mise en cache des données. Les données de mise en cache sur la mémoire sont appelées cache de niveau 1 ou L1 et les données de mise en cache sur le SSD sont appelées cache de niveau 2 ou L2.

ZFS fait 2 types de mise en cache de lecture

1. Arc (cache de remplacement adaptatif):

ZFS cache les fichiers les plus récemment et les plus fréquemment accessibles dans la RAM. Une fois qu'un fichier est mis en cache sur la mémoire, la prochaine fois que vous accéderez au même fichier, il sera servi à partir du cache au lieu de votre disque dur lent. L'accès à ces fichiers en cache sera beaucoup plus rapide que s'ils devaient être accessibles à partir de disques durs.

2. L2Arc (cache de remplacement adaptatif de niveau 2):

Le cache d'arc est stocké à la mémoire de votre ordinateur. Lorsque la mémoire est pleine, les données les plus anciennes sont supprimées du cache d'arc et que les nouvelles données sont mises en cache. Si vous ne voulez pas que ZFS jette en permanence les données en cache, vous pouvez configurer un SSD rapide en tant que cache L2ARC pour votre pool ZFS.

Une fois que vous avez configuré un cache L2ARC pour votre pool ZFS, ZFS stockera les données supprimées du cache d'arc dans le cache L2Arc. Ainsi, plus de données peuvent être conservées dans le cache pour un accès plus rapide.

ZFS fait 2 types de mise en cache d'écriture

1. Zil (journal d'intention ZFS):

ZFS alloue une petite partie de la piscine pour stocker les caches d'écriture par défaut. On l'appelle Zil ou Journal d'intention ZFS. Avant que les données ne soient écrites sur les disques durs physiques, il est stocké dans Zil. Pour minimiser le nombre d'opérations d'écriture et réduire la fragmentation des données, les données sont regroupées dans le zil et victimes du disque dur physique une fois qu'un certain seuil est atteint. C'est plus comme un tampon d'écriture que le cache. Vous pouvez y penser de cette façon.

2. Slog (journal secondaire):

Comme ZFS utilise une petite partie de la piscine pour stocker Zil, il partage la bande passante de la piscine ZFS. Cela peut avoir un impact négatif sur les performances du pool ZFS.

Pour résoudre ce problème, vous pouvez utiliser un SSD rapide comme appareil SLOG. Si un appareil slog existe sur une piscine ZFS, alors Zil est déplacé vers le dispositif SLOG. ZFS ne stockera plus de données ZIL sur la piscine. Donc, aucune bande passante de piscine n'est gaspillée sur Zil.

Il y a aussi d'autres avantages. Si une application écrit au pool ZFS sur le réseau (i.e. VMware ESXi, NFS), ZFS peut rapidement écrire les données à Slog et envoyer un accusé de réception à l'application que les données sont écrites sur le disque. Ensuite, il peut écrire les données pour des disques durs plus lents comme d'habitude. Cela rendra ces applications plus réactives.

Notez que normalement, ZFS ne lit pas du slog. ZFS ne lit que les données du slog en cas de perte de puissance ou d'écriture d'écriture. Les écritures reconnues ne sont stockées que temporairement jusqu'à ce qu'elles soient rincées aux disques durs plus lents. Ce n'est que là pour s'assurer qu'en cas de perte de puissance ou d'échec de l'écriture, les écritures reconnues ne sont pas perdues et qu'elles sont rincées sur les dispositifs de stockage permanents le plus rapidement possible.

Notez également qu'en l'absence d'un dispositif de slog, Zil sera utilisé dans le même but.

Maintenant que vous savez tout sur les caches de lecture et d'écriture de ZFS, voyons comment les configurer sur votre pool ZFS.

Table des matières

  1. Configuration de la limite de mémoire maximale pour l'arc
  2. Ajout d'un dispositif de cache L2ARC
  3. Ajout d'un appareil SLOG
  4. Conclusion
  5. Les références

Configuration de la limite de mémoire maximale pour l'arc

Sur Linux, ZFS utilise 50% de la mémoire installée pour la mise en cache d'arc par défaut. Donc, si vous avez 8 Go de mémoire installé sur votre ordinateur, ZFS utilisera 4 Go de mémoire pour la mise en cache d'arc chez Max.

Si vous en avez besoin, vous pouvez augmenter ou diminuer la quantité maximale de mémoire que ZFS peut utiliser pour la mise en cache d'arc. Pour définir la quantité maximale de mémoire que ZFS peut utiliser pour la mise en cache d'arc, vous pouvez utiliser le zfs_arc_max paramètre du noyau.

Vous pouvez trouver beaucoup d'informations sur l'utilisation du cache d'arc avec le arc_summary Commande comme suit:

$ sudo arc_summary -s arc

Dans le Taille de l'arc (courant) Section, vous pouvez trouver la taille maximale que le cache d'arc peut augmenter (Taille maximale (haute eau)), la taille du cache d'arc actuel (Taille cible (adaptative)), et d'autres informations d'utilisation du cache d'arc comme vous pouvez le voir dans la capture d'écran ci-dessous.

Remarquez que la taille du cache à arc maximum sur mon ordinateur est 3.9 Go car j'ai 8 Go de mémoire installé sur mon ordinateur. Cela représente environ 50% de la mémoire disponible totale comme je l'ai mentionné plus tôt.

Vous pouvez voir combien de données atteignent le cache d'arc et combien de données manquent également le cache d'arc. Cela peut vous aider à déterminer l'efficacité du cache d'arc dans votre scénario.

Pour imprimer un résumé du cache d'arc Hits / Misses, exécutez la commande suivante:

$ sudo arc_summary -s archives

Un résumé des tubes et des ratés du cache d'arc doit être affiché comme vous pouvez le voir dans la capture d'écran ci-dessous.

Vous pouvez surveiller l'utilisation de la mémoire du cache d'arc ZFS avec la commande suivante:

$ sudo arcstat 1 2> / dev / null

Comme vous pouvez le voir, la mémoire maximale du cache d'arc (c), la taille actuelle du cache d'arc (arcsz), données lues dans le cache d'arc (lire) et d'autres informations s'affichent.

Maintenant, voyons comment définir une limite de mémoire personnalisée pour le cache d'arc ZFS.

Pour définir une limite de mémoire maximale personnalisée pour le cache d'arc ZFS, créez un nouveau fichier ZFS.confli dans le / etc / modprobe.d/ Répertoire comme suit:

$ sudo nano / etc / modprobe.D / ZFS.confli

Tapez la ligne suivante dans le ZFS.confli déposer:

Options zfs zfs_arc_max =

Remplacer, avec votre limite de mémoire maximale souhaitée pour le cache d'arc ZFS en octets.

Disons que vous souhaitez utiliser 5 Go de mémoire pour le cache d'arc ZFS. Pour convertir 5 Go en octets, vous pouvez utiliser la commande suivante:

$ echo $ ((5 * 2 ** 30))

Comme tu peux le voir, 5 Go est égal à 5368709120 octets.

Vous pouvez faire la même chose avec l'interprète Python 3 comme suit:

$ Python3 -C "Print (5 * 2 ** 30)"

Une fois que vous avez défini la limite de mémoire maximale du cache d'arc ZFS, appuyez sur + X suivie par Y et Pour sauver le ZFS.confli déposer.

Maintenant, mettez à jour l'image initramfs de votre noyau actuel avec la commande suivante:

$ sudo update-initramfs -u

L'image initramfs doit être mise à jour.

Pour que les modifications prennent effet, redémarrez votre ordinateur avec la commande suivante:

$ sudo redémarrer

La prochaine fois que vous démarrez votre ordinateur, la limite de mémoire maximale de votre cache d'arc ZFS devrait être réglée sur la taille souhaitée (5 Go dans mon cas) comme vous pouvez le voir dans la capture d'écran ci-dessous.

$ sudo arc_summary -s arc

Ajout d'un dispositif de cache L2ARC

Si un dispositif de cache L2Arc (un SSD ou NVME SSD) est ajouté à votre pool ZFS, ZFS déchargera (déplacer) les caches d'arc sur le périphérique L2ARC lorsque la mémoire est pleine (ou atteint la limite d'arc maximum). Ainsi, plus de données peuvent être conservées dans le cache pour un accès plus rapide au pool ZFS.

Pour suivre les exemples, créez une piscine ZFS de test piscine 1 avec / dev / sdb et / dev / sdc disques durs dans la configuration en miroir comme suit:

$ sudo zpool Create -F Pool1 Mirror / dev / sdb / dev / sdc

Une piscine ZFS piscine 1 devrait être créé avec le / dev / sdb et / dev / sdc disques durs en mode miroir comme vous pouvez le voir dans la capture d'écran ci-dessous.

$ sudo zpool Pool1

Maintenant, disons, vous voulez ajouter le NVME SSD nvme0n1 En tant que dispositif de cache L2ARC pour la piscine ZFS piscine 1.

$ sudo lsblk -e7

Pour ajouter le NVME SSD nvme0n1 à la piscine ZFS piscine 1 En tant que périphérique de cache L2Arc, exécutez la commande suivante:

$ sudo zpool add -f pool1 cache / dev / nvme0n1

Le NVME SSD nvme0n1 devrait être ajouté à la piscine ZFS piscine 1 comme un dispositif de cache L2Arc que vous pouvez le voir dans la capture d'écran ci-dessous.

$ sudo zpool Pool1

Une fois que vous avez ajouté un périphérique de cache L2Arc à votre pool ZFS, vous pouvez afficher les statistiques de cache L2ARC à l'aide du arc_summary Commande comme suit:

$ sudo arc_summary -s l2arc

Les statistiques du cache L2ARC doivent être affichées comme vous pouvez le voir dans la capture d'écran ci-dessous.

Ajout d'un appareil SLOG

Vous pouvez ajouter un ou plusieurs SSDS / NVME SSD sur votre pool ZFS en tant que périphérique SLOG (journal secondaire) pour stocker le journal d'intention ZFS (ZIL) de votre pool ZFS là-bas.

Ajouter généralement un SSD est suffisant. Mais comme Slog est utilisé pour s'assurer que les écritures ne sont pas perdues dans le cas d'une défaillance de puissance et d'autres problèmes d'écriture, il est recommandé d'utiliser 2 SSD dans une configuration en miroir. Cela vous offrira un peu plus de protection et assurera qu'aucune écriture n'est perdue.

Disons, vous voulez ajouter les SSD NVME nvme0n2 et nvme0n3 En tant qu'appareil slog sur votre piscine ZFS piscine 1 dans une configuration en miroir.

$ sudo lsblk -e7

Pour ajouter les SSD NVME nvme0n2 et nvme0n3 En tant qu'appareil slog sur votre piscine ZFS piscine 1 Dans une configuration en miroir, exécutez la commande suivante:

$ sudo zpool add -f pool1 journal miroir / dev / nvme0n2 / dev / nvme0n3

Si vous souhaitez ajouter un seul SSD NVME nvme0n2 En tant qu'appareil slog sur votre piscine ZFS piscine 1, Vous pouvez plutôt exécuter la commande suivante:

$ sudo zpool add -f pool1 log / dev / nvme0n2

Les SSD NVME nvme0n2 et nvme0n3 devrait être ajouté à votre piscine ZFS piscine 1 En tant que dispositif slog en mode miroir que vous pouvez le voir dans la capture d'écran ci-dessous.

$ sudo zpool Pool1

Vous pouvez trouver des informations sur les transactions zil et slog à l'aide du arc_summary Commande comme suit:

$ sudo arc_summary -s zil

Les informations de transaction Zil et Slog doivent être affichées comme vous pouvez le voir dans la capture d'écran ci-dessous.

Conclusion

Dans cet article, j'ai discuté de différents types de fonctionnalités de mise en cache de lecture et d'écriture du système de fichiers ZFS. Je vous ai également montré comment configurer la limite de mémoire pour le cache d'arc. Je vous ai montré comment ajouter également un périphérique de cache L2Arc et un appareil SLOG à votre pool ZFS.

Les références

[1] ZFS - Wikipedia

[2] Eli5: ZFS Caching (2019) - YouTube

[3] Présentation de ZFS sur Linux - Damian Wojstaw

[4] Ubuntu ManPage: ZFS-Module-Parameters - Paramètres du module ZFS

[5] Ram - est ZFS sur Ubuntu 20.04 Utilisation d'une tonne de mémoire? - Demandez à Ubuntu