데이터가 디스크에 기록되었는지 아니면 캐시되었는지 어떻게 알 수 있나요?

데이터가 디스크에 기록되었는지 아니면 캐시되었는지 어떻게 알 수 있나요?

Linux에서 파일 작업 호출을 배우고 있습니다. read()그리고 다른 많은 기능은 성능을 향상시키기 위해 캐시를 사용하므로 캐시에서 디스크 장치로 데이터를 전송하는 것이 가능하다는 것을 write()알고 있습니다 .fsync()

그러나 데이터가 캐시되거나 디스크에 기록되는지 확인할 수 있는 명령이나 시스템 호출이 있습니까?

답변1

데이터가 이미 존재하는 경우에만 캐시에서 데이터를 (직접) 읽습니다. 이는 캐시된 데이터가 이전에 프로세스에 의해 액세스되었으며 캐시에 저장되었음을 의미합니다. 읽을 데이터가 이미 캐시에 있는지 프로세스에 알리는 시스템 호출이나 방법이 없습니다.

반면, 프로세스는 기록된 데이터를 즉시 디스크에 저장할 것인지, 아니면 가변적인 지연 후에만 저장할 것인지 선택할 수 있습니다(일반적인 경우). 이는 파일을 열 때 O_SYNC 플래그를 사용하여 수행됩니다.

지원되는 경우 모든 I/O가 읽기-쓰기 캐시를 우회하고 디스크에 직접 액세스하도록 하는 O_DIRECT 플래그도 있습니다.

마지막으로, 하드 디스크 자체는 자체 캐시를 자유롭게 구현할 수 있으므로 동기 쓰기 호출이 반환된 후에도 데이터가 이미 디스크 플래터에 있다는 보장이 없습니다.

답변2

fsync문제의 파일(디스크에 기록됨)에 대해 이 작업이 이미 수행되었지만 디렉터리에 대해 수행된다는 보장은 없습니다. 이를 위해서는 추가 fsync 호출이 필요합니다.

관련 정보