Знайти / ls кешування


10

Здається, ніби перший раз, коли я запускаю findабо lsперебуваю в каталозі, потрібно тривати деякий час. Але щоразу після цього відбувається швидко, як ніби список вмісту каталогу десь був кешований або індексований.

Чи є спосіб зберегти цей кеш-пам'ять через перезавантаження комп'ютера?


1
Це дійсно кешоване. Linux використовує невикористану пам'ять як кеш-пам'ять і буфери (це одна з причин, що ви завжди повинні мати деякий своп, навіть із "достатньою" ОЗУ). Вільна команда показує, скільки доступно. Не впевнений, що багато сенсу кешувати між перезавантаженнями, багато чого може змінитися між черевиками. Як щодо того, щоб зробити роботу з хроном, щоб запускати її з найнижчою пріорреті кожні 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.
jofel

@Richard Я не використовую Ubuntu, тому я не перевіряв це і не несуть ніякої відповідальності , але погуглити «Ubuntu mvtouch» виховувався цей PPA .
terdon

@jofel, так, скласти було досить просто - дякую. Я просто вважаю за краще використовувати пакети, коли це можливо.
Річард

@Evan, виправте мене, якщо я помиляюсь, але якщо я не використовую vmtouchяк команду on-boot, сповільнюється робота? Моя надія полягала в тому, щоб зберегти кеш-пам'ять у черевиках, а не (дорого) регенерувати її кожен раз.
Річард

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, хоча я не можу навести точні цифри.


1
Якщо ви збираєтеся винайти колесо, ви можете також використовувати locate, який поставляється з updatedbдля оновлення бази даних місцезнаходження: en.wikipedia.org/wiki/Locate_(Unix)
laebshade

@laebshade я взагалі не використовую locate, але lsбагато використовую . І зрідка find. (Крім того, find and ls - це конкретні команди, про які запитує ОП.) Сенс використання findтут полягає в тому, що воно перебирає все, що викликає сховище stat (), тому ядро ​​має завантажувати метадані в пам'ять. Після того, як він є, це так добре, як якщо б він зберігався через перезавантаження.
CVn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.