Як налаштувати Linux на кешування метаданих файлів у відповідності до вмісту?


14

Я хотів би налаштувати систему на використання більшості оперативної пам’яті для кешування метаданих файлової системи, але лише порівняно невелику кількість для кешування / запису кешування та попереднього завантаження файлів. В ідеалі я хотів би мати можливість переглядати файлову систему (настільки, наскільки вона вміщується в оперативній пам'яті), не розкручуючи диски, поки я фактично не відкрию файл.

Ось деталі:

У мене домашній файловий сервер. У нього є п'ять дисків об'ємом LVM близько 9 ТБ, але всього 4 Гб оперативної пам’яті. Оскільки сервер не робить більше іншого, ніж обслуговує файли, більшість оперативної пам’яті використовується для кешування. ("Безкоштовні" звіти 3.4G з 3.9G, які використовуються для кешу.)

Сервер живе в моїй спальні, і якщо всі диски крутяться, він видає достатньо шуму, щоб дратувати, коли тихо. (Я не маю на увазі шукати шум, а просто крутити шум. Диски різних моделей і моделей, і я думаю, що невеликі відмінності в швидкості обертання викликають перешкоди. Жоден диск не шумить самостійно, але якщо деякі з них обертаються разом, незначний шум із періодом субгерца.) Тому я налаштував сервер на більшу частину часу, щоб перекручувати диски.

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

Я підозрюю, що Linux здебільшого заповнює кеш вмістом файлів і, можливо, попередньо завантаженими даними. Кешування не дуже корисно за кілька Мб, щоб забезпечити плавне відтворення; якщо я щойно переглянув фільм, я, мабуть, не перегляну його знову найближчим часом. Попереднє завантаження, якщо це трапиться, також у моєму випадку є абсолютно марним , після більш ніж декількох МБ.

Але можна подумати, що 4 Гб має бути достатньо, щоб мати можливість кешувати більшість метаданих файлової системи, принаймні тих частин, які вже були відвідані, щоб я міг переглядати файли, не потребуючи розкручувати диски, якщо виявиться, що вони є спить.

Під час відкриття файлу все ще буде затримка, але це нормально. Порівняйте “клацніть; чекати ; клацання; чекати ; клацання; чекати ; грати; дивитися "з" клацанням; клацання; клацання; грати; чекати ; дивитися ». Перший неймовірно засмучує; останнє майже очікується.

Примітки:

  1. Якщо це має значення, ядро ​​становить 3,2, ОС - Debian, об'єм lvm2, а FS - ext4.

  2. Єдина причина віджимання - шум вночі; інакше сервер працює постійно. (Я зробив це настільки низькою потужністю, як розумною.) Затримка віджимання змінюється залежно від часу доби.

  3. Жорсткі диски призначені лише для носіїв. ОС знаходиться на окремій (невеликій) флешці. (Що означає, що будь-яка затримка віджимання походить від даних, а не лише тому, що їй щось потрібно /usrчи що завгодно. Я можу зекономити на цьому кілька ГБ, якщо це якось допоможе вирішити мою проблему.

  4. Розумний вплив на продуктивність - це не велика справа. Диски швидше, ніж моя мережа.

Відповіді:


10

Щоб контролювати кешування речей Linux, зверніться до цього https://www.kernel.org/doc/Documentation/sysctl/vm.txt

Зокрема, подивіться на vfs_cache_pressure, ви, мабуть, хочете по-справжньому низьке значення або, можливо, навіть нуль (1 мені здається трохи безпечнішим):

vfs_cache_pressure
------------------

Controls the tendency of the kernel to reclaim the memory which is used for
caching of directory and inode objects.

At the default value of vfs_cache_pressure=100 the kernel will attempt to
reclaim dentries and inodes at a "fair" rate with respect to pagecache and
swapcache reclaim.  Decreasing vfs_cache_pressure causes the kernel to prefer
to retain dentry and inode caches. When vfs_cache_pressure=0, the kernel will
never reclaim dentries and inodes due to memory pressure and this can easily
lead to out-of-memory conditions. Increasing vfs_cache_pressure beyond 100
causes the kernel to prefer to reclaim dentries and inodes.

Також ви можете змінити swappinessтак, щоб ви ніколи не обмінювались даними або не робили їх так, щоб це відбувалося лише в крайніх випадках.

Цей drop_cachesваріант може бути зручним для явного видалення даних, які ви більше не хочете кешувати.

Я впевнений, що, ймовірно, можуть бути інші варіанти, які можуть допомогти, тому перегляньте документацію ядра.

Щоб застосувати їх, я поставив би налаштування, які ви хочете змінити, /etc/sysctl.confабо що б ваша ОС не мала відновити під час завантаження.


3
Хороший пост, але ви хочете якомога більше міняти місцями, враховуючи мету ОП. Помінявшись лише вражає пам'ять користувача, тому збільшується тенденція до заміни на диск, а потім залишає більше фізичної пам'яті для кеш-пам'яті. Збільшення свобідності звільняє пам’ять, але може сповільнювати програми, якщо вона занадто сильно збільшена (визначення солодкого місця в основному є ітераційним гостімуванням)
Братчлі

Привіт, Кайл, дякую за ідею. vfs_cache_pressure працює, але цього недостатньо. Ось що я зробив:
bogdanb

Коли я встановлюю vcp на 0, якщо я роблю a find / -ls > /dev/null, то розкручую диски, потім findусі файли знову, диски не згортаються. freeпоказує, що буфери піднімаються приблизно до 202 МБ при цьому. Але, якщо я роблю find, то cat /file/bigger/than/ram > /dev/null, потім freeпоказує cachedзростання , щоб заповнити порожній простір, і за якою - то причини buffersвиходить з ладу близько 195MB. Тоді, якщо я закручую диски і роблю findзнову, диски все одно
згортаються

Про swappiness: Він встановлений за замовчуванням 60, але машина не має жодного розділу підкачки, тому я не впевнений, чи багато це робить. Я думаю, я міг би поставити файл swap на флешку, але я не маю уявлення, як це допоможе чи як його розмір.
bogdanb

1
Linux намагається бути розумним щодо кешування. Я не впевнений, що встановлення vfs = 0 буде працювати так, як ви очікуєте. Я думаю, що було б спробувати повернути ті інші записи, коли тиск із додатків (тобто malloc ()) вимагає більше пам'яті. Щодо способу сказати linux не використовувати більше 2 Гб для кеш-пам'яті, я не знаю про таке. У більшості випадків це буде марно пам'ять. Ще одна річ, на яку ви можете поглянути, - це "режим ноутбука", який намагається зробити інакше, щоб диски не розгорнулися для ноутбуків. Я не використовував його, хоча я не знаю багато про це.
Кайл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.