sync
를 실행하기 전에 수행하는 것이 좋다는 문서를 많이 읽었습니다 echo [1,2,3] > /proc/sys/vm/drop_caches
. drop_cache는 비파괴 작업이고 더티 데이터는 drop_cache에 의해 삭제되지 않기 때문에 이것이 왜 필요한지 이해할 수 없습니다. 또한 echo 1 > /proc/sys/vm/drop_caches
더티 데이터가 먼저 디스크에 다시 커밋된 다음 캐시가 해제되는 동작도 보았습니다 . 이는 /proc/meminfo
"Dirty" 및 "Writeback"에서 볼 수 있습니다.
답변1
어쨌든 stackoverflow에서 답을 얻었고 약간의 실험을 통해 확인했습니다.
"동기화"는 더티 캐시만 정리합니다. 캐시가 남아 있습니다. drop_caches는 더티 캐시를 건드리지 않고 깨끗한 캐시만 삭제합니다. 따라서 모든 메모리를 해제하려면 플러시 데몬이 아직 변경 사항을 디스크에 기록하지 않은 경우 drop_caches 전에 동기화해야 합니다.
이 작은 실험에 대한 내 블로그 -
Linux 스토리지 I/O의 O_DIRECT, O_SYNC 플래그, 버퍼 및 캐시는 정확히 무엇입니까?
스택 오버플로 링크 -