Найти / ls кеширование

10

Кажется, что при первом запуске findили lsв каталоге требуется время для работы. Но каждый раз после этого это происходит быстро, как будто список содержимого каталога был где-то кэширован или проиндексирован.

Есть ли способ сохранить этот кеш при перезагрузке компьютера?

Ричард
источник
1
Это действительно кешируется. Linux использует неиспользуемую память в качестве кеша и буферов (это одна из причин, по которой у вас всегда должен быть некоторый обмен, даже с «достаточным» объемом ОЗУ). Команда free показывает, сколько доступно. Не уверен, что кеширование между перезагрузками имеет смысл, многое может измениться между загрузками. Как насчет того, чтобы cron-job запускался с наименьшим приоритетом каждые 10,30 минут, чтобы просто просмотреть все ваши файлы? Следует постоянно поддерживать кэш-память в актуальном состоянии. Также подумайте, что есть способ (для ядра) обнаружить изменения файла.
Баард Копперуд

Ответы:

8

Вы можете использовать vmtouch для добавления файлов в кеш страниц (кеш дисков).

Поместите nohup vmtouch -dl <files or directories> &в свой /etc/rc.localфайл, чтобы добавить и заблокировать файлы в кеш страницы при загрузке. Если вы хотите добавить файлы в кэш своей страницы, но не хотите блокировать их в памяти, используйте -tфлаг вместо -ldфлагов.

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

Сообщество
источник
Эта команда не доступна в Ubuntu - есть ли альтернатива, которую я могу попробовать?
Ричард
@Richard Собрать vmtouch очень просто: установите build-essentialпакет. Скачать vmtouch.c. Запустите gcc -O2 -o vmtouch vmtouch.cили, make vmtouchи вы получите двоичный файл, vmtouchкоторый вы можете скопировать, например, /usr/local/binили позвонить по ./vmotouch.
Джофель
@Richard Я не пользуюсь Ubuntu, поэтому я не проверял это и не несу никакой ответственности, но поиск в Google «Ubuntu mvtouch» поднял этот ppa .
Terdon
@jofel, да, это было достаточно легко скомпилировать - спасибо. Я просто предпочитаю использовать пакеты, когда это возможно.
Ричард
@ Эван, поправь меня, если я ошибаюсь, но разве использование vmtouchмедленной команды при загрузке не работает? Я надеялся сохранить кеш через ботинки, а не (дорого) восстанавливать его каждый раз.
Ричард
2

«Сохраняй через перезагрузки», сомневаюсь я. Но вы можете тривиально перестроить кеш при загрузке, который выполняет почти то же самое, за исключением небольшой задержки.

Создайте файл /etc/cron.d/rebuild-fs-cacheи поместите в него следующее:

@reboot root /usr/bin/nice -n 19 /usr/bin/ionice -c 3 -t /usr/bin/find / >/dev/null 2>&1

Он использует niceи ionice(который должен быть установлен по умолчанию и определенно доступен через менеджер пакетов; Debian помещает их в coreutilsи util-linux, соответственно), чтобы понизить приоритет findпроцесса до наилучших возможных уровней, что означает, что он не должен мешать чему-либо другому. работает в вашей системе, но это займет немного больше времени. findСам пройдёт и stat()всё, что заставит ядро ​​загрузить данные файловой системы с диска в память.

После того, как кеш построен, пока он не очищен, потому что ОС нужна память для чего-то другого, его следует поддерживать. Я использовал это некоторое время, и списки каталогов даже в больших каталогах значительно быстрее, чем без вышеуказанной работы cron, хотя я не могу привести точные цифры.

CVn
источник
1
Если вы собираетесь изобрести колесо, вы можете также использовать locate, который поставляется с updatedbдля обновления базы данных местонахождение: en.wikipedia.org/wiki/Locate_(Unix)
laebshade
@laebshade Я вообще не пользуюсь locate, но lsмного использую. И изредка find. (Кроме того, find и ls - это конкретные команды, которые запрашивает OP.) Смысл использования findздесь в том, что он выполняет итерации по всему хранилищу, вызывая stat (), поэтому ядро ​​должно загрузить метаданные в память. Как только он там, он так же хорош, как если бы он был сохранен при перезагрузке.
CVn