Почему swappiness по умолчанию установлено на 60?

109

Я только что прочитал кое-что о перестановке в Linux. Я не понимаю, почему по умолчанию установлено значение 60.

По моему мнению, этот параметр должен быть установлен на 10, чтобы уменьшить своп. Своп находится на моих жестких дисках, поэтому он намного медленнее, чем моя память.

Почему они так настроили ядро?

Хьюго
источник
2
@Mat Смотрите это для того, как сделать swappiness бенчмаркинга.
Джеремия

Ответы:

133

Начиная с ядра 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.swappinessto 0предотвратит удаление ядром анонимных страниц в пользу страниц из файлового кэша. Это может быть полезно, если программы выполняют большую часть своего кэширования самостоятельно, что может иметь место в некоторых базах данных. В настольных системах это может улучшить интерактивность, но недостатком является то, что производительность ввода-вывода, скорее всего, будет хитом.

Значение по умолчанию, скорее всего, было выбрано в качестве приблизительного среднего между этими двумя крайностями. Как и с любым параметром производительности, настройка vm.swappinessдолжна основываться на данных эталонных тестов, сопоставимых с реальными рабочими нагрузками, а не только на интуиции.

Томас Найман
источник
4
Как установка ОС на твердотельное устройство влияет на компромисс?
Gerrit
3
@gerrit Тип основного носителя данных не имеет значения. Такая деталь не видна подсистеме управления памятью.
Томас Найман
Тип базового носителя данных не имеет значения с точки зрения использования памяти. Вы можете подумать о снижении swappiness, чтобы носитель поддерживал ограниченное количество операций чтения / записи (т. Е. Флэш-памяти), чтобы увеличить его долговечность.
MatrixManAtYrService
2
@MatrixManAtYrService Благодаря внутреннему выравниванию износа и встроенной избыточности было показано , что современные твердотельные накопители (на которые ссылается вопрос в предыдущем комментарии) могут выполнять до 2 ПБ (!) Операций записи до появления ошибок. Даже более дешевые диски в этих экспериментах прослужили 300 ТБ до появления ошибок, что намного превышает официальный гарантийный рейтинг около 100 ТБ. По крайней мере, на мой взгляд, настройка swapiness для размещения SSD на рабочих станциях или ноутбуках не является действительно оправданной.
Томас Найман
2
@ThomasNyman вы делаете хорошее замечание, для большинства пользователей не стоит беспокоиться. Случай, который привел меня к этому посту, касался места подкачки на SD-карте, что, как я узнаю, является немного более сложным делом.
MatrixManAtYrService
9

Проблема в том, что не существует единого значения по умолчанию, которое удовлетворяло бы всем потребностям. Установка параметра swappiness на 10 может быть подходящей настройкой для настольных компьютеров, но значение по умолчанию 60 может быть более подходящим для серверов. Другими словами, подкачка должна быть изменена в зависимости от варианта использования - рабочий стол или сервер, тип приложения и так далее.

Кроме того, ядро ​​Linux использует память для дискового кэша, в противном случае оперативная память не использовалась бы, и это неэффективно и предназначено. Наличие дисковых данных в кеше означает, что если что-то снова понадобятся те же данные, оно, скорее всего, получит их из памяти. Извлечение данных оттуда гораздо быстрее, чем получение их с диска снова. А опция подкачки - это механизм, который ядро ​​Linux предпочитает выгружать на диск, чтобы уменьшить кэш диска. Стоит ли удалять старые данные из кэша или заменять некоторые страницы программы?

Эта статья также может пролить свет на эту тему. Особенно, как оценивается тенденция обмена.

dsmsk80
источник
Я не понимаю, почему 60 больше подходит для серверов. У меня есть серверы, и некоторые процессы идут в режиме подкачки, даже если у нас 40% свободной оперативной памяти. не имеет смысла для меня.
Хьюго
7
Имеет смысл перенести части памяти в раздел подкачки, если очень маловероятно, что к ним будет доступ, таким образом, Linux будет максимально свободен от оперативной памяти, чтобы быть готовым к ситуациям, когда это действительно необходимо.
повтор
Ссылка на статью мертва , но вы можете просмотреть его из Wayback Machine
DRS
Связанная статья является информативной. Спасибо, что поделились этим.
Пистос
5

Добавление более подробно к ответам выше.
Поскольку мы используем все больше и больше виртуальных машин, хост Linux может быть виртуальной машиной в одной из этих облачных сред. В обоих примерах 1 и 2 мы получили хорошее представление о запущенных приложениях и о том, сколько ОЗУ они потребляют. В 3 не так много

  • Пример 1.
    Высокопроизводительное частное облако (думаю, за которое большинство банков будут платить миллионы), где диск снабжен очень дорогим массивом хранения с ОЧЕНЬ хорошим IO. Часть этого хранилища может быть в ОЗУ (в дисковом массиве), поддерживаемом дисками SSD, поддерживаемыми обычными дисками со шпинделями. В этой ситуации диск, который видит виртуальная машина, может быть только немного медленнее, чем доступ к ОЗУ. Для одного vm нет большой разницы между swap и ram.
  • Пример 2
    То же самое, что и в примере 1, но вместо одного vm у вас есть сотни, тысячи или больше. В этой ситуации мы обнаруживаем, что ОЗУ сервера (гипервизора) дешево и много, где ОЗУ хранилища стоит дорого (условно говоря). Если мы разделим требования к ОЗУ между ОЗУ гипервизора и SWAP, предоставляемыми нашим очень дорогим массивом хранения, то обнаружим, что быстро используем всю память в массиве хранения, затем блоки обслуживаются твердотельными накопителями и, наконец, шпинделями. Внезапно каждый начинает становиться очень медленным. В этом случае мы, вероятно, захотим выделить много оперативной памяти (от гипервизора) для виртуальной машины и установить для swappiness значение 0 (только подкачка, чтобы избежать нехватки памяти), поскольку совокупный эффект всех этих виртуальных машин будет влиять на производительность хранение,
  • Пример 3 Современный ноутбук или настольный компьютер, вероятно, с SSD. Требования к памяти считаются неизвестными. Какой браузер будет использовать пользователь, сколько вкладок у него будет открыто, будут ли они также редактировать документ, изображение RAW или, возможно, видео, все они будут потреблять оперативную память. Установка низкого значения подкачки и выполнение других настроек файловой системы будет означать, что будет меньше записей на SSD и, следовательно, это будет длиться дольше.
Тимофей с
источник
3
Проблемы выносливости записи SSD для системы конечного пользователя переоценены. Современные твердотельные накопители обычно сохраняют объем записи в сотни сотен терабайт. Типичная настольная система, даже при интенсивном использовании подкачки, вряд ли будет использовать ее в течение многих лет эксплуатации.
Жюль