【发布时间】:2011-07-27 23:42:14
【问题描述】:
我正在使用 I/O 基准测试来衡量系统上的 I/O 性能。基准测试使用各种 i/o 原语(writes、pwrite、mmap 等)将文件写入磁盘并报告性能。该基准的文档指出,为了避免由于缓存的影响而看到不切实际的结果,应该编写一个至少等于系统主内存大小的文件。
我的问题是,如果您在程序中使用fsync,它是否应该规避缓存的影响,因为它将未写入的 i/o 缓冲区刷新到磁盘?我问这个是因为我们的系统有 64GB 的主内存并且每次为我们的实验写入 64GB 的文件需要很长时间。如果我能写一个像 4G 或 8G 这样的小文件,测试会更快。
我在一个示例程序中使用了 fsync,并验证了使用 fsync 时通常看不到缓存效果,但我很想知道人们要说什么,以及为什么基准编写者没有这样做。
提前致谢。
【问题讨论】:
-
您忘记了,虽然 'fsync' 会将缓存中的所有记录写入磁盘,但它不会从缓存中删除这些数据,因此您的读取性能基准仍然会反映缓冲带来的改进。
-
@James:您可能应该将其作为新答案来回应,它更正确。