1

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

// 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 后,我之前使用的代码行没有任何效果。该缓存是否以不同的方式表现,也许?我需要做些什么来清除它?现在唯一有效的方法是重新启动计算机。

4

1 回答 1

0

你不只是说你在做什么,以及是否还有其他东西也在以某种方式处理这些数据。您只能从缓存中逐出未使用的数据drop_caches- 如果出于某种原因需要保留数据(例如,因为它很脏并且需要写回),它将不会被逐出。从drop_caches 的内核文档中

这是非破坏性操作,不会释放任何脏对象。为了增加此操作释放的对象数量,用户可以 sync在写入之前运行/proc/sys/vm/drop_caches。这将最大限度地减少系统上脏对象的数量并创建更多要删除的候选对象。

于 2018-02-22T12:01:11.947 回答