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

48

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

Это миф или нет? Это общее правило? У меня есть ноутбук с жестким диском 4 ГБ и жестким диском емкостью 128 ГБ, какое значение вы рекомендуете для моей swappiness?

Спасибо.

    
задан Saeed Zarinfam 05.09.2012 в 07:02
источник

5 ответов

74

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

В целом настройки по умолчанию приводят к хорошей общей производительности и стабильности. Я бы рекомендовал оставить его по умолчанию. Есть улучшения, которые могут быть сделаны в отношении того, как swap работает на настольных / интерактивных системах, но в целом контроль swappiness не является лучшим решением - отрегулируйте его в одном направлении, и вы можете исправить одну проблему и создать другие проблемы. Он бледнеет по сравнению с простой установкой большего объема оперативной памяти.

Как Linux использует оперативную память

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

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

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

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

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

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

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

Что происходит, когда система увязывается и сильно меняет местами?

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

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

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

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

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

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

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

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

Можно ли отключить обмен в системе с большим количеством ОЗУ?

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

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

Но как можно поменять скорость моей системы? Не меняет медленные вещи?

Акт передачи данных из ОЗУ для обмена - это медленная операция, но это делается только тогда, когда ядро ​​уверен, что общая выгода в результате сохранения разумного размера кеша перевешивает это.

Как только данные находятся в swap, когда он снова появляется?

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

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

    
ответ дан thomasrutter 05.09.2012 в 07:24
источник
11

О, мне нравится, когда люди публикуют ОГРОМНЫЕ тексты обоснований / анализа, например, neon_overload выше, но это НЕ РЕШИТ любая проблема, потому что это все ТЕОРЕТИЧЕСКИЕ.

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

Решение состоит в том, чтобы установить swappiness на 10. Практические замечания приводят к тому, что система отказывается от дискового io-кеша (который практически не играет роли на рабочем столе, поскольку кэш чтения / записи практически не используется. постоянно копируя файлы LARGE) вместо того, чтобы вставлять что-либо в swap. На практике это означает, что система откажется подкапывать страницы, вместо этого сокращая кеш-ке, если только он не использует 90% используемую память. А это, в свою очередь, означает плавный, быстрый, быстрый рабочий стол.

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

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

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

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

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

    
ответ дан Linux dude 02.06.2014 в 00:10
9

Если вы запускаете Java-сервер в своей Linux-системе, вам стоит подумать об уменьшении возможности swappiness от значения по умолчанию 60. Таким образом, 20 действительно хороший старт. Swapping - это убийца для процесса сбора мусора, потому что коллекции каждый раз должны касаться больших частей памяти процесса. У ОС нет средств для обнаружения таких процессов и получения прав на них. Лучше всего избегать подкачки, насколько это возможно, для продуктивных серверов приложений.

    
ответ дан Andreas 25.02.2014 в 13:22
4

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

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

Ссылка

    
ответ дан Tech-Compass 07.06.2014 в 18:20
1

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

    
ответ дан user1740850 24.04.2013 в 19:57