Если я дважды вызову команду cat / dev / null для файла, будет ли второй вызов неактивным? - PullRequest
0 голосов
/ 22 мая 2011

Я хочу использовать cat filepath > /dev/null в качестве дешевого механизма кэширования памяти. Что меня интересует, так это: если я позвоню во второй раз, и файл уже находится в кеше диска, достаточно ли умна ОС, чтобы ничего не делать?

Обновление: я проверил это на томе CIFS, используя fadvise POSIX_FADV_WILLNEED кэшировать файл локально (используя linux-ftools в командной строке). Получается что том должен быть смонтирован в режиме чтения-записи, чтобы это работало. Только для чтения В этом режиме фадвизе, похоже, игнорируется. Это должно быть как-то связано с самбой механизм оплока.

Ответы [ 4 ]

3 голосов
/ 23 мая 2011

Лучше использовать posix_fadvise (..., POSIX_FADV_WILLNEED), чем помещать файл в файл / dev / null - для этого требуется меньше фактического ввода-вывода и не требуется считывать содержимое файла в оперативную память пользовательского пространства, разрушая кэши ЦП. .

Более того, если соответствующая часть файла уже находится в кэше, posix_fadvise, вероятно, будет выполнять намного меньше работы, чем файл cat> / dev / null

Если вы чувствуете, что вам действительно нужно, чтобы страницы были в ядре только сейчас , то отразите соответствующий раздел файла и заблокируйте его (разблокируйте его впоследствии; он может быть немедленно удален, если давление памяти в обтяжку). Для этого нужны права root.

В целом, делать подобные вещи - это пессимизация, и их следует избегать. Заставить ядро ​​вести себя так, как вы хотите, может снизить его способность оптимизировать фактическую рабочую нагрузку прямо сейчас.

3 голосов
/ 22 мая 2011

Нет, и не может.

Определить, не будет ли программа ничего делать, обычно сложнее, чем просто запустить ее.

Зачем вам вообще нужно контролировать кеширование памяти? Если это абсолютно необходимо, рассмотрите возможность использования файловой системы tmpfs или использования compcache (блочного устройства со сжатым ОЗУ)

2 голосов
/ 23 мая 2011

Это не будет делать ничего , как сказали другие ответы.Но если то, что вы действительно имели в виду, было:

Если я вызываю его второй раз, и файл уже находится в кеше, то достаточно ли умна ОС, чтобы не читать его с диска второй раз?

... тогда ответ да 1 .В конце концов, так работает дисковый кеш.


1.Пока рассматриваемая файловая система использует кеш страниц.

1 голос
/ 22 мая 2011

Это будет чертовски быстро, но это не будет бездействие (если бы это было так, у системных вызовов были бы законные причины делать неожиданные вещи вместо своих обещанных функций ...).Однако, в зависимости от используемого драйвера файловой системы и параметров ядра, скорость может быть близка к пропускной способности памяти.

...