ZFS

Configuration du cache ZFS pour les E/S haute vitesse

Configuration du cache ZFS pour les E/S haute vitesse

Configuration du cache sur votre pool ZFS

Si vous avez lu nos précédents articles 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 écrit sur le disque et les métadonnées importantes, comme les sommes de contrôle elles-mêmes, sont écrites à plusieurs endroits différents. ZFS peut perdre vos données, mais il est garanti de ne jamais vous restituer de mauvaises données, comme si c'était les bonnes.

La plus grande partie de la redondance d'un pool ZFS provient des VDEV sous-jacents. Il en est de même pour les performances du pool de stockage. Les performances de lecture et d'écriture peuvent être considérablement améliorées par l'ajout de disques SSD à grande vitesse ou de périphériques NVMe. Si vous avez utilisé des disques hybrides où un SSD et un disque rotatif sont regroupés en un seul élément matériel, vous savez à quel point les mécanismes de mise en cache au niveau matériel sont mauvais. ZFS ne ressemble en rien à cela, à cause de divers facteurs, que nous allons explorer ici.

Un pool peut utiliser deux caches différents :

  1. Journal d'intention ZFS, ou ZIL, pour mettre en mémoire tampon les opérations d'ÉCRITURE.
  2. ARC et L2ARC qui sont destinés aux opérations de LECTURE.

Écritures synchrones et 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 cela donne des gains de performances décents pour les applications tolérantes aux pannes ou pour lesquelles 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. C'est le comportement par défaut de nombreux systèmes d'exploitation, même lors de l'exécution de ZFS.

Cependant, il n'en demeure pas moins qu'en cas de panne du système ou de coupure de courant, toutes les écritures mises en mémoire tampon dans la mémoire principale sont perdues. Ainsi, les applications qui préfèrent la cohérence aux performances peuvent ouvrir des fichiers dans synchrone mode et alors les données ne 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 telles que NFS reposent en permanence sur des écritures synchrones.

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=always mypool/dataset1

Bien 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.


Périphériques ZFS Intent Log (ZIL) et SLOG

Le journal d'intention ZFS fait référence à une partie de votre pool de stockage que ZFS utilise d'abord pour stocker les données nouvelles ou modifiées, avant de les répartir dans le pool de stockage principal, en supprimant tous les VDEV.

Par défaut, une petite quantité de stockage est toujours extraite du pool pour agir comme ZIL, même lorsque vous n'utilisez qu'un tas de disques rotatifs pour votre stockage. Cependant, vous pouvez faire mieux si vous disposez d'un petit NVMe ou de tout autre type de SSD.

Le stockage petit et rapide peut être utilisé comme un journal d'intention séparé (ou SLOG), où les données nouvellement arrivées seraient stockées temporairement avant d'être vidées vers le stockage principal plus grand du pool. Pour ajouter un périphérique slog, exécutez la commande :

$zpool ajouter un journal de réservoir ada3

Char est le nom de votre piscine, Journal est le mot-clé indiquant à ZFS de traiter l'appareil ada3 en tant qu'appareil SLOG. Le nœud de périphérique de votre SSD n'est pas nécessairement ada3, utiliser le bon nom de nœud.

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 SSD en miroir ou dans n'importe quelle configuration RAIDZ.

$zpool ajouter un miroir de journal de réservoir ada3 ada4

Pour 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

En essayant 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, la motivation de ZFS se tourne désormais vers la prédiction de l'avenir. Cela signifie mettre en cache les informations dont une application aurait besoin dans un proche avenir, tout en rejetant celles qui seront nécessaires le plus à l'avance.

Pour ce faire, une partie de la mémoire principale est utilisée pour mettre en cache les données qui ont été utilisées récemment ou les données les plus fréquemment consultées. C'est de là que vient le terme Adaptive Replacement Cache (ARC). En plus de la mise en cache de lecture traditionnelle, où seuls les objets les plus récemment utilisés sont mis en cache, l'ARC fait également attention à la fréquence d'accès aux données.

L2ARC, ou ARC de niveau 2, est une extension de l'ARC. Si vous avez un périphérique 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 mémoire plus lente que la mémoire. Périphérique NVMe.

Pour ajouter un périphérique en tant que L2ARC à votre pool ZFS, exécutez la commande :

$zpool ajoute un cache de réservoir ada3

Char est le nom de votre piscine et ada3 est le nom du nœud de périphérique pour votre stockage L2ARC.


Résumé

Pour faire court, un système d'exploitation met souvent en mémoire tampon les 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 sont stockées temporairement avant d'être correctement réparties dans tous les VDEV. Si vous utilisez un SSD comme périphérique ZIL dédié, il est appelé 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 d'ARC. Cependant, en raison de la taille limitée de la RAM, vous pouvez toujours ajouter un SSD en tant que L2ARC, où les éléments qui ne peuvent pas tenir dans la RAM sont mis en cache.

Comment développer un jeu sur Linux
Il y a dix ans, peu d'utilisateurs de Linux prédisaient que leur système d'exploitation préféré serait un jour une plate-forme de jeu populaire pour l...
Ports Open Source des moteurs de jeux commerciaux
Les récréations de moteur de jeu gratuites, open source et multiplateformes peuvent être utilisées pour jouer à d'anciens ainsi qu'à certains des titr...
Meilleurs jeux de ligne de commande pour Linux
La ligne de commande n'est pas seulement votre plus grand allié lorsque vous utilisez Linux, elle peut également être une source de divertissement car...