繁体   English   中英

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

[英]Programmatically clear cache on mounted (SSD) disk in Linux

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

// 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以来,我以前使用的代码行没有任何作用。 该缓存的行为方式是否不同? 我需要采取其他措施来清除它吗? 现在唯一起作用的是重新启动计算机。

您不仅要说自己在做什么,还不能说其他任何方式也正在使用该数据。 您只能使用drop_caches从缓存中逐出未使用的数据-如果出于某种原因需要保留该数据(例如,由于它很脏并且需要被写回),它将无法收回。 drop_caches内核文档中

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM