Поскольку большинство считает, что подкачка - это плохо, и если вы не уменьшите перестановку, система поменяется, когда в этом действительно нет необходимости. Ни то, ни другое не правда. Люди связывают своп со временем, когда их система застревает - однако, это в основном своп, потому что система сваливается, а не наоборот. Когда система меняет местами, она уже учла затраты на производительность в своем решении об обмене и решила, что невыполнение этого приведет к большему общему снижению производительности или стабильности системы.
В целом настройки по умолчанию обеспечивают хорошую общую производительность и стабильность. Я бы рекомендовал оставить его по умолчанию. У Linux есть и другие способы улучшить управление памятью, чтобы решить некоторые крайние случаи, но в целом управление перестановкой не является хорошим обходным путем - отрегулируйте его в одном направлении, и вы можете исправить одну проблему и создать другие проблемы. Если это вообще возможно, простая установка дополнительной физической ОЗУ (и оставление подкачки в покое) затмевает все остальные меры.
Как Linux использует оперативную память
Любая оперативная память, которая не используется приложениями, может использоваться как «кэш». Кэш важен для быстрой и бесперебойной работы системы, ускоряя как чтение, так и запись на диск.
Если ваши приложения увеличивают объем используемой памяти до такой степени, что они используют почти всю вашу оперативную память, кэш-память сокращается, и в результате операции с диском в среднем замедляются. В настоящее время для кэша недостаточно десятков мегабайт или меньше.
Если приложения увеличивают использование памяти еще больше - при условии, что у вас нет пространства подкачки - у вас не только не будет места для кэша, но в конечном итоге вам не хватит памяти, и вашей системе придется уничтожать запущенные процессы. Процессы уничтожения хуже, чем замедление, поскольку они дают вам нестабильную, непредсказуемую систему.
Как Linux использует своп
Чтобы справиться с обеими этими проблемами, ваша система может перераспределить часть редко используемой памяти приложений в пространство подкачки на диске, освобождая оперативную память. Дополнительная оперативная память может предотвратить процессы, умирающие из-за нехватки памяти, и может освободить небольшой кэш, чтобы операции на диске могли работать более плавно.
Это перераспределение не сделано в соответствии с определенным ограничением, хотя. Вы не достигаете определенного процента распределения, после которого Linux начинает меняться. Имеет «нечеткий» алгоритм. Принимается во внимание множество вещей, которые лучше всего можно описать как «насколько сильно давление для выделения памяти». Если существует большое «давление» для выделения новой памяти, то это увеличит шансы, что некоторые из них будут заменены, чтобы освободить место. Если будет меньше «давления», это уменьшит эти шансы.
Ваша система имеет настройку «swappiness», которая помогает вам настроить, как рассчитывается это «давление». Это часто ложно представляется как «процент оперативной памяти», но это не так, это просто значение, которое используется как часть формулы. Значения от 40 до 60 являются рекомендованными нормальными значениями, 60 в настоящее время являются значениями по умолчанию.
Позволить вашей системе поменяться, когда это необходимо, в целом очень хорошо, даже если у вас много оперативной памяти. Разрешение вашей системы поменяться, если это необходимо, дает вам уверенность в том, что если вы когда-нибудь столкнетесь с нехваткой памяти даже временно (при выполнении короткого процесса, который использует много памяти), у вашей системы есть второй шанс сохранить все в рабочем состоянии. Если вы зайдете так далеко, что полностью отключите подкачку, то рискуете убить процессы из-за невозможности выделить память.
Что происходит, когда система перегружена и сильно перегружена?
Замена - это медленная и дорогостоящая операция, поэтому система избегает ее, если не рассчитывает, что компромисс в производительности кэша компенсирует ее в целом или если необходимо избежать процессов уничтожения.
Часто люди смотрят на свою систему, которая сильно перегружает диск и использует много места подкачки и винит в этом обмен. Это неправильный подход. Если подкачка когда-либо достигает этого предела, это означает, что подкачка - это попытка вашей системы справиться с проблемами нехватки памяти, а не причина проблемы, и что без перестановки ваш работающий процесс просто случайно умрет.
А как насчет настольных систем? Разве они не требуют другого подхода?
Пользователи настольной системы действительно ожидают, что система «почувствует отзывчивость» в ответ на инициируемые пользователем действия, такие как открытие приложения, что является типом действия, которое иногда может вызвать своп из-за увеличения требуемой памяти.
Один из способов, которым некоторые люди пытаются настроить это, состоит в том, чтобы уменьшить параметр swappiness, который может увеличить терпимость системы к приложениям, использующим память и имеющую мало места в кеше.
Тем не менее, это просто смещение ворот. Первое приложение теперь может загружаться без операции подкачки, но оно оставит меньше проблем для следующего загружаемого приложения. Такая же замена может произойти позже, когда вы в следующий раз откроете приложение. Между тем, производительность системы в целом ниже из-за уменьшенного размера кэша. Таким образом, может быть сложно измерить какую-либо выгоду от настройки уменьшенной перестановки, в некоторых случаях уменьшая задержку перестановки, но в других случаях вызывая другие медленные рабочие характеристики. Небольшое уменьшение объема подкачки может быть оправданным, если вы знаете, что делаете, но снижение его до 10% может привести к тому, что система будет терпимо относиться к очень маленьким размерам кэша, и система будет более подвержена необходимости замены в кратчайшие сроки.
Следует полностью избегать полного отключения свопа, поскольку вы теряете дополнительную защиту от нехватки памяти, что может привести к сбою или остановке процессов.
На сегодняшний день наиболее эффективным средством является установка большего объема оперативной памяти, если вы можете себе это позволить.
Можно ли в любом случае отключить своп в системе с большим количеством оперативной памяти?
Если у вас гораздо больше ОЗУ, чем вам может понадобиться для приложений, то вам редко потребуется подкачка. Отключение свопа, вероятно, не будет иметь значения в большинстве случаев. Но если у вас достаточно оперативной памяти, то если оставить подкачку включенной, штраф не будет, потому что система не поменяется, когда это не нужно.
Единственные ситуации, в которых это будет иметь значение, могут быть в маловероятной ситуации, когда система испытывает недостаток памяти, и, следовательно, система кеша становится затрудненной, и именно в такой ситуации вам больше всего нужно поменяться местами. Таким образом, вы можете безопасно оставить своп на его обычные настройки для дополнительного спокойствия, без негативного эффекта, когда у вас много памяти.
Но как обменяться может ускорить мою систему? Разве обмен не замедляет вещи?
Передача данных из ОЗУ в раздел подкачки является медленной операцией, но она выполняется только тогда, когда ядро почти уверено, что общая выгода от сохранения разумного размера кэша перевесит это.
Когда данные в свопе, когда они выходят снова?
Любая часть памяти будет возвращена из свопинга, как только она будет использована - прочитана или записана. Однако обычно подкачанная память - это память, к которой не обращались в течение длительного времени и которая, как ожидается, не понадобится в ближайшее время.
Перенос данных из свопа занимает примерно столько же времени, сколько и их передача туда. Ваше ядро не удалит данные из него, если в этом нет необходимости. В то время как данные в обмене и не используется, она оставляет больше памяти для других вещей , которые являются используются, и больше кэш - памяти системы.
Существуют ли случаи, когда уместно сокращение перестановки?
Да. Если вы используете сервер, выделенный для одного конкретного серверного приложения, который не использует системный кеш. Некоторые серверы баз данных, такие как сервер Oracle, MySQL / MariaDB рекомендуют в некоторых случаях уменьшить перестановку до 1-10, поскольку эти механизмы баз данных используют свое собственное кэширование.
Обратите внимание, что это верно только в том случае, если ваша система предназначена для этой единственной задачи, а в случае MySQL / MariaDB - только если вы используете только InnoDB или XtraDB, а не MyISAM или Aria и т. Д.