[unix] Linux에서 ‘barrier’마운트 플래그는 무엇을 의미합니까?

‘배리어’마운트 옵션의 매뉴얼은 다음과 같습니다.

barrier = 0 / 배리어 = 1

이것은 jbd 코드에서 쓰기 장벽 사용을 비활성화 / 활성화합니다. barrier = 0은 비활성화하고 barrier = 1은 활성화합니다 (기본값). 또한 장벽을 지원할 수있는 IO 스택이 필요하며 jbd가 장벽 쓰기에서 오류가 발생하면 경고와 함께 장벽을 다시 비활성화합니다. 쓰기 장벽은 저널 커밋의 적절한 온 디스크 순서를 강제로 적용하여 휘발성 디스크 쓰기 캐시를 사용하기에 안전한 성능을 제공합니다. 디스크가 어떤 방식 으로든 배터리로 백업되는 경우 장벽을 비활성화하면 성능이 안전하게 향상 될 수 있습니다.

그러나 나는 ” 저널 커밋의 디스크상의 올바른 순서 “라는 문장이 무엇을 의미하는지 모른다 .

정상적인 순서-저널 1, 데이터 1; 일지 2, 데이터 2.
다음을 설정하면 다음 순서 결과 중 어떤 것이 발생 barrier=0합니까?

  1. 저널 2, 데이터 2; 저널 1, 데이터 1;
  2. 데이터 1, 저널 1; 자료 2, 저널 2.


답변

대부분의 최신 파일 시스템은 저널링 파일 시스템이므로 저널이라는 내부 데이터 구조에서 디스크에 아직 기록되지 않은 변경 사항을 추적합니다. 충돌이 발생하면이 쓰기 저널이 재생되어 모든 쓰기가 성공적으로 수행되어 파일 손상을 방지합니다.

실제로 데이터를 디스크에 쓸 때 쓰기 캐시는 처리량을 최대화하기 위해 쓰기 순서를 다시 지정하지만 메타 데이터 전에 실제 파일 데이터가 디스크에 기록되어 충돌이 발생하지 않도록해야합니다. 메타 데이터가 데이터와 함께 오래되지 않습니다.

문제는 많은 디스크에 쓰기를 다시 정렬 할 수있는 자체 캐시가 있다는 것입니다. 일부 파일 시스템은 이러한 상황이 발생한다고 가정하고이를 방지하기 위해 디스크가 특정 지점에서 캐시를 플러시하도록 강제합니다 ( write barriers예 : ext4 및 일반적으로 Linux 라고 함) .

최신 디스크의 경우이 작업을 수행하기위한 성능 희생은 무시할만한 수준이며 절대적으로 필요한 경우가 아니면 쓰기 장벽을 비활성화해서는 안됩니다.


답변

에서 이 LWN 기사 :

파일 시스템 코드는 [journaling] 커밋 레코드를 작성하기 전에 모든 트랜잭션 정보가 저널에 작성되었는지를 반드시 확인해야합니다. 올바른 순서로 쓰기를 수행하는 것만으로는 충분하지 않습니다. 최신 드라이브는 큰 내부 캐시를 유지 관리하고 성능을 향상시키기 위해 작업 순서를 변경합니다. 따라서 파일 시스템은 커밋 레코드를 쓰기 전에 디스크에 모든 저널 데이터를 미디어로 가져 오도록 명시 적으로 지시해야합니다. 커밋 레코드가 먼저 기록되면 저널이 손상되었을 수 있습니다. 커널의 블록 I / O 하위 시스템은 장벽을 사용하여이 기능을 사용할 수있게합니다. 본질적으로, 장벽은 장벽 이전에 기록 된 모든 블록이 미디어에 투입 될 때까지 장벽 이후의 블록의 기록을 금지한다. 장벽을 사용함으로써


답변