루핑 장치용 direct-IO("losetup --direct-io")와 "mount -osync"의 차이점은 무엇입니까?

루핑 장치용 direct-IO("losetup --direct-io")와 "mount -osync"의 차이점은 무엇입니까?

내가 아는 한, 장치 루핑에는 플래그를 사용하지 않고 두 개의 캐시가 포함됩니다. 페이지 캐시는 루프 장치 내의 파일 시스템에 쓸 때 한 번 액세스되고, 기본 파일의 파일 시스템에 쓸 때 다시 액세스됩니다. 그렇죠?

direct-IO에 대한 문서에 따르면

--direct-io[=on|off]백업 파일에 대한 직접 I/O를 활성화하거나 비활성화합니다. 선택적 매개변수는 켜거나 끌 수 있습니다. 이 매개변수를 생략하면 기본값은 on입니다.

이것은 이 옵션을 사용하면 기본 파일에 대한 파일 시스템의 캐시인 캐시가 하나만 있다는 것을 의미합니까?

문서 -o sync에 따르면

-o sync파일 시스템에 대한 모든 I/O는 동시에 완료되어야 합니다. 쓰기 주기 수가 제한된 미디어(예: 일부 플래시 드라이브)의 경우 동기화로 인해 수명 주기가 단축될 수 있습니다.

과거에 루프 마운트 시 파일 시스템에 심각한 성능 문제가 있었고 sync수명 단축에 대한 경고를 기반으로 이것이 기본 파일에 대해서도 더 이상 캐싱이 없다는 것을 의미한다고 가정했습니다. 데이터는 하드웨어에 직접 기록됩니다.

이것이 맞습니까, 아니면 더 복잡합니까?

답변1

면책조항: 이는 100% 정확하지 않을 수 있습니다. 이것이 나의 이해입니다.

일반적으로 파일을 열 때 O_SYNC 또는 O_DIRECT를 가질 수 있습니다.

동기화는 각 쓰기 후에 데이터가 디스크에 동기화된다는 것을 의미합니다. 이는 사용자 공간에서 커널 공간으로 복사한 다음 파일 시스템에서 동기화를 수행하고 마지막으로 기본 레이어에 동기화한 후 디스크에서 일종의 동기화를 수행하는 것을 의미할 수 있습니다.

Direct-io는 데이터가 가능한 경우 내부 버퍼를 우회하여 디스크에 직접 기록됨을 의미합니다.

차이점:

  • 읽기 속도를 높이기 위해 동기화와 함께 캐싱이 계속 사용됩니다. 또한 추가 메모리 복사본이 필요합니다.
  • 동기화는 일종의 디스크 동기화로 이어질 것이 거의 확실합니다. 즉, 다른 파티션의 데이터도 동기화된다는 의미입니다("동기화"로 마운트한 파티션은 하나만 있고 다른 파티션은 "동기화" 없이 마운트할 수 있기 때문입니다).
  • direct-io는 자동으로 동기화되지 않는다고 생각합니다. 이는 (a) 다른 파티션의 데이터가 동기화되지 않고 (b) 드라이브의 내부 캐시가 플러시되지 않음을 의미합니다.
  • 512바이트의 배수를 사용하는 것과 같은 다른 것

참고: 여러 계층(예: 하드 드라이브 -> 소프트웨어 RAID -> 암호화 -> lvm -> 파일 시스템)이 있는 보다 복잡한 설정에서는 동기화가 하드웨어까지 전달됩니다.

direct-io를 사용하여 루프백 장치를 설치한다는 것은 다음을 의미합니다.

  • 캐시는 루프백 장치에는 사용되지 않습니다(스택의 나머지 부분에는 사용됨).
  • 데이터가 암시적으로 디스크에 동기화되지 않으므로 더 나은 성능을 얻을 수 있습니다.
  • 메모리를 낭비하지 않을 것입니다.

관련 정보