Почему большинство людей рекомендует уменьшить swappiness до 10-20?

Я видел в нескольких сайтах, которые рекомендуют уменьшить swappiness до 10-20 для лучшей производительности.

Действительно ли это - миф или нет? Действительно ли это - общее правило? У меня есть ноутбук с 4 ГБ Ram и SSD на 128 ГБ трудно, какое значение Вы рекомендуете для моего swappiness?

Спасибо.

66
задан 5 September 2013 в 17:54

7 ответов

Поскольку большинство полагает, что свопинг = плохо и что, если Вы не уменьшаете swappiness, система подкачает, когда это действительно не должно будет. Ни один из тех не действительно верен. Люди связывают свопинг с временами, где их система увязает - однако, это главным образом подкачивает , потому что система увязает, не наоборот. Когда система подкачает, она уже включит стоимость производительности в к ее решению подкачать и решит, что не выполнение так имело бы больший полный штраф в производительности системы или устойчивости.

В целом настройки по умолчанию приводят к хорошей общей производительности и устойчивости. Я рекомендовал бы оставить его в значении по умолчанию. Существуют дальнейшие пути для Linux для улучшения его управления памятью для решения некоторых пограничных случаев, но в общем и целом управление swappiness не является хорошим обходным решением - корректируют его в одном направлении, и можно устранить одну проблему и создать другие проблемы. Если в весь возможный, просто устанавливая больше физической RAM (и оставляя в покое swappiness) затмевает все другие средства.

то, Как Linux использует RAM

Любая RAM, которая не используется приложениями, может использоваться в качестве "кэша". Кэш важен для быстрой системы бесперебойной работы, убыстряясь и чтения и пишет в диск.

, Если Ваши приложения увеличивают свое использование памяти до точки, они используют почти всю Вашу RAM, Ваш кэш уменьшится, и на средних дисковых операциях замедлится в результате. Недостаточно иметь просто десятки мегабайтов, или меньше, для кэша в наше время.

, Если приложения увеличивают свое использование памяти еще больше - принятие Вас не имеет никакой области подкачки - у Вас не только не будет пространства для кэша, но у Вас в конечном счете закончится память, и Ваша система должна будет уничтожить рабочие процессы. Уничтожение процессов хуже, чем замедление, поскольку оно дает Вам нестабильную, непредсказуемую систему.

, Как подкачка использования Linux

Для борьбы с обеими из этих проблем система может перераспределить некоторую редко используемую память приложения к области подкачки на диске, освободив RAM. Дополнительная RAM может предотвратить процессы, умирающие из-за исчерпывания памяти, и может исправить немного кэша, таким образом, дисковые операции могут работать более гладко.

Это перераспределение не сделано согласно определенному сокращению все же. Вы не достигаете определенного процента от выделения, после которого Linux начинает подкачивать. Это имеет "нечеткий" алгоритм. Это принимает много во внимание вещей, которые могут лучше всего быть описаны, "сколько давления там для выделения памяти". Если будет большое "давление" для выделения новой памяти, то это увеличит возможности, некоторые будут подкачаны для создания большего количества комнаты. Если будет меньше "давления" затем, то оно уменьшит эти возможности.

Ваша система имеет установку "swappiness", которая помогает Вам настроить, как это "давление" вычисляется. Это часто ложно представлено как "процент RAM", но это не, это - просто значение, которое используется в качестве части формулы. Значения приблизительно 40 - 60 - рекомендуемые нормальные значения, 60 являющийся значением по умолчанию в наше время.

Разрешение Вашей системе подкачать, когда это имеет к, полно очень хорошая вещь, даже если у Вас есть много RAM. Разрешение Вашей системе подкачать, если это должно, дает Вам душевное спокойствие, что, если Вы когда-либо сталкиваетесь с низкой ситуацией с памятью даже временно (при выполнении короткого процесса, который использует большую память), система имеет второй шанс при поддерживании в рабочем состоянии всего. Если Вы идете, насколько отключить свопинг полностью, то Вы рискуете процессами, уничтожаемыми из-за неспособности выделить память.

