Co oznacza flaga montowania „bariery” w systemie Linux?

20

Instrukcja obsługi opcji „barierowej” to:

bariera = 0 / bariera = 1

To wyłącza / włącza stosowanie barier zapisu w kodzie jbd. Barrier = 0 wyłącza, bariera = 1 włącza (domyślnie). Wymaga to również stosu we / wy, który może obsługiwać bariery, a jeśli jbd dostanie błąd przy zapisie bariery, ponownie wyłączy bariery z ostrzeżeniem. Bariery zapisu wymuszają prawidłowe porządkowanie zapisów dziennika na dysku, dzięki czemu buforowanie zapisu na dyskach niestabilnych jest bezpieczne w użyciu, z pewnym ograniczeniem wydajności. Jeśli dyski są zabezpieczone bateryjnie w taki czy inny sposób, wyłączenie barier może bezpiecznie poprawić wydajność.

Ale nie wiem, co znaczy zdanie „ prawidłowe porządkowanie dzienników na dysku ”.

Załóżmy normalne zamówienie - dziennik 1, dane 1; dziennik 2, dane 2.
Które z poniższych wyników zamówienia wystąpią, jeśli ustawię barrier=0?

  1. dziennik 2, dane 2; dziennik 1, dane 1;
  2. dane 1, dziennik 1; dane 2, dziennik 2.
miecz
źródło
git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/... jest prawdopodobnie warty przeczytania.
Håkan Lindqvist
1
Jeśli przeczytasz o systemach plików kronikowania, zdasz sobie sprawę, że ważne jest, aby najpierw napisać kronikę, a następnie wykonać kronikę, zapisując w ten sposób prawdziwe dane na dysku. Bariera zapewnia, że ​​dziennik jest zapisywany przed jego wykonaniem. W przeciwnym razie dziennik nas bezużyteczny.
ctrl-alt-delor
@richard Kiedy używasz flagi „nobarrier” w twardym rajdzie BBWC, dysk nie może upewnić się, że dziennik jest zapisany przed wykonaniem jego danych, czy ten warunek nie ma znaczenia?
leafonsword
Nie wiem wystarczająco dużo, aby wiedzieć, czy to ma znaczenie. Myślałbym, że gorzej jest tak źle, jak żaden dziennik, ale to, co przeczytałem, nie wydaje się takie złe, jednak nie mogę dostrzec subtelności. Mam barrier=1i działa dla mnie wystarczająco szybko. Chyba że robisz naprawdę ciężkie rzeczy, zostawiłbym to. Masz bufory pamięci RAM, więc rzeczy będą zapisywane, kiedy będzie to możliwe, bez spowolnienia aplikacji. I bardzo małe opóźnienie w zapisywaniu na dysk. Jeśli chcesz zobaczyć, jak bardzo bufory pamięci RAM przyspieszają, dodaj synchronizację = 1 do katalogu domowego i spróbuj użyć systemu przez dzień lub dwa.
ctrl-alt-delor

Odpowiedzi:

15

Większość współczesnych systemów plików to systemy plików z kronikowaniem, co oznacza, że ​​śledzą zmiany, które nie zostały jeszcze zapisane na dysku w wewnętrznej strukturze danych zwanej kroniką. W przypadku awarii dziennik zostanie odtworzony, aby upewnić się, że wszystkie zapisy przebiegły pomyślnie, co zapobiega uszkodzeniu plików.

Gdy faktycznie zapisujesz dane na dysk, pamięć podręczna zapisu ponownie uporządkuje zapisy, aby spróbować zmaksymalizować przepustowość, ale musi upewnić się, że rzeczywiste dane pliku są zapisywane na dysku przed metadanymi, aby upewnić się, że w przypadku awarii wystąpi metadane nie będą nieaktualne z danymi.

Problem polega na tym, że wiele dysków ma własne pamięci podręczne, które również mogą porządkować zapisy. Niektóre systemy plików zakładają, że tak się stanie i zmuszą dysk do opróżnienia pamięci podręcznej w niektórych punktach, aby temu zapobiec, i są nazywane write barriersnp. Ext4 i Linux w ogóle.

W przypadku nowoczesnych dysków poświęcenie wydajności w tym zakresie jest jednak znikome i nie należy wyłączać barier zapisu, chyba że jest to absolutnie konieczne.

Kyrias
źródło
1

Z tego artykułu LWN :

Kod systemu plików musi, przed zapisaniem rekordu zatwierdzenia [kronikowania], być absolutnie pewien, że wszystkie informacje o transakcji dotarły do ​​dziennika. Samo pisanie w odpowiedniej kolejności nie jest wystarczające; współczesne dyski utrzymują duże wewnętrzne pamięci podręczne i będą zmieniać kolejność operacji w celu uzyskania lepszej wydajności. Dlatego system plików musi jawnie poinstruować dysk, aby wszystkie dane dziennika zostały zapisane na nośniku przed zapisaniem rekordu zatwierdzenia; jeśli rekord zatwierdzenia zostanie zapisany jako pierwszy, dziennik może być uszkodzony. Blokowy podsystem we / wy jądra udostępnia tę funkcję poprzez zastosowanie barier; w istocie bariera zabrania pisania jakichkolwiek bloków za barierą, dopóki wszystkie bloki zapisane przed barierą nie zostaną przekazane mediom. Używając barier,

qinganfan
źródło