首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免读取基准测试中的缓存影响

如何避免读取基准测试中的缓存影响
EN

Stack Overflow用户
提问于 2011-09-16 03:44:13
回答 5查看 2.1K关注 0票数 4

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

代码语言:javascript
复制
./read_benchmark
./write --size 64G --path /tmp/test.out
./read_benchmark

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

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

代码语言:javascript
复制
./write --size 64G --path /dev/null

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

非常感谢您的意见。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-16 05:37:57

您可以只卸载文件系统,然后再重新挂载它。卸载将刷新并删除文件系统的缓存。

票数 2
EN

Stack Overflow用户

发布于 2011-09-16 03:47:14

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

代码语言:javascript
复制
echo 3 > /proc/sys/vm/drop_caches

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

票数 5
EN

Stack Overflow用户

发布于 2011-09-16 03:47:22

一种(粗糙的)方法几乎从不失败,那就是简单地用另一个程序占用所有多余的内存。

创建一个琐碎的程序,分配几乎所有的空闲内存(同时为您的基准测试应用程序留出足够的内存)。然后将内存提交给某个东西,以确保操作系统会将其提交给物理内存。最后,执行scanf()以在不终止程序的情况下停止程序。

通过“独占”所有多余的内存,操作系统将无法将其用作缓存。这在Linux和Windows中都有效。现在,您可以继续执行I/O基准测试。

(尽管如果您要与其他用户共享机器,这可能不会很顺利...)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7436584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档