Начиная с ядра 2.6.28, Linux использует стратегию замены страницы Split Least недавно Used (LRU). Страницы с источником файловой системы, такие как текст программы или общие библиотеки, принадлежат кешу файлов. Страницы без поддержки файловой системы называются анонимными страницами и состоят из данных времени выполнения, таких как пространство стека, зарезервированное для приложений и т. Д. Как правило, страницы, принадлежащие кэш-памяти файлов, дешевле извлечь из памяти (так как при необходимости их можно просто прочитать с диска) , Поскольку у анонимных страниц нет резервной копии файловой системы, они должны оставаться в памяти до тех пор, пока они нужны программе, если только для этого не предусмотрено место подкачки.
Это распространенное заблуждение, что раздел подкачки каким-то образом замедлит работу вашей системы. Отсутствие раздела подкачки не означает, что ядро не будет извлекать страницы из памяти, это просто означает, что у ядра меньше вариантов выбора страниц для удаления. Объем доступного свопа не повлияет на то, насколько он используется.
Linux может справиться с отсутствием пространства подкачки, потому что по умолчанию политика учета памяти ядра может перегружать память . Недостатком является то, что , когда физическая память исчерпана, и ядро не может менять анонимные страницы на диск, вне памяти-убийцы (ООМ-убийцы) механизм начнет убивать памяти коробления «изгоев» процессы , чтобы освободить память для другие процессы.
vm.swappiness
Вариантом является модификатором , который изменяет баланс между обменивать из страниц кэша файлов в пользу анонимных страниц. Файловому кешу присваивается произвольное значение приоритета 200, из которого vm.swappiness
вычитается модификатор ( file_prio=200-vm.swappiness
). По умолчанию анонимные страницы начинаются с 60 ( anon_prio=vm.swappiness
). Это означает, что по умолчанию веса приоритетов стоят умеренно в пользу анонимных страниц ( anon_prio=60
, file_prio=200-60=140
). Поведение определено mm/vmscan.c
в исходном дереве ядра.
Учитывая vm.swappiness
в 100
приоритеты были бы равны ( file_prio=200-100=100
, anon_prio=100
). Это имело бы смысл для тяжелой системы ввода-вывода, если не требуется, чтобы страницы из файлового кэша выселялись в пользу анонимных страниц.
И наоборот, установка vm.swappiness
to 0
предотвратит удаление ядром анонимных страниц в пользу страниц из файлового кэша. Это может быть полезно, если программы выполняют большую часть своего кэширования самостоятельно, что может иметь место в некоторых базах данных. В настольных системах это может улучшить интерактивность, но недостатком является то, что производительность ввода-вывода, скорее всего, будет хитом.
Значение по умолчанию, скорее всего, было выбрано в качестве приблизительного среднего между этими двумя крайностями. Как и с любым параметром производительности, настройка vm.swappiness
должна основываться на данных эталонных тестов, сопоставимых с реальными рабочими нагрузками, а не только на интуиции.