, Что происходит, когда система срывается и подкачивающий в большой степени?

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

Много людей времени посмотрит на их систему, которая перегружает диск в большой степени и использует большую область подкачки, и обвините свопинг в нем. Это - неправильный подход для взятия. Если свопинг когда-либо достигает этого экстремального значения, это означает, что свопинг является попыткой Вашей системы иметь дело с низкими проблемами памяти, не причиной проблемы, и что, не подкачивая Ваш рабочий процесс просто случайным образом умрет.

Что относительно настольных систем? Разве они не требуют другого подхода?

Пользователи настольной системы действительно ожидают, что система "будет чувствовать себя быстро реагирующей" в ответ на инициируемые пользователями действия, такие как открытие приложения, которое является типом действия, которое может иногда инициировать подкачку из-за увеличения требуемой памяти.

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

Однако это просто смещает стойки ворот. Первое приложение может теперь загрузиться без операции подкачки, но оно оставит менее слабым для следующего приложения, которое загружается. Тот же свопинг может просто произойти позже, когда Вы затем открываете приложение вместо этого. Тем временем производительность системы ниже полный из-за уменьшенного размера кэша. Таким образом любое преимущество от уменьшенной установки swappiness может быть трудно измерить, уменьшив подкачивающий задержку в несколько раз, но вызывающий другую медленную производительность в других случаях. Сокращение swappiness немного может быть выровнено по ширине, если Вы знаете то, что Вы делаете, но уменьшаете его всего до 10%, может оставить систему терпимой очень низким размерам кэша и оставить систему более склонной должными быть подкачать в кратчайшие сроки.

подкачки Отключения полностью нужно избежать, поскольку Вы теряете дополнительную защиту от условий из памяти, которые могут заставить процессы отказывать или уничтожаться.

самое эффективное средство безусловно состоит в том, чтобы установить больше RAM, если можно предоставить его.

подкачка может быть отключена в системе, которая имеет много RAM так или иначе?

, Если у Вас есть намного больше RAM, чем, Вам, вероятно, будет нужно для приложений, затем Вы редко должны будете подкачать. Отключение подкачки, вероятно, не будет иметь значения большинство времени. Но если у Вас есть много RAM, оставление подкачки включило, также не будет иметь никакого штрафа, потому что система не подкачивает, когда это не должно.

единственные ситуации, в которых это было бы , имеют значение, был бы в маловероятной ситуации, система исчерпывает память, и следовательно система кэша становится затрудненной, и это находится в этом типе ситуации, где Вы были бы хотеть подкачка больше всего. Таким образом, можно безопасно оставить подкачку на ее нормальных настройках для добавленного душевного спокойствия без него имеющий отрицательный эффект, когда у Вас есть много памяти.

, Но как подкачка может ускорить мою систему? Разве свопинг не замедляет вещи?

действие передачи данных от RAM для свопинга является медленной операцией, но это только взято, когда ядро будет вполне уверено, общее преимущество в результате хранения разумного размера кэша перевесит это.

, После того как данные находятся в подкачке, когда это выходит снова?

Любая данная часть памяти возвратится из подкачки, как только она использовала - чтение от или записала в. Однако обычно память, которая подкачивается, является памятью, к которой не получили доступ в долгое время и, как ожидают, скоро не будет необходима.

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

Быть там какие-либо случаи, где сокращение swappiness соответствующее?

Да. Если Вы выполняющие сервер, выделенный одному конкретному серверному приложению, которое извлекает выгоду из системного кэша. Некоторые серверы баз данных, такие как сервер Oracle, MySQL/MariaDB рекомендует в некоторых случаях уменьшать swappiness до 1 - 10, поскольку эти механизмы базы данных использует свое собственное кэширование.

Примечание, что это верное, только если Ваша система выделяемая той одной задаче, и в случае MySQL/MariaDB, только если Вы использующие просто InnoDB или XtraDB, и не MyISAM или Арию, и т.д.

88
ответ дан 22 November 2019 в 23:32

