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

20

Le manuel de l'option de montage «barrière» est le suivant:

barrière = 0 / barrière = 1

Ceci désactive / active l'utilisation des barrières d'écriture dans le code jbd.barrier = 0 désactive, barrière = 1 active (par défaut). Cela nécessite également une pile d'E / S qui peut prendre en charge les barrières, et si jbd obtient une erreur sur une écriture de barrière, il désactivera à nouveau les barrières avec un avertissement. Les barrières d'écriture imposent un bon ordre sur disque des validations de journal, ce qui rend les caches d'écriture sur disque volatiles sûrs à utiliser, avec une certaine pénalité de performance. Si vos disques sont alimentés par batterie d'une manière ou d'une autre, la désactivation des barrières peut améliorer les performances en toute sécurité.

Mais je ne sais pas ce que signifie la phrase " bon ordre sur disque des commits de journaux ".

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

  1. journal 2, données 2; journal 1, données 1;
  2. données 1, journal 1; données 2, journal 2.
épée
la source
git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/… est probablement une lecture intéressante.
Håkan Lindqvist
1
Si vous lisez sur la journalisation des systèmes de fichiers, vous vous rendrez compte qu'il est important d'écrire le journal en premier, puis d'exécuter le journal, écrivant ainsi les données réelles sur le disque. La barrière garantit que le journal est écrit avant son exécution. Sinon le journal est inutile.
ctrl-alt-delor
@richard Lorsque vous utilisez l'indicateur "nobarrier" dans le raid dur BBWC, le disque ne peut pas garantir que le journal est écrit avant l'exécution de ses données, cette condition n'a-t-elle pas d'importance?
leafonsword
Je n'en sais pas assez pour savoir si c'est important. Je pense qu'au pire c'est aussi mauvais que pas de journal, mais ce que j'ai lu ne semble pas si mauvais, cependant je ne peux pas discerner les subtilités. Je l'ai barrier=1, et ça marche assez vite pour moi. À moins que vous ne fassiez de vrais trucs lourds, je le laisserais. Vous avez des tampons ram, donc les choses seront écrites quand cela sera possible, sans ralentir les applications. Et très peu de retard dans l'écriture sur le disque. Si vous souhaitez voir à quel point les tampons ram accélèrent, ajoutez sync = 1 à votre répertoire personnel et essayez d'utiliser votre système pendant un jour ou deux.
ctrl-alt-delor

Réponses:

15

La plupart des systèmes de fichiers modernes sont des systèmes de fichiers journalisés, ce qui signifie qu'ils gardent une trace des 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 pour s'assurer que toutes les écritures ont été effectuées avec succès, empêchant la corruption de fichiers.

Lors de l'écriture effective des données sur le disque, le cache d'écriture réordonnera les écritures pour essayer de maximiser le débit, mais il doit s'assurer que les données du fichier réel sont écrites sur le disque avant les métadonnées, pour s'assurer qu'en cas de panne se produit, les métadonnées ne seront pas obsolètes avec les données.

Le problème est que de nombreux disques ont leurs propres caches qui peuvent également réorganiser les écritures. Certains systèmes de fichiers supposent que cela se produira et forceront le disque à vider le cache à certains moments pour éviter cela, et sont appelés write barrierspar exemple ext4 et Linux en général.

Pour les disques modernes, le sacrifice de performances pour ce faire est cependant négligeable, et vous ne devez pas désactiver les barrières d'écriture à moins que cela ne soit absolument nécessaire.

kyrias
la source
1

De cet article LWN :

Le code du système de fichiers doit, avant d'écrire l'enregistrement de validation [de journalisation], être absolument sûr que toutes les informations de la transaction ont été transmises au journal. Il suffit de faire les écritures dans le bon ordre; les lecteurs contemporains conservent de grandes caches internes et réorganiseront les opérations pour de meilleures performances. Le système de fichiers doit donc explicitement demander au disque de récupérer toutes les données du journal sur le support avant d'écrire l'enregistrement de validation; si l'enregistrement de validation est écrit en premier, le journal peut être corrompu. Le sous-système d'E / S de bloc du noyau rend cette capacité disponible grâce à l'utilisation de barrières; en substance, une barrière interdit l'écriture de tout bloc après la barrière jusqu'à ce que tous les blocs écrits avant la barrière soient transmis aux médias. En utilisant des barrières,

qinganfan
la source