Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

Chapitre 21. Barrières d'écriture

Une barrière d'écriture est un mécanisme du noyau utilisé pour s'assurer que les métadonnées du système de fichiers soient écrites et ordonnées correctement sur un stockage persistant, même lorsque les périphériques de stockage avec des caches d'écriture volatiles subissent une perte de puissance. Les systèmes de fichiers avec des barrières d'écriture activées assurent aussi que toutes données transmises via fsync() persistent lors de pannes de courant.
Cependant, l'activation des barrières d'écritures provoque une réduction significative des performances de certaines applications. Les applications qui utilisent beaucoup fsync(), ou qui créent et suppriment de nombreux fichiers de petite taille fonctionneront probablement bien plus lentement.

21.1. Importance des barrières d'écriture

Les systèmes de fichiers prennent grand soin de mettre à jour les métadonnées, s'assurant ainsi de leur cohérence. Les systèmes de fichiers journalisés assemblent les mises à jour de métadonnées en transactions et les envoient sur le stockage persistant comme suit :
  1. Premièrement, le système de fichiers envoie le corps de la transaction au périphérique de stockage.
  2. Puis le système de fichiers envoie un bloc de validation.
  3. Si la transaction et son bloc de validation correspondant sont écrits sur le disque, le système de fichiers supposera que la transaction pourra survivre à une panne de courant.
Cependant, l'intégrité des systèmes de fichiers pendant les pannes de courant est de plus en plus complexe pour les périphériques de stockage avec des caches supplémentaires. Les périphériques de stockage cibles comme les disques S-ATA ou SAS peuvent offrir des caches d'écriture allant de 32 Mo à 64 Mo (avec des disques modernes). Les contrôleurs RAID matériel contiennent souvent des caches d'écriture internes. De plus, les matrices haut de gamme, comme celles de NetApp, IBM, Hitachi et EMC (entre autres), offrent également des matrices de grande taille.
Les périphériques de stockage avec des caches d'écriture rapportent les E/S comme étant « complete » (terminées) lorsque les données sont dans le cache ; si le cache subit une panne de courant, les données seront également perdues. Pire encore, au fur et à mesure que le cache se déplace sur le stockage persistant, il peut modifier l'ordre original des métadonnées. Lorsque cela se produit, le bloc de validation peut se trouver sur le disque sans que la transaction terminée et associée ne soit en place. Par conséquent, le journal pourrait réutiliser ces blocs de transactions non-initialisées dans le système de fichiers pendant la récupération après la perte de courant ; ceci pourrait provoquer la corruption et l'incohérence des données.

Comment les barrières d'écriture fonctionnent

Les barrières d'écriture sont implémentées dans le noyau Linux à travers des vidages de caches d'écriture du stockage avant et après les E/S, dont l'ordre est critique. Une fois la transaction écrite, le cache du stockage est vidé, le bloc de validation est écrit, puis le cache est à nouveau vidé. Ceci permet de s'assurer que :
  • Le disque contient bien toutes les données.
  • Aucun changement d'ordre ne s'est produit.
Avec les barrières activées, un appel fsync() provoquera également le vidage du cache du stockage. Ceci garantit la persistance sur disque des données de fichiers même si une panne de courant se produit peu après le retour de fsync().