我正在使用I / O基准来测量系统的I / O性能。基准测试使用各种i / o原语(写入,pwrite,mmap等)将文件写入磁盘并报告性能。该基准测试的文档指出,为了避免由于缓存的影响而看到不切实际的结果,应该编写一个至少等于系统主内存大小的文件。
我的问题是,如果你在程序中使用fsync
,它是否应该避免缓存的影响,因为它会将未写入的i / o缓冲区刷新到磁盘上?我问这是因为我们的系统有64GB主内存,每次写入64GB文件,因为我们的实验需要很长时间。如果我可以写一个像4G或8G这样的小文件,测试会更快。
我在示例程序中使用了fsync并验证了在使用fsync时通常看不到缓存效果,但我很想知道人们要说什么,以及为什么基准编写者不会这样做。
提前致谢。
答案 0 :(得分:1)
你是对的; fsync()
(或甚至fdatasync()
)在数据写入磁盘之前不应返回。
您描述的基准听起来并不是特别复杂。