Яке відповідне значення vm.swappiness при використанні zram?


13

Я використовую zram на своєму комп’ютері як стислий своп RAM. Коли системі потрібно щось поміняти, замінити її на файл, що підтримується zram, є більш-менш еквівалентним стисканню цих даних у пам'яті, щоб звільнити місце. Це робить обмін дуже швидким у більшості випадків, відносно підкачки на дисках. Через це мені цікаво, чи є якась ефективність, спонукаючи систему більш агресивно замінювати невикористані речі, оскільки це можна зробити, не фактично натискаючи диск?

Так хтось заплутався з, скажімо, встановленням vm.swappiness100 під час використання zram? Це було б бажано?

sysctl -w vm.swappiness=100

2
Це відмінне запитання, і я думаю, що деякий аналіз полягає в тому, щоб зняти думки і зрозуміти факти ...
Старійшина Geek

Хороша ідея, і zram, можливо, покращився з 2012 року, коли я останній раз використовував його :-)
Huygens

Зробив невеликий тест, і наскільки я можу сказати пам'ять, «зарезервовану» для zram, як і раніше, використовується як кеш. Якщо це підтвердиться, то, я думаю, може бути сенсом тримати свобідність низькою, щоб уникнути циклів процесора?
Вітор

Відповіді:


2

