Починаючи з версії 2.6.28 ядра, Linux використовує стратегію заміни сторінки найменш розповсюдженого (LRU). Сторінки з джерелом файлової системи, такі як текст програми або спільні бібліотеки, належать до кеш-файлів. Сторінки без резервної копії файлової системи називаються анонімними сторінками і складаються з даних часу виконання, таких як простір стеків, відведений для додатків тощо. Як правило, сторінки, що належать до кеш-файлів, дешевше вилучаються з пам'яті (оскільки їх можна просто прочитати з диска при необхідності) . Оскільки на анонімних сторінках немає резервної копії файлової системи, вони повинні залишатися в пам'яті, доки вони потрібні програмі, якщо немає місця для обміну для їх зберігання.
Цей vm.swappiness
параметр грає у get_scan_count()
визначеному в mm/vmscan.c
. get_scan_count()
визначає, наскільки агресивно слід сканувати анонімні та файлові списки LRU під час пошуку сторінок для виселення. Значення кожного випадку визначається плаваючим середнім коефіцієнтом нещодавно повернутих та нещодавно відсканованих коефіцієнтів, де новітні посилання мають більшу вагу, ніж старі, для врахування зміни робочого навантаження системи.
Це vm.swappiness
модифікатор, який змінює баланс між заміною сторінок кешу файлів на користь анонімних сторінок. vm.swappiness
- це значення пріоритету, яке надається анонімним сторінкам, за замовчуванням - 60 . Кеш-файлу надається значення пріоритету 200, з якого vm.swappiness
виводиться модифікатор ( file_prio=200-anon_prio
). Це означає, що за замовчуванням ваги пріоритету помірно стоять на користь анонімних сторінок ( anon_prio=60
, file_prio=200-60=140
). Однак, коли система близька до стану поза пам'яті , і анонімні, і списки файлів LRU скануються однаково, якщо vm.swappiness
не встановлено нуль.
Якщо vm.swappiness
встановлено 100, пріоритети будуть рівними ( anon_prio=100
, file_prio=200-100=100
). Якщо встановити vm.swappiness
нуль, це не дозволить ядру вилучати анонімні сторінки на користь сторінок із кеш-файлів.