我正在编写一个磁盘性能很有趣的应用程序。我之前使用过较旧的机械磁盘,并在测量性能之前使用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后,我之前使用的代码行没有任何影响。这个缓存是否以不同的方式运行,也许?我需要做些什么来清除它?现在唯一有效的是计算机重启。
答案 0 :(得分:0)
你不能说出你在做什么,以及是否还有其他任何方式也在使用这些数据。您只能使用drop_caches
从缓存中清除未使用的数据 - 如果由于某种原因需要保留数据(例如,因为它很脏并且需要写回),它将不会成为evictable。来自kernel documentation for drop_caches:
这是一种非破坏性操作,不会释放任何脏物。 要增加此操作释放的对象数,用户可以运行 在写入
sync
之前/proc/sys/vm/drop_caches
。这将最小化 系统上的脏对象数量,并创建更多的候选对象 丢弃。