
Есть ли способ отключить кэширование страниц для чтения в Linux? Точнее, я хотел бы, чтобы мои процессы читали напрямую с диска.
Постановка моей проблемы: Я пробую новые методы обработки запросов в Postgres и измеряю время их выполнения. Чтобы иметь точное сравнение времени выполнения различных методов, мне нужно отключить чтение из кэша ОС.
Я прочитал следующие подходы, но ни один из них не применим к моему случаю:
- Очистите кэш с помощью
echo 1 > /proc/sys/vm/drop_caches
: мне нужно вызывать его при каждой итерации моего запроса, что испортит мои окончательные измеренные значения времени. - Использование
O_DIRECT
в программе: Я не могу контролировать, как Postgres читает файлы. - Смонтировать мое устройство с помощью
-o sync
. Я прочиталздесьчто это отключит буферизацию записи, но я не уверен, отключит ли это также и чтение из кэша? - Использование
hdparm -W 0 /dev/sda1
: Опять же, это отключает только кэширование для записей. - Объяснение использования специфичного для приложения сценарияздесь: Это сработало бы, если бы у меня было одно приложение, но в моей настройке у меня есть сервер Postgres как служба (со многими потоками) и клиент. Я не уверен на 100%, но похоже, что скрипт работает для обычных приложений, а не для служб, таких как Postgres.