Configuration du cache sur votre pool ZFS
Si vous avez vécu nos articles précédents sur les bases de ZFS, vous savez maintenant qu'il s'agit d'un système de fichiers robuste. Il effectue des sommes de contrôle sur chaque bloc de données écrites sur le disque et les métadonnées importantes, comme les sommes elles-mêmes, sont écrites à plusieurs endroits différents. ZFS pourrait perdre vos données, mais il est garanti de ne jamais vous rendre de mauvaises données, comme si c'était la bonne.
La majeure partie de la redondance d'une piscine ZFS provient du VDEV sous-jacent. Il en va de même pour les performances de la piscine de stockage. Les performances de lecture et d'écriture peuvent s'améliorer considérablement par l'ajout de SSD à grande vitesse ou de dispositifs NVME. Si vous avez utilisé des disques hybrides où un SSD et un disque de rotation sont regroupés en tant que matériel unique, vous savez à quel point les mécanismes de mise en cache de niveau matériel sont mauvais. ZFS n'a rien à voir avec cela, à cause de divers facteurs, que nous explorerons ici.
Il y a deux caches différentes qu'une piscine peut utiliser:
Écrits synchrones vs asynchrones
ZFS, comme la plupart des autres systèmes de fichiers, essaie de maintenir un tampon d'opérations d'écriture en mémoire, puis de l'écrire sur les disques au lieu de l'écrire directement sur les disques. Ceci est connu comme asynchrone Écrire et il donne des gains de performances décents pour les applications tolérantes aux pannes ou où la perte de données ne fait pas beaucoup de dégâts. Le système d'exploitation stocke simplement les données en mémoire et indique à l'application, qui a demandé l'écriture, que l'écriture est terminée. Il s'agit du comportement par défaut de nombreux systèmes d'exploitation, même lors de l'exécution de ZFS.
Cependant, le fait demeure qu'en cas de défaillance du système ou de perte de puissance, toutes les écritures tamponnées dans la mémoire principale sont perdues. Ainsi, les applications qui souhaitent la cohérence sur les performances peuvent ouvrir des fichiers synchrone Mode, puis les données sont considérées comme écrites qu'une fois qu'elles sont réellement sur le disque. La plupart des bases de données et des applications comme NFS s'appuient sur les écritures synchrones tout le temps.
Vous pouvez définir le drapeau: sync = toujours Pour faire des écritures synchrones, le comportement par défaut pour un ensemble de données donné.
$ zfs set sync = toujours mypool / dataset1Bien sûr, vous pouvez souhaiter avoir de bonnes performances, que les fichiers soient ou non en mode synchrone. C'est là que Zil entre en scène.
ZFS INTING LOG (ZIL) et Slog Devices
Le journal d'intention ZFS fait référence à une partie de votre pool de stockage que ZFS utilise pour stocker d'abord des données nouvelles ou modifiées, avant de la diffuser dans toute la piscine de stockage principale, en dépouillant tous les VDEV.
Par défaut. Cependant, vous pouvez faire mieux si vous avez un petit NVME ou tout autre type de SSD à votre disposition.
Le stockage petit et rapide peut être utilisé comme journal d'intention (ou slog) distinct, où les données nouvellement arrivées seraient stockées temporairement avant d'être rincées au plus grand stockage principal de la piscine. Pour ajouter un périphérique slog, exécutez la commande:
$ zpool Ajouter le chariot de char Ada3Où réservoir est le nom de votre piscine, enregistrer Le mot-clé indique-t-il à ZFS de traiter l'appareil ada3 En tant que dispositif de slog. Le nœud de l'appareil de votre SSD n'est pas nécessairement ada3, Utilisez le nom du nœud correct.
Vous pouvez maintenant vérifier les appareils de votre piscine comme indiqué ci-dessous:
Vous pouvez toujours craindre que les données d'une mémoire non volatile échouent si le SSD échoue. Dans ce cas, vous pouvez utiliser plusieurs SSDs se reflétant les uns les autres ou dans n'importe quelle configuration RAIDZ.
$ zpool Ajouter le miroir de bûche de réservoir ada3 ada4Pour la plupart des cas d'utilisation, les petits 16 Go à 64 Go de stockage flash très rapide et durable sont les candidats les plus appropriés pour un appareil slog.
Cache de remplacement adaptatif (ARC) et L2Arc
Lorsque vous essayez de mettre en cache les opérations de lecture, notre objectif change. Au lieu de s'assurer que nous obtenons de bonnes performances, ainsi que des transactions fiables, maintenant les motifs de ZFS se déplacent vers la prévision de l'avenir. Cela signifie, en cache les informations dont une application aurait besoin dans un avenir proche, tout en jetant ceux qui seront nécessaires le plus à l'avance dans le temps.
Pour ce faire, une partie de la mémoire principale est utilisée pour la mise en cache des données qui ont été utilisées récemment ou les données sont accessibles le plus fréquemment. C'est de là que le terme cache de remplacement adaptatif (ARC). En plus de la mise en cache de lecture traditionnelle, où seuls les derniers objets utilisés sont mis en cache, l'arc fait également attention à la fréquence à laquelle les données ont été accessibles.
L2ARC, ou arc de niveau 2, est une extension de l'arc. Si vous avez un dispositif de stockage dédié pour agir comme votre L2Arc, il stockera toutes les données qui ne sont pas trop importantes pour rester dans l'arc, mais en même temps, ces données sont suffisamment utiles pour mériter une place dans la plus lentement que la mémoire Appareil NVME.
Pour ajouter un appareil car le L2ARC à votre pool ZFS exécute la commande:
$ zpool Ajouter un réservoir Cache Ada3Où réservoir est le nom de votre piscine et ada3 est le nom du nœud de l'appareil pour votre stockage L2ARC.
Pour couper une longue histoire, un système d'exploitation tamponne souvent des opérations d'écriture dans la mémoire principale, si les fichiers sont ouverts en mode asynchrone. Cela ne doit pas être confondu avec le cache d'écriture réel de ZFS, Zil.
Zil, par défaut, fait partie du stockage non volatile du pool où les données optent pour un stockage temporaire avant de se répandre correctement dans tous les VDEV. Si vous utilisez un SSD comme un appareil zil dédié, il est connu sous le nom de slog. Comme tout VDEV, Slog peut être en configuration miroir ou raidz.
Le cache de lecture, stocké dans la mémoire principale, est connu sous le nom de l'arc. Cependant, en raison de la taille limitée de la RAM, vous pouvez toujours ajouter un SSD en tant que L2ARC, où les choses qui ne peuvent pas rentrer dans la RAM sont mises en cache.