На обычном рабочем столе у Вас есть 4-5 активных задач, которые используют 50-60% памяти. Если Вы установите swappiness на 60, то о 1/4-1/3 АКТИВНОЙ задачи страницы будут выгружены. Это означает, для каждого изменения задачи, для каждой новой вкладки, которую Вы открыли для каждого выполнения JS, будет процесс свопинга.

решение состоит в том, чтобы установить swappiness на 10. Практическими наблюдениями это заставляет систему бросать дисковый io кэш (который не подыгрывает мало никакой роли на рабочем столе, поскольку кэш чтения/записи фактически не используется вообще. Если Вы, постоянно копируя БОЛЬШИЕ файлы) вместо того, чтобы продвинуть что-либо в подкачку. На практике это означает, что система откажется подкачивать страницы, сокращая io кэш вместо этого, если это не поразит 90% используемой памяти. И это в свою очередь означает гладкую, быструю возможность рабочего стола без подкачки.

На файловом сервере, однако, я установил бы swappiness на 60 или еще больше, потому что сервер не имеет огромных активных приоритетных задач, которые должны быть сохранены в памяти как целые, а скорее много меньших процессов, которые или работают или спят и не действительно изменяют их состояние сразу. Вместо этого сервер часто служит (прощают) те же самые данные клиентам, делая дисковые io кэши намного более valueable. Таким образом на сервере, намного лучше выгрузить ждущие процессы, освобождая пространство памяти для запросов дискового кэша.

На рабочих столах, однако, эта точная установка приводит к выгрузке блоков памяти РЕАЛЬНЫХ приложений, та близость постоянно изменяют или получают доступ к этим данным.

Достаточно странно, браузеры часто резервируют большие блоки памяти, которую они постоянно изменяют. Когда такие блоки выгружаются, это требует времени, если их требуют назад - и в то же время, браузер идет, дальше обновляя его кэши. Который вызывает огромные задержки. На практике Вы будете сидеть 2 минуты, ожидая единственной веб-страницы на новой вкладке для загрузки.

Рабочий стол действительно не заботится о диске io, потому что рабочий стол редко читает и пишет кэшируемые повторяющиеся большие части данных. Вырезание на диске io, чтобы просто предотвратить подкачивание так как возможное, является намного большим количеством favorible для рабочего стола, чем зарезервировать 30% памяти для дискового кэша с 30% RAM (полный блоков, принадлежащих активно использованным приложениям) выгруженный.

Просто запуск htop, откройте браузер, GIMP, LibreOffice - загружаются, немного документов тут же просматривают в течение нескольких часов. Его действительно настолько легкий.

14
ответ дан 22 November 2019 в 23:32

При выполнении сервера Java в системе Linux, необходимо действительно рассмотреть сокращение swappiness очень от значения по умолчанию 60. Так 20 действительно хорошее начало. Свопинг является уничтожителем для процесса сборки "мусора", потому что наборы каждый раз должны коснуться значительных частей памяти процесса. ОС не имеет средств обнаружить такие процессы и разобраться в вещах для них. Это - лучшая практика, чтобы не подкачивать столько, сколько Вы возможно можете для продуктивных серверов приложений.

9
ответ дан 22 November 2019 в 23:32

Я предложил бы делать некоторые эксперименты при наличии системного монитора, открытого для наблюдения точно, под каким количеством загрузки машина находится, я также работаю с 4 ГБ памяти и SSD на 128 ГБ, таким образом, изменил значение swappiness на 10, который не только улучшил производительность, пока при загрузке, но и в качестве награды также увеличит жизнь твердотельного диска, поскольку это перенесет меньше записей.

Для простого видео учебного руководства о том, как сделать, это с полным объяснением смотрит видео YouTube ниже

http://youtu.be/i6WihsFKJ7Q

4
ответ дан 22 November 2019 в 23:32

Могло случиться так, что большим воспринятым поведением свопинга на запуске или на вводных программах является Linux, читая конфигурационные файлы и т.д. из диска. Так это, возможно, лучше всего для взгляда использующим программу системного монитора прежде, чем предположить, что доступ жесткого диска происходит из-за свопинга.

