【问题标题】:I/O benchmarking: writing large files vs using fsync on smaller filesI/O 基准测试:写入大文件与在小文件上使用 fsync
【发布时间】: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:您可能应该将其作为新答案来回应,它更正确。

标签: c caching io


【解决方案1】:

你是对的; fsync()(甚至fdatasync())在数据写入磁盘之前不应返回。

您描述的基准听起来并不特别复杂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 2018-10-16
    • 2012-01-20
    相关资源
    最近更新 更多