我有一个读基准测试,在连续运行之间,我必须确保数据不驻留在内存中,以避免因缓存而产生的影响。到目前为止,我所做的是:运行一个程序,在连续运行读取基准测试之间写入一个大文件。就像这样
./read_benchmark
./write --size 64G --path /tmp/test.out
./read_benchmarkwrite程序简单地将一个大小为1G的数组写入文件64次。由于主存的大小是64G,所以我写了一个大约是64G的文件。同样的大小。问题是,写入需要很长时间,我想知道是否有更好的方法来做到这一点,即避免数据缓存时出现的影响。
另外,如果我将数据写入/dev/null,会发生什么?
./write --size 64G --path /dev/null这样,写程序退出得非常快,实际上没有执行任何I/O,但我不确定它是否会覆盖64G的主内存,这是我最终想要的。
非常感谢您的意见。
发布于 2011-09-16 05:37:57
您可以只卸载文件系统,然后再重新挂载它。卸载将刷新并删除文件系统的缓存。
发布于 2011-09-16 03:47:14
您可以使用/proc中的特殊文件删除所有缓存,如下所示:
echo 3 > /proc/sys/vm/drop_caches这应该确保缓存不会影响基准测试。
发布于 2011-09-16 03:47:22
一种(粗糙的)方法几乎从不失败,那就是简单地用另一个程序占用所有多余的内存。
创建一个琐碎的程序,分配几乎所有的空闲内存(同时为您的基准测试应用程序留出足够的内存)。然后将内存提交给某个东西,以确保操作系统会将其提交给物理内存。最后,执行scanf()以在不终止程序的情况下停止程序。
通过“独占”所有多余的内存,操作系统将无法将其用作缓存。这在Linux和Windows中都有效。现在,您可以继续执行I/O基准测试。
(尽管如果您要与其他用户共享机器,这可能不会很顺利...)
https://stackoverflow.com/questions/7436584
复制相似问题