禁用 Linux 页面缓存以进行读取

禁用 Linux 页面缓存以进行读取

有没有办法关闭 Linux 中读取的页面缓存?更具体地说,我希望我的进程直接从磁盘读取。

我的问题背景:我正在 Postgres 中尝试新的查询处理技术并测量它们的运行时间。为了准确比较不同方法的运行时间,我需要关闭从 OS 缓存读取。

我已阅读以下方法,但它们都不适用于我的情况:

  1. 使用以下方法清除缓存echo 1 > /proc/sys/vm/drop_caches:我需要在查询的每次迭代时调用它,这会弄乱我最终测量的时间。
  2. 在程序中使用O_DIRECT:我无法控制 Postgres 如何读取文件
  3. 使用安装我的设备-o sync。我读到这里它会关闭写入缓冲,但我不确定它是否也会禁用从缓存读取?
  4. 使用hdparm -W 0 /dev/sda1:同样,这只会禁用写入缓存。
  5. 使用特定于应用程序的脚本说明这里:如果我有一个应用程序,那么这个脚本就可以工作,但在我的设置中,我有一个 Postgres 服务器作为服务(具有许多线程)和一个客户端。我不能 100% 确定,但似乎该脚本适用于常规应用程序,而不是 Postgres 等服务。

相关内容