Что означает флаг монтирования «барьер» в Linux?

20

Руководство по установке «барьер»:

барьер = 0 / барьер = 1

Это отключает / разрешает использование барьеров записи в jbd code.barrier = 0 отключает, барьер = 1 включает (по умолчанию). Это также требует стека ввода-вывода, который может поддерживать барьеры, и если jbd получит ошибку при записи барьера, он снова отключит барьеры с предупреждением. Барьеры записи обеспечивают правильное упорядочение записей в журнале на диске, делая безопасными использование кэшей записи на диск при некотором снижении производительности. Если ваши диски питаются от батареи тем или иным способом, отключение барьеров может безопасно повысить производительность.

Но я не знаю, что означает предложение « правильное упорядочение записей на диске ».

Допустим, нормальный порядок - журнал 1, данные 1; журнал 2, данные 2.
Какой из следующих результатов упорядочения произойдет, если я установлю barrier=0?

  1. журнал 2, данные 2; журнал 1, данные 1;
  2. данные 1, журнал 1; данные 2, журнал 2.
leafonsword
источник
git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/… вероятно стоит прочитать.
Хокан Линдквист
1
Если вы прочитаете о журналировании файловых систем, то поймете, что важно сначала записать журнал, а затем выполнить журнал, записывая реальные данные на диск. Барьер обеспечивает запись журнала перед его выполнением. В противном случае журнал нам бесполезен.
Ctrl-Alt-Delor
@richard При использовании флага «nobarrier» в жестком рейде BBWC диск не может гарантировать, что журнал будет записан до того, как будут выполнены его данные, это условие не имеет значения?
листовой меч
Я не знаю достаточно, чтобы знать, имеет ли это значение. Я бы подумал, что в худшем случае это так же плохо, как ни в одном журнале, но то, что я прочитал, не кажется таким уж плохим, однако я не могу разглядеть тонкостей. У меня есть barrier=1, и он работает достаточно быстро для меня. Если вы не делаете действительно тяжелые вещи, я бы оставил это включенным. У вас есть оперативные буферы, поэтому все будет записано, когда это возможно, без замедления для приложений. И очень маленькая задержка записи на диск. Если вы хотите увидеть, насколько оперативные буферы ускоряют процесс, добавьте sync = 1 в ваш домашний каталог и попробуйте использовать вашу систему в течение дня или двух.
Ctrl-Alt-Delor

Ответы:

15

Большинство современных файловых систем - это журнальные файловые системы, что означает, что они отслеживают изменения, которые еще не были записаны на диск, во внутренней структуре данных, называемой журналом. В случае сбоя этот журнал будет воспроизведен, чтобы убедиться, что все записи выполнены успешно, предотвращая повреждение файла.

При фактической записи данных на диск, кэш записи будет переупорядочивать записи, чтобы попытаться максимизировать пропускную способность, но он должен убедиться, что фактические данные файла записываются на диск до метаданных, чтобы убедиться, что в случае сбоя происходит метаданные не будут устаревшими с данными.

Проблема в том, что многие диски имеют свои собственные кеши, которые также могут переупорядочивать записи. Некоторые файловые системы предполагают, что это произойдет, и заставляют диск очищать кэш в определенных точках, чтобы предотвратить это, и вызывается, write barriersнапример, ext4 и Linux в целом.

Для современных дисков потери производительности при этом незначительны, и вы не должны отключать барьеры записи, если это не является абсолютно необходимым.

kyrias
источник
1

Из этой статьи LWN :

Код файловой системы должен, прежде чем писать запись фиксации [Journaling], быть абсолютно уверенным, что вся информация транзакции поступила в журнал. Просто делать записи в правильном порядке недостаточно; современные накопители поддерживают большие внутренние кэши и переупорядочивают операции для повышения производительности. Таким образом, файловая система должна явно дать указание диску получить все данные журнала на носитель перед записью записи фиксации; если запись фиксации записывается первой, журнал может быть поврежден. Блочная подсистема ввода-вывода ядра делает эту возможность доступной благодаря использованию барьеров; по сути, барьер запрещает запись любых блоков после барьера до тех пор, пока все блоки, написанные до барьера, не будут переданы на носитель. Используя барьеры,

qinganfan
источник