Linux에서 "barrier" 마운트 플래그는 무엇을 의미합니까?

Linux에서 "barrier" 마운트 플래그는 무엇을 의미합니까?

"배리어" 장착 옵션에 대한 설명서는 다음과 같습니다.

장벽=0 / 장벽=1

이는 jbd 코드에서 쓰기 장벽 사용을 비활성화/활성화합니다. Barrier=0은 비활성화하고, Barrier=1은 활성화합니다(기본값). 또한 장벽을 지원할 수 있는 IO 스택이 필요합니다. 장벽 쓰기 시 jbd 오류가 발생하면 장벽이 다시 비활성화되고 경고가 발생합니다. 쓰기 장벽은 로그 커밋의 올바른 디스크 순서를 적용하여 휘발성 디스크 쓰기 캐시를 안전하게 사용할 수 있도록 하지만 성능이 저하됩니다. 디스크가 어떤 방식으로든 배터리로 구동되는 경우 장벽을 비활성화하면 성능이 안전하게 향상될 수 있습니다.

그런데 이 문장이 뭔지 모르겠어요.”로그 커밋의 올바른 디스크 순서" 방법.

정상적인 순서(로그 1, 데이터 1, 데이터 2)를 가정합니다.
이것을 설정하면 다음 중 어떤 정렬 결과가 발생합니까 barrier=0?

  1. 로그 2, 데이터 2; 저널 1, 데이터 1;
  2. 데이터 1, 저널 1, 데이터 2, 로그 2.

답변1

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

데이터가 실제로 디스크에 기록될 때 쓰기 캐시는 처리량을 최대화하기 위해 쓰기 순서를 다시 지정하지만 충돌이 발생할 경우 메타데이터가 다음을 따르지 않도록 메타데이터보다 먼저 실제 파일 데이터가 디스크에 기록되도록 해야 합니다. 데이터가 구식입니다.

문제는 많은 디스크에 자체 캐시가 있어 쓰기 순서가 변경될 수도 있다는 것입니다. 일부 파일 시스템에서는 이런 일이 발생할 것이라고 가정하고 이러한 일이 발생하지 않도록 디스크가 특정 지점에서 캐시를 강제로 플러시하도록 합니다. 이는 write barriers일반적으로 ext4 및 Linux와 같은 시스템에서 알려져 있습니다.

이 작업으로 인한 성능 저하는 최신 디스크에서는 무시할 수 있으며, 꼭 필요한 경우가 아니면 쓰기 장벽을 비활성화해서는 안 됩니다.

답변2

~에서이 LWN 기사:

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

관련 정보