以编程方式清除Linux中已装载(SSD)磁盘上的缓存

时间:2013-08-21 15:33:04

标签: c++ linux caching hard-drive ssd

我正在编写一个磁盘性能很有趣的应用程序。我之前使用过较旧的机械磁盘,并在测量性能之前使用this thread中的技术清除缓存:

// Clear cache for benchmarking                                               
sync();    
std::ofstream ofs("/proc/sys/vm/drop_caches");
ofs << "3" << std::endl;
ofs.close();

效果很好并且给了我预期的结果 - 清除缓存时测得的磁盘顺序读取速度大约为100 MB / s,单独缓存时会高出很多倍。

前几天我安装了SSD磁盘,安装在/ media /下。重新启动计算机后,前几次测量正如预期的那样(大约300 MB / s),但当高速缓存启动时,它们显然要高得多。

我现在的问题是,自从将应用程序移动到SSD后,我之前使用的代码行没有任何影响。这个缓存是否以不同的方式运行,也许?我需要做些什么来清除它?现在唯一有效的是计算机重启。

1 个答案:

答案 0 :(得分:0)

你不能说出你在做什么,以及是否还有其他任何方式也在使用这些数据。您只能使用drop_caches从缓存中清除未使用的数据 - 如果由于某种原因需要保留数据(例如,因为它很脏并且需要写回),它将不会成为evictable。来自kernel documentation for drop_caches

  

这是一种非破坏性操作,不会释放任何脏物。   要增加此操作释放的对象数,用户可以运行   在写入sync之前/proc/sys/vm/drop_caches。这将最小化   系统上的脏对象数量,并创建更多的候选对象   丢弃。