如何避免读取基准中的缓存效应

jit*_*hsk 4 c linux io caching memory-management

我有一个读取基准,并且在连续运行之间,我必须确保数据不驻留在内存中,以避免因缓存而出现影响。到目前为止,我所做的就是:运行一个程序,在连续运行读取基准测试之间写入一个大文件。就像是

./read_benchmark
./write --size 64G --path /tmp/test.out
./read_benchmark
Run Code Online (Sandbox Code Playgroud)

write 程序只是将一个大小为 1G 的数组写入文件 64 次。由于主存的大小是64G,所以我写了一个大约的文件。相同的尺寸。问题是写入需要很长时间,我想知道是否有更好的方法来做到这一点,即避免数据缓存时出现的影响。

另外,如果我将数据写入/dev/null 会发生什么?

./write --size 64G --path /dev/null
Run Code Online (Sandbox Code Playgroud)

这样,写入程序退出得非常快,实际上没有执行任何I/O,但我不确定它是否覆盖了64G的主存,这正是我最终想要的。

非常感谢您的意见。

Luk*_*ský 6

您可以使用特殊文件删除所有缓存,/proc如下所示:

echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)

这应该确保缓存不会影响基准测试。