Согласно документации ядра:
This control is used to define how aggressive the kernel will swap
memory pages. Higher values will increase aggressiveness, lower values
decrease the amount of swap.
Однако это немного расплывчато. Я пытаюсь выяснить, что именно параметр в конечном итоге контролирует. Я знаю, что он регулирует, насколько агрессивно ядро пытается поменять страницы, но на какой процесс принятия решений в коде ядра это влияет?
Настраивает ли он, как давно должен был быть доступ к странице, прежде чем ядро ее поменяет? Если так, что означает значение по умолчанию 60? И сколько изменится с шагом / уменьшением 1 (формула была бы хороша)?
Или он меняет страницы в зависимости от частоты их доступа?
Или что-то другое?
Ответы:
Начиная с версии ядра 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
в ноль предотвратит удаление ядром анонимных страниц в пользу страниц из файлового кэша.источник
Существует формула, которая используется для вычисления того, какая страница будет заменена. В
vmscan.c
вы можете увидеть этот алгоритм:Здесь вы можете видеть, что перестановка - это масштаб, который добавляется в некоторый алгоритм, и вы можете управлять этим параметром, как ядро будет вести себя, когда оно должно поменяться местами. Вы можете изобразить это как процент вероятности того, что какая-то неактивная страница памяти будет заменена. Если вы установили swappiness на 100, вероятность не будет, но есть гарантия, что она поменяется, и если вы установите ее на 0, ядро будет пытаться вообще не менять местами, пока у него есть какая-то пустая память.
источник
Говорят (я думаю, что Норман 1986), что часто кнопка «ЗАКРЫТЬ ДВЕРЬ» в лифте либо сломана, либо вообще никогда не была связана с чем-либо. Это делает эрзац контроль не способом манипулирования лифтом, а умиротворением чрезмерно спешного наездника.
Аналогичным образом, перестановка имеет эффект, не связанный с ее четко определенным, детерминированным контролем предиката ядра. Как было отмечено @neon_overlord на сайте askubuntu.com
Так что же это на самом деле контролирует? Один действительный ответ - в дополнение к уже предоставленным точным ответам - это то, что он изменяет ваше ожидание того, что вы имеете больший контроль над своей системой, и что поворот ручки позволит вам осуществлять этот контроль осмысленно.
источник