Я только что прочитал кое-что о перестановке в Linux. Я не понимаю, почему по умолчанию установлено значение 60.
По моему мнению, этот параметр должен быть установлен на 10, чтобы уменьшить своп. Своп находится на моих жестких дисках, поэтому он намного медленнее, чем моя память.
Почему они так настроили ядро?
Ответы:
Начиная с ядра 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
to0
предотвратит удаление ядром анонимных страниц в пользу страниц из файлового кэша. Это может быть полезно, если программы выполняют большую часть своего кэширования самостоятельно, что может иметь место в некоторых базах данных. В настольных системах это может улучшить интерактивность, но недостатком является то, что производительность ввода-вывода, скорее всего, будет хитом.Значение по умолчанию, скорее всего, было выбрано в качестве приблизительного среднего между этими двумя крайностями. Как и с любым параметром производительности, настройка
vm.swappiness
должна основываться на данных эталонных тестов, сопоставимых с реальными рабочими нагрузками, а не только на интуиции.источник
Проблема в том, что не существует единого значения по умолчанию, которое удовлетворяло бы всем потребностям. Установка параметра swappiness на 10 может быть подходящей настройкой для настольных компьютеров, но значение по умолчанию 60 может быть более подходящим для серверов. Другими словами, подкачка должна быть изменена в зависимости от варианта использования - рабочий стол или сервер, тип приложения и так далее.
Кроме того, ядро Linux использует память для дискового кэша, в противном случае оперативная память не использовалась бы, и это неэффективно и предназначено. Наличие дисковых данных в кеше означает, что если что-то снова понадобятся те же данные, оно, скорее всего, получит их из памяти. Извлечение данных оттуда гораздо быстрее, чем получение их с диска снова. А опция подкачки - это механизм, который ядро Linux предпочитает выгружать на диск, чтобы уменьшить кэш диска. Стоит ли удалять старые данные из кэша или заменять некоторые страницы программы?
Эта статья также может пролить свет на эту тему. Особенно, как оценивается тенденция обмена.
источник
Добавление более подробно к ответам выше.
Поскольку мы используем все больше и больше виртуальных машин, хост Linux может быть виртуальной машиной в одной из этих облачных сред. В обоих примерах 1 и 2 мы получили хорошее представление о запущенных приложениях и о том, сколько ОЗУ они потребляют. В 3 не так много
Высокопроизводительное частное облако (думаю, за которое большинство банков будут платить миллионы), где диск снабжен очень дорогим массивом хранения с ОЧЕНЬ хорошим IO. Часть этого хранилища может быть в ОЗУ (в дисковом массиве), поддерживаемом дисками SSD, поддерживаемыми обычными дисками со шпинделями. В этой ситуации диск, который видит виртуальная машина, может быть только немного медленнее, чем доступ к ОЗУ. Для одного vm нет большой разницы между swap и ram.
То же самое, что и в примере 1, но вместо одного vm у вас есть сотни, тысячи или больше. В этой ситуации мы обнаруживаем, что ОЗУ сервера (гипервизора) дешево и много, где ОЗУ хранилища стоит дорого (условно говоря). Если мы разделим требования к ОЗУ между ОЗУ гипервизора и SWAP, предоставляемыми нашим очень дорогим массивом хранения, то обнаружим, что быстро используем всю память в массиве хранения, затем блоки обслуживаются твердотельными накопителями и, наконец, шпинделями. Внезапно каждый начинает становиться очень медленным. В этом случае мы, вероятно, захотим выделить много оперативной памяти (от гипервизора) для виртуальной машины и установить для swappiness значение 0 (только подкачка, чтобы избежать нехватки памяти), поскольку совокупный эффект всех этих виртуальных машин будет влиять на производительность хранение,
источник