[英]How to programmatically clear the filesystem memory cache in C++ on a Linux system?
[英]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.