0

我写了一个小程序来测量 Linux 中 c write() 函数的时间。令我惊讶的是,时间在多次迭代中并不一致。我已经看到第一次写入比立即连续写入花费的时间要长得多。该模式在多次运行/文件大小 - 缓冲区大小组合中继续存在。

这是代码: https ://drive.google.com/file/d/1akwUz9mykkp0kk-FID9jxPClwJMD7uRI/view?usp=sharing

这是部分输出:

它:0 文件大小:4.00MB 缓冲区大小:1.00KB 写入时间:0.051 S:MS

它:1 文件大小:4.00MB 缓冲区大小:1.00KB 写入时间:0.027 S:MS

它:2 文件大小:4.00MB 缓冲区大小:1.00KB 写入时间:0.022 S:MS

它:3 文件大小:4.00MB 缓冲区大小:1.00KB 写入时间:0.021 S:MS

它:4 文件大小:4.00MB 缓冲区大小:1.00KB 写入时间:0.021 S:MS

它:5 文件大小:4.00MB 缓冲区大小:1.00KB 写入时间:0.021 S:MS

它:6 文件大小:4.00MB 缓冲区大小:1.00KB 写入时间:0.022 S:MS

它:7 文件大小:4.00MB 缓冲区大小:1.00KB 写入时间:0.022 S:MS

它:8 文件大小:4.00MB 缓冲区大小:1.00KB 写入时间:0.021 S:MS

它:9 文件大小:4.00MB 缓冲区大小:1.00KB 写入时间:0.021 S:MS

注意 write function call on it:0 几乎是连续调用的两倍。这种模式不断重复。它可能与 linux 页面缓存有关,但我不知道它到底是如何发挥作用的。帮助!

4

1 回答 1

0

这与处理器的缓存架构有关。在程序的第一次迭代期间,存储在硬盘驱动器或 SSD 内存中的文件被移动到缓存中以便进行处理,随着文件大小的增加,这需要更多时间。当程序再次需要相同的文件时,它将简单地使用存储在缓存中的文件,跳过主存。这会在第一次迭代和其余迭代之间产生写入时间差。

于 2020-08-07T10:30:42.380 回答