有没有办法关闭 Linux 中读取的页面缓存?更具体地说,我希望我的进程直接从磁盘读取。
我的问题背景:我正在 Postgres 中尝试新的查询处理技术并测量它们的运行时间。为了准确比较不同方法的运行时间,我需要关闭从 OS 缓存读取。
我已阅读以下方法,但它们都不适用于我的情况:
- 使用以下方法清除缓存
echo 1 > /proc/sys/vm/drop_caches
:我需要在查询的每次迭代时调用它,这会弄乱我最终测量的时间。 - 在程序中使用
O_DIRECT
:我无法控制 Postgres 如何读取文件 - 使用安装我的设备
-o sync
。我读到这里它会关闭写入缓冲,但我不确定它是否也会禁用从缓存读取? - 使用
hdparm -W 0 /dev/sda1
:同样,这只会禁用写入缓存。 - 使用特定于应用程序的脚本说明这里:如果我有一个应用程序,那么这个脚本就可以工作,但在我的设置中,我有一个 Postgres 服务器作为服务(具有许多线程)和一个客户端。我不能 100% 确定,但似乎该脚本适用于常规应用程序,而不是 Postgres 等服务。