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

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

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

4 ответа

Решение

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

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

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

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

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

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

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

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

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

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


1. В любом случае, если рассматриваемая файловая система использует кеш страниц.

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

Другие вопросы по тегам