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

Posted

技术标签:

【中文标题】在 Linux 中以编程方式清除挂载 (SSD) 磁盘上的缓存【英文标题】:Programmatically clear cache on mounted (SSD) disk in Linux 【发布时间】:2013-08-24 01:50:12 【问题描述】:

我正在编写一个对磁盘性能感兴趣的应用程序。我之前使用的是较旧的机械磁盘,并使用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 后,我之前使用的代码行没有任何效果。该缓存是否以不同的方式表现,也许?我需要做些什么来清除它?现在唯一可行的方法是重新启动计算机。

【问题讨论】:

致对此投反对票的人:请发表评论并指出原因,以便我修复它。 这很奇怪,这些磁盘的行为应该相同,因为缓存位于操作系统的更高层...可能是别的东西,比如 SSD 上的读取缓存(注意:我不是甚至确定他们有一个......)? @KarolyHorvath:您能详细说明一下读取缓存的想法吗?我是大多数这些事情的新手。 superuser.com/questions/309613/… ...只有在您阅读不多的情况下才有意义。如果您读取 100 兆字节,则存储内容的前几 mbs 应该没有太大区别。 【参考方案1】:

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

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

【讨论】:

以上是关于在 Linux 中以编程方式清除挂载 (SSD) 磁盘上的缓存的主要内容,如果未能解决你的问题,请参考以下文章

Linux的硬盘使用情况挂载SSD挂载(查看df -h不能看到的卷)

硬盘怎样解除只读模式

阿里云CentOS 7系统挂载SSD云盘的教程_Linux

Gcloud计算挂载ssd

在 Linux 中以编程方式设置自定义文件夹/目录图标

如何在 Linux Mint 中以编程方式发送密钥(模拟密钥输入)?