我目前正在linux中进行fsync与fdatasync的比较,看看fsync中向磁盘写入了多少数据。
我尝试使用 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 的一部分。