1
ответ дан 22 November 2019 в 23:32

Я хочу добавить некоторую перспективу от инженера Производительности больших данных, чтобы дать другим больше фона на технологии 2017 года.

Мой личный опыт - то, что, в то время как я обычно отключал свопинг, чтобы гарантировать, что мои системы работают в максимальной скорости на моей рабочей станции для определенной проблемы, я нашел, что swappiness 1 и 10 приводит к замораживанию (навсегда) и длинным паузам. Swappiness 80 для этого конкретного приложения приводит к намного лучшей производительности и более коротким паузам, чем значение по умолчанию (60). Обратите внимание, что у меня было 8 ГБ RAM и 4x 256 ГБ подкачки, поддержанной 1 жестким диском. Я обычно заявлял бы точную статистику, замеченную в моих сравнительных тестах и полных аппаратных спецификациях, но я еще не сделал никого, и это - недавний низкопроизводительный рабочий стол, который не важен здесь.

Назад в моей прежней компании, причина мы не включили swappiness на серверах Spark с [500 ГБ к 4 ТБ] x [10-100], узлы - то, что мы рассматривали низкую производительность как знак перепроектировать конвейер данных и структуры данных более эффективным способом. Мы также не хотели сравнивать жестких дисков/SSD. Кроме того, свопингу так большого количества RAM были бы нужны 10-30 дисков на узел с параллельными записями для уменьшения времени доступа к диску.

Сегодня, 20 лет назад и 20 лет в будущем, случай все еще останется, что некоторые проблемы являются слишком большими для RAM. С бесконечным временем и деньгами, мы можем покупать/арендовать больше аппаратных средств или перепроектировать любой процесс для получения производительности к желательному уровню. Свопинг является просто взломом, чтобы позволить нам игнорировать настоящую проблему (у нас нет достаточного количества поршня, и мы не хотим тратить больше денег).

Для тех, которые думают выше, swappiness является плохим советом, вот немного перспективы. В прошлом HDs имел только некоторых Кбит кэша если таковые имеются. Интерфейсом был IDE/параллель ATA. Шина ЦП была также намного медленнее наряду с RAM и многими другими вещами. Короче говоря, системы были очень медленными (относительно сегодня) каждым способом. Пара несколько лет назад, жесткие диски использовали SATA3. Сегодня, они используют протокол NVMe, который имеет значительные улучшения задержки. HDs имеют многих МБ кэша. И самая интересная часть - при использовании современного SSD (намного более стабильная износостойкость чтения-записи и перфект) с NVMe или PCIe как устройство хранения данных подкачки. Это - лучший компромисс между стоимостью и производительностью. Не пробуйте это дешевыми или старыми SSD.

Swap+SSDs! С высокоэффективной энергозависимой памятью я настоятельно рекомендовал бы экспериментирование с высоким значением swappiness. Это главным образом зависит от шаблонов доступа к памяти (случайным образом получающий доступ ко всей памяти по сравнению с редким доступом больше всего), использование памяти, если дисковая пропускная способность уже насыщается, и фактическая стоимость перегрузки.

3
ответ дан 22 November 2019 в 23:32

Личный анекдот. Я не знал об этой подкачке, и, оглядываясь назад, это могло решить мою проблему. Моя система старая, а оперативной памяти было 4 ГБ.

Я обновил свою ОС Linux до последней версии с долгосрочной поддержкой. Эта версия «пассивно» использовала больше оперативной памяти. Это заставило мою систему использовать больше подкачки. Система начала зависать, потому что своп находится на жестком диске.

Глядя на статистику, ОЗУ и подкачка вместе взятые не превышали мой максимальный объем ОЗУ. Частично проблема заключалась в том, что «чувак из Linux» упомянул, что браузеры часто резервируют большие куски памяти, которые они постоянно модифицируют. Итак, я использовал Firefox (YouTube особенно тяжелый), и из-за этого большие куски шли в своп, но на самом деле были нужны.

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

1
ответ дан 21 November 2020 в 23:39

Другие вопросы по тегам:

Похожие вопросы: