저는 현재 fsync에서 디스크에 얼마나 많은 데이터가 기록되는지 확인하기 위해 Linux에서 fsync와 fdatasync를 비교하고 있습니다.
나는 iotops를 사용하고 /proc//io 파일을 검사하여 쓰기가 실행된 것보다 더 많은 데이터가 기록되었음을 표시하는지 확인했습니다.
8KB 청크를 쓰고 fsync를 사용하여 플러시하고 1000번 반복했습니다. 따라서 프로세스에서 쓴 총 데이터는 8192,000바이트 + 파일의 메타데이터가 되어야 하며 새로 고침(fsync) 중에 업데이트되어야 합니다.
그러나 위의 두 가지 방법(iotops 및 /proc/pid/io)을 사용하면 작성된 데이터의 출력으로 8192000을 얻습니다. 이는 파일에 작성된 메타데이터의 양을 고려하지 않습니다.
이 프로세스로 작성된 메타데이터의 양을 측정하는 방법을 알려주실 수 있는 분 계신가요?
답변1
/sys/block/{장치 이름}/stat 파일에는 작성된 바이트에 대한 통계가 포함되어 있습니다. 당신은 그것을 읽고 싶을 것입니다.
파일 형식은 매우 간단합니다. 에 기록되어 있어요https://www.kernel.org/doc/Documentation/block/stat.txt.
또한 결과가 정확할 수도 있습니다! 아무것도 없다멈추다fdatasync는 가능한 경우 성능 저하 없이 메타데이터를 동기화할 수도 있으며 작은 파일의 데이터 inode는 특정 파일 및 파일 시스템에 적합할 수 있으므로 어쨌든 차이는 없습니다.
또한 CoW 파일 시스템에서는 메타데이터를 수정하지 않고는 데이터를 쓸 수 없다는 점에 유의하세요. 이것이 이미 fdatasync의 일부인지는 확실하지 않습니다.