Que signifie le drapeau de assembly «barrière» sous Linux?

Le manuel de l'option de assembly «barrière» est:

barrière = 0 / barrière = 1

Cela désactive / permet l'utilisation de barrières d'écriture dans jbd code.barrier = 0 désactive, barrière = 1 active (par défaut). Cela nécessite également une stack d'E / S qui peut supporter des barrières, et si jbd obtient une erreur sur une écriture de barrière, il désactivera de nouveau les barrières avec un avertissement. Les barrières d'écriture imposent un ordonnancement approprié des carnets de journal, rendant les caches d'écriture de disque volatile sûrs à utiliser, à certaines pénalités de performance. Si vos disques sont protégés par une batterie d'une manière ou d'une autre, la désactivation des barrières peut améliorer les performances en toute security.

Mais je ne sais pas ce que veut dire la phrase "un bon ordre sur le disque du journal ".

Supposons un ordre normal – journal 1, données 1; journal 2, données 2.
Lequel des résultats de classment suivants se produira si je règle la barrier=0 ?

  1. journal 2, données 2; journal 1, données 1;
  2. données 1, journal 1; données 2, journal 2.

La plupart des filesystems modernes sont des filesystems de journalisation, ce qui signifie qu'ils suivent les modifications qui n'ont pas encore été écrites sur le disque dans une structure de données interne appelée journal. En cas de plantage, ce journal sera relu afin de s'assurer que toutes les écritures ont été exécutées avec succès, ce qui évite la corruption de files.

Lors de l'écriture des données sur le disque, le cache d'écriture réordonne les écritures pour tenter de maximiser le débit, mais il doit s'assurer que datatables du file sont écrites sur le disque avant les métadonnées, afin de s'assurer que si un crash les métadonnées ne seront pas obsolètes avec datatables.

Le problème est que de nombreux disques ont leurs propres caches qui pourraient réorganiser les écritures aussi. Certains filesystems supposeront que cela se produira et forceront le disque à vider le cache à certains points pour éviter cela, et est appelé write barriers dans par exemple ext4, et Linux en général.

Pour les disques modernes, le sacrifice de performance pour ce faire est négligeable cependant, et vous ne devriez pas désactiver les barrières d'écriture sauf si absolument nécessaire.