Начиная с версии ядра 2.6.28, Linux использует стратегию замены страницы Split Least недавно Used (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в ноль предотвратит удаление ядром анонимных страниц в пользу страниц из файлового кэша.