Я б дійсно не рекомендував ставити свобідність вище. Поширений механізм в ядрі полягає в тому, що він поміщає сторінки (шматок пам'яті) в своп, щоб звільнити деяку пам'ять для інших запущених завдань.

Перша "проблема", коли ядро ​​хоче звільнити n сторінок, m (з m <n, m - кількість стислих сторінок, необхідних для утримання n), щойно створені в оперативній пам'яті, я не впевнений, чи може це порушити ядро ​​або ні.

Тоді в будь-якому випадку, коли у вас є сторінки в свопі, можливо, згодом ви будете використовувати додаток із деякими його сторінками. Ядро робить це повернення цих сторінок у фізичну пам'ять, але не видаляє їх із свопу (що за допомогою стандартного swap можна сприймати як кешування , тому коли програма повертається у фоновому режимі, ядро ​​не повинно записувати ці сторінки в повільний своп). Однак із zram - це, мабуть, не мудра хитрість, тому що тоді у вас є в пам'яті m сторінок в zram + n сторінок, які знову в пам'яті!

У ядра звичайно є "загальна пам'ять", яку він може використовувати для своєї справи. Коли ви додаєте zram, він рахує лише в пам'яті "swap", як це було б при будь-якому диску на основі диска, але це зменшило фактичну "загальну пам'ять" і цього ядро ​​не очікує / очікує. Іноді через це ти можеш мати дивну та непотрібну поведінку!

Що стосується zram, добре було б, щоб ядро ​​не помінялося занадто сильно на цю область, коли воно знаходиться під тиском пам'яті. І у вас завжди повинен бути реальний розділ для заміни жорсткого диска, більший щонайменше максимального розміру вашого zram, щоб система не отримала OOM, тоді як при цьому ви побачили б багато вільного місця, як повідомляється free!


zram забезпечує пристрої блоку оперативної пам'яті. Все, записане на ці блокові пристрої, стискається. Якщо пристрої блоку zram використовуються як swap, коли система намагається перемістити частини пам'яті для заміни, це буде ефективно переміщувати пам'ять з однієї частини оперативної пам’яті в іншу, за винятком того, що дані будуть стискатися перед копіюванням до пункту призначення. Це ефективно працює як дешевий механізм стиснення пам'яті для поліпшення чутливості в системах з обмеженою кількістю пам'яті. ... Zram працює з Linux 2.6.33. У 3.14 zram було виведено з інсценізації для драйверів / block / zram.
Старійшина Гек

1
@ElderGeek точно! І я візьму приклад, щоб проілюструвати, чому це не ідеально. Ядро спробує вийняти 64 Мб оперативної пам’яті, він помістить їх в zram swap. Стислий шматок 64 МБ зараз становить 32 Мб. Результат - пам'ять, зменшена на 32 Мб, а не на 64 МБ. Тепер, що відбувається, коли програма вимагає повернення 64 Мб в пам'ять, ядро ​​копіює (а не переміщує) шматок назад в пам'ять. Зараз у вас є 64 Мб оперативної пам’яті + 32 МБ в zram. Навіщо копіювати? Тому що ядро ​​кешує сторінки, як я пояснив у своїй відповіді. Обидві поведінки не є ідеальними. А коли пам’ять недостатньо стискається, це ще гірше.
Гюйгенс

Ще у фазі тестування. Я думаю, що повинен бути певний спосіб налаштування алгоритму кешування, який використовує zram для звільнення стиснутої сторінки, коли вона копіюється назад у нестиснуту ОЗУ.
Старійшина Гек

Я спробував це кілька разів до 2012 року. У той час мій комп'ютер був обмежений 1 Гб оперативної пам’яті, і під час перегляду Інтернету це було болісно повільно (у мене зазвичай відкрито 10-50 вкладок). Але відтоді я більше ніколи його не використовував. У мене більш ніж достатньо оперативної пам’яті, що я більше не використовую своп. Коли тоді я використовував zram з Firefox, я швидко почав "міняти", враховуючи маленьку оперативну пам'ять, яку мав. І швидко у мене була безвідповідальна система з багатьма збоями. Без зраму було болісно повільно, але принаймні стабільно. Моя проблема полягала в тому, що, ймовірно, він постійно стискав / розтискав сторінки пам'яті.
Гюйгенс

Так, мої результати були дещо схожими, в системі з 8 Гб мені вдалося примусити OOM, запустивши кілька VM під час кодування. Чи маєте ви досвід роботи з zswap? Це здається життєздатною альтернативою на основі того, що я прочитав.
Старійшина Гейк

2

Коротка відповідь: vm.swappiness=100це відповідне значення для zram ( по крайней мере на Debian Stretch з Linux 4.9, я вважаю , що це найкраще значення)

Я вже тестую vm.swappiness=100для мене.

Я думаю, ви можете зробити простий тест, щоб переконатися, яке значення найкраще для вас.

Також я зробив ще одну просту програму для тестування цього питання. x На моїй машині дуже низьке vm.swappinessзначення (наприклад, vm.swappiness=1) спричинить очевидну проблему реагування.

Про SwapCachedв /proc/meminfo:

По-перше, спробуйте vm.page-cluster=0, це, можливо, може зменшити щось непотрібне SwapCachedвід підкачки.

SwapCaching може пришвидшити zram так само, як і не-zram-пристрій

SwapCached можна повторно використовувати (безкоштовно), коли це необхідно:

./linux-4.9/mm$ grep -rn delete_from_swap_cache
memory-failure.c:715:   delete_from_swap_cache(p);
shmem.c:1115:       delete_from_swap_cache(*pagep);
shmem.c:1645:            * unaccounting, now delete_from_swap_cache() will do
shmem.c:1652:               delete_from_swap_cache(page);
shmem.c:1668:       delete_from_swap_cache(page);
vmscan.c:673:       __delete_from_swap_cache(page);
swap_state.c:137:void __delete_from_swap_cache(struct page *page)
swap_state.c:218:void delete_from_swap_cache(struct page *page)
swap_state.c:227:   __delete_from_swap_cache(page);
swapfile.c:947:         delete_from_swap_cache(page);
swapfile.c:987: delete_from_swap_cache(page);
swapfile.c:1023:            delete_from_swap_cache(page);
swapfile.c:1571:            delete_from_swap_cache(page);
./linux-4.9/mm$ 

0

Сторінки потрібно замінити (на диск), коли пам'ять заповнена. Якщо ви використовуєте пам'ять для створення місця для обміну сторінками, коли пам’ять заповнена, можна вважати, що це перемагає мету, за винятком випадків, коли стиснення має певне значення (і тоді було б природно стиснути пам'ять безпосередньо, а не переживати поміняти). Здогадується, треба було б це порівняти, оскільки комп’ютери все швидше стискаються та розпаковуються порівняно зі швидкістю пам'яті.


Я вважав, що сам swap з підтримкою zram є дуже корисним, коли в системі не вистачає пам'яті. Це врятувало мене кілька разів від того, щоб повністю застрягти в переключенні пекла і перезавантажуватися (я аналізую великі набори даних, тому мені потрібна пам'ять, усі 24 ГБ). Мені просто цікаво, чи vm.swappinessналаштовано значення для підключення на дисках, і якщо я повинен змінити його, якщо я буду використовувати в основному заміну, підтримувану zram.
Райан К. Томпсон

1
"все швидше"? На ходу стиснення працює краще, ніж прямі дискові введення / виведення протягом останнього десятиліття (його ніколи не буде швидше, ніж доступ до пам'яті - це не сенс)
symcbean

symcbean, ви забули "порівняно зі швидкістю пам'яті". Де розбіжність?
Олександр

Я думаю, що симбес полягає в тому, що мета стислих сторінок, що підтримуються стисненою пам'яттю (zram), - замінити обмін на фізичне середовище. Причина, по якій не є "природним безпосередньо стиснути пам'ять", полягає в тому, що додаткам було б загрожує ускладненням визначати, які частини її пам'яті можна стиснути і коли; підсистема VM - це набагато простіше місце для її здійснення. Робочі навантаження, які отримує користь від zram, містять сторінки, які відсутні в робочому наборі, і їх можна легко стиснути.
Даніель Папасян
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.