我正在使用 DBMS 和虚拟机执行一些基准测试。我正在使用此命令
free && sync && echo 3 > /proc/sys/vm/drop_caches && free
在每个客户机和每个主机上,在执行查询之前,将缓存/缓冲对执行时间的影响降到最低。如果数据被缓存/缓冲,查询的执行时间可能会因之前执行的查询而异,因为用于回答查询的文件的一部分可能在内存中。
我想使该过程自动化(我正在手动执行此操作),但每次查询后执行同步/删除缓存有点棘手。我需要要求每个虚拟机和每个物理服务器同步/删除缓存。我可以编写一个脚本,并使用 SSH 来执行此操作,但我想知道是否有办法阻止操作系统缓冲/缓存文件。
我还发现了这个工具: https://github.com/Feh/nocache
但它要求我将其与不能使用缓存的程序一起执行。我有一个在虚拟机环境中运行的分布式 DMBS,因此对于我的情况来说,如何使用它并不简单。我使用命令来启动每台服务器上的每个实例,它们位于虚拟机之上。
PS:我在所有虚拟机(使用 KVM)和服务器上都使用 Ubuntu 12.04。