我写了一个小程序来测量Linux中c write()函数的运行时间。令我惊讶的是,在多次迭代中,时间并不一致。我已经看到,第一次写入所需的时间比紧接着的连续写入要长得多。这种模式在多个运行/文件大小-缓冲区大小组合上继续。
下面是代码:https://drive.google.com/file/d/1akwUz9mykkp0kk-FID9jxPClwJMD7uRI/view?usp=sharing
以下是部分输出:
it:0.051文件大小:4.00MB缓冲区大小:1.00KB写入时间:0.051秒:毫秒
it:1文件大小:4.00MB缓冲区大小:1.00KB写入时间:0.027秒:毫秒
it:2文件大小:4.00MB缓冲区大小:1.00KB写入时间:0.022秒:毫秒
it:3文件大小:4.00MB缓冲区大小:1.00KB写入时间:0.021秒:毫秒
it:4文件大小:4.00MB缓冲区大小:1.00KB写入时间:0.021秒:毫秒
it:5文件大小:4.00MB缓冲区大小:1.00KB写入时间:0.021秒:毫秒
it:6文件大小:4.00MB缓冲区大小:1.00KB写入时间:0.022秒:毫秒
it:7文件大小:4.00MB缓冲区大小:1.00KB写入时间:0.022秒:毫秒
it:8文件大小:4.00MB缓冲区大小:1.00KB写入时间:0.021秒:毫秒
it:9文件大小:4.00MB缓冲区大小:1.00KB写入时间:0.021秒:毫秒
注意它是如何写函数调用的:0几乎是连续调用的两倍。这种模式不断重复。这可能与linux页面缓存有关,但我不知道它到底是如何进行的。帮助!
发布于 2020-08-07 18:30:42
这与处理器的缓存体系结构有关。在程序的第一次迭代期间,存储在硬盘或SSD内存中的文件将被移动到缓存中,以便进行处理,随着文件大小的增加,这需要更多的时间。当程序再次需要相同的文件时,它将简单地使用存储在缓存中的文件,跳过到主存的旅程。这造成了第一次迭代和其余迭代之间的写入时间差。
https://stackoverflow.com/questions/63299756
复制相似问题