Из того, что я понимаю, цель раздела подкачки в Linux состоит в том, чтобы освободить некоторую информацию «не так часто доступную» из ОЗУ и переместить ее в определенный раздел на жестком диске (за счет замедления чтения или записи из него). к), по существу, позволяя активным приложениям больше «высокоскоростной памяти».
Это отлично подходит для тех случаев, когда вы работаете на машине с небольшим объемом оперативной памяти и не хотите сталкиваться с проблемами, если у вас закончились. Однако, если в вашей системе 16 ГБ или 32 ГБ ОЗУ и предполагается, что вы не используете базу данных MySQL для StackExchange или не редактируете полнометражный фильм 1080p в Linux, следует ли использовать раздел подкачки?
/tmp
) после 3 дней безотказной работы.Ответы:
Да.
Скорее всего, вы всегда должны включать swap, за исключением случаев, когда есть очень веская причина, например, отсутствие диска или наличие только сетевого диска. Если у вас есть своп на порядок часто рекомендуемых смешных размеров (например, в два раза больше оперативной памяти)? Ну нет .
Причина в том, что подкачка полезна не только тогда, когда ваши приложения потребляют больше памяти, чем физической памяти (фактически, в этом случае подкачка не очень полезна вообще, потому что она серьезно влияет на производительность). В настоящее время основным стимулом для обмена является не магическое превращение 16 ГБ ОЗУ в 32 ГБ, а более эффективное использование установленной и доступной ОЗУ.
На современном компьютере оперативная память не остается неиспользованной. Неиспользованная оперативная память - это то, что вы могли бы не купить и не сэкономить. Поэтому, все, что вы загружаете или что - нибудь , что в противном случае отображенных в памяти, ничего , что могло возможно быть повторно использовано кем - либо позже в любое время (ограниченно ограничения безопасности) находится в кэше. Очень скоро после загрузки машины все физическое ОЗУ будет использовано для чего-либо .
Всякий раз, когда вы запрашиваете новую страницу памяти из операционной системы, диспетчер памяти должен принять взвешенное решение:
Варианты № 4 и № 5 крайне нежелательны и произойдут только в том случае, если у операционной системы нет другого выбора. Опции # 1 и # 2 означают, что вы выбрасываете то, что вам, возможно, скоро понадобится снова. Это негативно влияет на производительность.
Вариант № 3 означает, что вы перемещаете то, что вам (вероятно) не нужно в ближайшее время, на медленное хранилище. Это нормально, потому что теперь то, что вам нужно, может использовать быструю оперативную память.
Удалив опцию № 3, вы фактически ограничили операционную систему выполнением # 1 или # 2. Перезагрузка страницы с диска - это то же самое, что перезагрузка ее из свопа, за исключением того, что перезагрузка из свопа обычно менее вероятна (из-за принятия правильных решений по подкачке).
Другими словами, отключив подкачку, вы ничего не получите, но вы ограничите число полезных опций операционной системы при работе с запросом памяти. Что может и не быть , но очень возможно может быть недостатком (и никогда не будет преимуществом).
[РЕДАКТИРОВАТЬ]
Внимательный читатель
mmap
справочной страницы , в частности описаниеMAP_NORESERVE
, заметит еще одну вескую причину, по которой своп является в некоторой степени необходимостью даже в системе с «достаточным количеством» физической памяти:«Когда пространство подкачки не зарезервировано, можно получить SIGSEGV при записи, если физическая память недоступна».
- Подожди, что это значит?
Если вы отобразите файл, вы можете получить доступ к содержимому файла напрямую, как если бы он каким-то образом волшебным образом находился в адресном пространстве вашей программы. Для доступа только для чтения операционной системе в принципе требуется не более одной страницы физической памяти, которую она может заполнять различными данными каждый раз, когда вы обращаетесь к другой виртуальной странице (по соображениям эффективности это, конечно, не то, что делается, но в принципе, вы можете получить доступ к данным в терабайтах с одной страницы физической памяти). А что если ты тоженаписать в файл сопоставления? В этом случае операционная система должна иметь физическую страницу - или пространство подкачки - готовую для каждой записанной страницы. Нет другого способа сохранить данные до тех пор, пока процесс обратной записи грязных страниц не выполнит свою работу (это может занять несколько секунд). По этой причине операционная система резервирует (но не обязательно когда-либо фиксирует) пространство подкачки, поэтому, если вы пишете в сопоставление, в то время как физическая страница не используется (это вполне возможно и нормальное состояние), вы ' вновь гарантировано , что он все равно будет работать.
Что теперь, если нет свопа? Это означает, что никакой обмен не может быть зарезервирован (дух!), И это означает, что, как только не осталось свободных физических страниц, и вы пишете на страницу, вы получаете приятный сюрприз в виде процесса получения ошибка сегментации, и, вероятно, быть убитым.
[/РЕДАКТИРОВАТЬ]
Тем не менее, традиционная рекомендация сделать своп в два раза больше оперативной памяти бессмысленна. Хотя дисковое пространство дешевое, не имеет смысла назначать такой большой объем подкачки. Потеря чего-то дешевого все еще расточительна, и вы абсолютно не хотите постоянно менять рабочие наборы размером в несколько сотен мегабайт (или больше).
Не существует единого «правильного» размера свопа («правильных» размеров столько же, сколько пользователей и мнений). Я обычно назначаю фиксированные 512MiB, независимо от объема оперативной памяти, что очень хорошо работает для меня. Причина в том, что 512MiB - это то, что вы всегда можете себе позволить в наше время, даже на маленьком диске. С другой стороны, добавление нескольких гигабайт подкачки не лучше. Вы не собираетесь их использовать, за исключением случаев, когда что-то идет серьезно.
Даже на SSD подкачка на несколько порядков медленнее, чем ОЗУ (из-за пропускной способности шины и задержки), и хотя вполне приемлемо переместить что-то для подкачки, что, вероятно, не понадобится снова (т.е. вы, скорее всего, не будете поменяйте местами снова, чтобы ваш пул доступных страниц был эффективно расширен бесплатно (если вам действительно нужно значительное количество свопа (то есть у вас есть приложение, которое использует, например, набор данных 50 ГБ)), вы в значительной степени потеряны.
Как только ваш компьютер начинает выгружать и выводить гигабайты страниц, все идет на спад. Таким образом, для большинства людей (включая меня) это не вариант, и поэтому такой большой обмен не имеет смысла.
источник
Я собираюсь не согласиться с некоторыми из мнений, которые я вижу, изложенные здесь. Я все еще буду создавать раздел SWAP, особенно в производственной среде. Я делаю это и для своих домашних машин и виртуальных машин.
В эти дни я оцениваю их в 1-1,5 раза больше памяти. 2 раза память раньше была эмпирическим правилом. Диск подкачки «дешевый» в том смысле, что его не нужно резервировать или защищать.
Если вам не хватает памяти, то пространство подкачки дает вам немного времени и подушки для решения проблемы.
Поймите, что такие вещи, как / tmp, могут находиться в пространстве подкачки.
Область подкачки может содержать частичный дамп ядра, чтобы его можно было восстановить при следующей перезагрузке. Это может быть полезно для какой-то неотложной ситуации в будущем, к которой вы призваны.
источник
Может быть:
Я много размышлял над этой темой и видел, как мнения по обеим сторонам аргумента оказываются больше, чем я могу сосчитать. Мой подход состоял в том, чтобы разработать способ выяснить это.
Начните с активного раздела подкачки того, что вы считаете достаточным размером.
Затем откройте терминал в рабочей области и введите команду,
free -hs 1
которая будет сообщать об использовании раз в секунду.При желании переключиться на другие рабочие пространства.
Делайте все, что вы, вероятно, когда-либо делаете, а затем еще немного. Запускайте все свои обычные приложения одновременно, просматривайте несколько вкладок и отчаянно пытайтесь дать системе реальную тренировку для вас, это может означать перекодирование 1/2 дюжины видео во время выполнения операции компиляции и проверки вашей электронной почты или чего-либо еще. Давайте посмотрим правде в глаза, это все о том, как вы используете свою систему.
Когда вы чувствуете, что ваша система находится под высокой нагрузкой (или такой высокой, какой вы когда-либо могли бы получить, а затем еще немного), посмотрите на терминал и изучите результаты. или, что еще лучше, перенаправьте вывод в файл, добавив
>output.txt
в команду, чтобы вы могли проверить весь прогон. Если используемый своп никогда не превышает Mem free, вам не нужен своп. Если это так, вы делаете.Мне не нужен своп. Может быть, вы делаете. Почему бы не узнать?
Что касается подмены размеров, эмпирические правила обычно переоцениваются, так как это вопрос, основанный на использовании.
источник
swap
переходитfree
?ПРИМЕЧАНИЕ: это случилось со мной, в конкретной, необычной ситуации. Если вы устраняете проблему, это может быть полезно. Я не имею в виду, что ВСЕ машины ДОЛЖНЫ иметь обмен.
МОЖЕТ БЫТЬ!
В прошлом у меня возникали проблемы с «устройством», которое я построил, работающим под управлением Linux, работающим на компактном флэш-устройстве, я не хотел носить CF с использованием свопинга, и для приложения было достаточно памяти.
Большинство этих устройств работало нормально, но на особенно загруженной коробке я столкнулся с проблемой:
ФРАГМЕНТАЦИЯ ПАМЯТИ
Без пространства подкачки память постепенно становилась все более и более фрагментированной, особенно при длительных процессах (хотя у меня было много свободной памяти, все было очень маленьким). Я поместил некоторое пространство подкачки и сказал Linux не использовать его, если это не нужно; это решило проблему полностью.
В дополнение ко всему остальному пространство подкачки позволяет перемещать память, дефрагментировать ее. Если у вас есть фрагментированная память, и вам нужен один большой кусок, фрагменты будут заменены; когда они возвращаются обратно, они эффективно дефрагментируются.
Проверьте / proc / buddyinfo - мой прямо сейчас выглядит так:
Числа представляют блоки разных размеров; каждый размер составляет половину размера следующего блока, от 4 МБ блоков слева до 4 КБ справа (то есть 4 МБ, 2 МБ, 1 МБ и т. д.). У недавно загруженной машины должно быть все блоки слева, очень мало справа (= не фрагментировано). Помните также, что один и тот же объем памяти (например, 4 МБ) будет представлен в виде разных чисел в столбцах - 1 блок в крайнем левом столбце, 1024 в крайнем правом столбце.
Память выделяется из пула, который находится как можно правее; например, если вашей программе требуется 12 КБ памяти (за один раз), она извлечет ее из столбца 16 КБ; остаток появится в столбце 4 КБ. Если блоков по 16 КБ нет, то они будут извлечены из блоков по 32 КБ, в результате чего останутся 16 КБ и 4 КБ, и так далее.
Если нет достаточно больших блоков памяти, И у вас есть пространство подкачки, то, например, если вы хотите 16 КБ памяти, он найдет наименее используемый блок 16 КБ (который может, например, содержать используемый блок 4 КБ, доступный блок 4 КБ, и еще 2 использованных блока по 4 КБ), перемещая ИСПОЛЬЗУЕМЫЕ части только для обмена, и выделяя освобожденную память новому приложению.
В коробке, которая рухнула, у меня были сотни тысяч блоков по 4 и 8 Кбайт, и больше ничего.
Как далеко, как я могу сказать (на разбитых машинах!) Ядро будет перемещаться из памяти в своп и своп в память, но никогда не будет перемещаться из памяти в память.
источник
Раздел подкачки имеет большое значение, помимо того, что он просто выступает в роли дополнительного ОЗУ, когда у вас заканчивается.
С одной стороны, Linux использует как можно больше памяти для кэширования файлов и операций ввода-вывода. Если у вас есть какой-то обмен, вы можете обнаружить, что больше памяти уходит на кэширование ввода-вывода и ускорение его (за счет минимизации доступа к диску и уменьшения износа твердотельных накопителей), а не для хранения данных, которые какая-то программа распределила, но использует только один раз каждые 12 часов, что может иметь место для некоторых демонов.
Кроме того, Linux использует оптимистическую стратегию выделения памяти, с помощью которой она позволяет номинально распределять страницы, даже если не уверена, что у них есть реальная память для их заполнения. Это более эффективно, чем правильная проверка и отображение каждого распределения, и обычно не вызывает проблем. Однако эвристика, которую ядро использует для определения целесообразности выделения ресурсов, включает в себя уровень свопа, доступный в системе, поэтому распределения могут быть быстрее, если в системе много свопов, даже если они мало используются.
В совокупности эти факторы заставляют меня поверить в то, что лучше иметь какой-то своп почти на каждой нормальной системе, однако для больших размеров памяти я игнорирую правило ram * 2 и просто ограничиваю свой своп 4-8 ГБ (в зависимости от размера диска ).
источник
Вы никогда не должны иметь размер свопа больше, чем максимальный размер, который вы могли бы вынести, ожидая, когда ядро поменяется местами. в противном случае вы просто создаете новый режим отказа для своей системы (который становится непоправимо заваленным при замене). Обратите внимание, что, несмотря на то, что современные диски способны передавать данные порядка ГБ / с, Linux обычно может перемещать своп только со скоростью, превышающей сотни кБ или, в лучшем случае, несколько МБ в секунду. Такой огромный обмен может сделать вашу систему непригодной для использования в течение нескольких минут, часов или даже дней.
Если у вас достаточно физической памяти для того, что вы делаете, идеальный размер для подкачки - это сопоставить его с количеством «ненужных данных», которые процессы хранят, но никогда не используют. Это, вероятно, в диапазоне от нескольких до нескольких сотен мегабайт. Эта стратегия позволяет использовать всю физическую память для кэширования полезной информации, а не в качестве постоянного хранилища данных, которые, вероятно, никогда не будут использоваться снова.
Если у вас недостаточно физической памяти, вам нужно оценить, можете ли вы терпеть серьезное замедление из-за сильной перестановки. Если это так, может иметь смысл до 1-2 ГБ подкачки , и, возможно, до 4 ГБ, если у вас очень быстрые диски. Но более того, это только ухудшит режимы сбоя в вашей системе, и вам следует подумать о том, чтобы просто покупать больше оперативной памяти.
источник
Только если вы хотите иметь возможность переключаться в спящий режим для замены (эта функция также называется «приостановить на диск» и включает в себя сохранение всего содержимого оперативной памяти и отключение питания). Обычно это используется только на ноутбуках и других мобильных устройствах, так что это зависит.
источник
Нет универсального и четкого ответа, потому что это зависит от задачи, которую вы собираетесь выполнить. Если вы собираетесь запускать серверы БД, HTTP, виртуализации или кэширования, вы никогда не должны разрешать какой-либо обмен, независимо от количества оперативной памяти. Если у вас есть настольный компьютер или хост со смешанными задачами, и у вас есть 16 ГБ быстрой оперативной памяти - посмотрите здесь: zRam
источник
Невозможно определить, нужно ли вам пространство подкачки или нет, единственный известный нам параметр - это объем установленной оперативной памяти.
В любом случае, существует распространенное заблуждение, что наличие пространства подкачки негативно влияет на производительность системы. Это неверно Пока у вас достаточно оперативной памяти, наличие области подкачки независимо от ее размера никак не влияет на производительность. На производительность влияет нехватка оперативной памяти и эффективное использование пространства подкачки.
Случай 1: Если у вас нет пространства подкачки и вам не хватает оперативной памяти, ядро Linux выберет один или несколько процессов, которые оно считает хорошими кандидатами, и уничтожит их.
Случай 2: Если у вас есть место подкачки и не хватает оперативной памяти, ядро выберет менее использованные страницы памяти и поместит их в область подкачки для освобождения оперативной памяти. Это замедлит работу системы, но иначе ваши приложения не будут затронуты.
Я всегда предпочитаю случай 2, потому что мне неудобно терять части или всю мою работу, потому что ядро считает, что мои приложения стоит убивать. Более того, при текущем размере среднего диска в диапазоне TB резервирование нескольких процентов для подкачки не должно быть проблемой.
источник
Мое правило применять своп в любой системе - иметь ответ на этот вопрос:
Когда я получаю ответ на эту информацию, я соответствующим образом измеряю систему. В предыдущие годы я использовал эмпирическое правило от Sun Microsystem. До 16 ГБ вдвое больше оперативной памяти для SWAP, от 16 ГБ до такого же объема. Но с другой стороны, если у вас достаточно оперативной памяти, а ваши приложения принудительно не используют SWAP, вы можете опустить swap. Если вам нужно просто поставить новый диск или лун и настроить SWAP. Правило Sun применялось главным образом потому, что на Solaris в случае «паники ядра» память была бы полностью выгружена для обмена для дальнейшего анализа.
источник
Обмен необходим, если у вас недостаточно оперативной памяти для запуска всех ваших программ.
Вы говорите, что не делаете ничего, что требует много оперативной памяти. Итак, у вас достаточно оперативной памяти.
Тогда вам не нужно пространство подкачки.
Но если вы думаете, что в какой-то момент, несмотря на то, что вы подразумеваете в своем вопросе, ваши программы будут использовать, скажем, более половины (или две трети) вашей оперативной памяти (эмпирическое правило), тогда, пожалуйста, прочитайте другую «про-своп» ответы. Вам не понадобится своп, но это может повысить производительность вашей системы.
источник
Краткий ответ:
Да, вам всегда нужен своп, просто в маловероятном случае, когда приложение даже не отображает память, а отображает виртуальную память напрямую.
Установите свой файл подкачки на:
RAM+round(sqrt(RAM))
если вы используете спящий режимround(sqrt(RAM))
если ты неУстановите
swappiness
на 10 на рабочем столе, но не на сервере!Длинный ответ:
В прошлом:
Эмпирическое правило, используемое в течение последних 25 лет, было минимум 1xRAM и максимум 2xRAM, так что это то, что вы увидите в кавычках все время.
Этот минимум был заложен еще в каменном веке,
когда я был подростком, а динозавры все еще бродили по Земле, ипотому что ОЗУ было слишком дорого, и вам совершенно необходимо было это пространство подкачки, чтобы иметь возможность что-либо сделать.Максимум был установлен в то время из-за уменьшения отдачи: слишком медленно менять объем памяти, поскольку доступ к жестким дискам в 1000 раз медленнее, чем объем оперативной памяти: хорошо в чрезвычайной ситуации, но не очень хорошо для повседневного использования! В то время, когда вам не хватило места подкачки, пришло время добавить больше оперативной памяти! (что все еще верно сегодня).
В настоящее время:
Если вы не используете спящий режим и ваша память превышает 1GByte новое правило заключается в том ,
round(sqrt(RAM))
гдеRAM
, очевидно , ваш размер ОЗУ в ГБ.Если вы используете спящий режим, вам нужно иметь возможность поменять весь объем ОЗУ + уже перенесенную ОЗУ на диск, поэтому формула будет выглядеть так:
RAM+round(sqrt(RAM))
Правило уменьшения отдачи остается в силе и сегодня для максимума, но если вы не протестируете свое фактическое использование, использование 2xRAM - это просто трата дискового пространства , поэтому не используйте максимум, если у вас не заканчивается пространство подкачки с использованием других методологий .
Все это вместе дает следующую таблицу: (последние 3 столбца обозначают пространство подкачки)
Выше просто эмпирическое правило; это не закон гравитации!
Вы можете нарушить это правило (в отличие от закона гравитации), если ваш конкретный вариант использования отличается!
Совет для профессионалов: всегда выделяйте SWAP в начале жесткого диска, поскольку головки должны меньше перемещаться внутри диска.
Да: на SSD больше не имеет значения, где вы располагаете область подкачки, поскольку они используют квантовое туннелирование вместо движущихся головок, а современные SSD используют все свои ячейки памяти (даже нераспределенное пространство) для предотвращения квантовой деградации.
Как проверить, отличается ли ваше использование swap от «общего» правила:
Просто выполните:
который выдаст вам список всех запущенных программ, которые поменялись местами (одна из них использует больше всего пространства подкачки сверху)
Если вы используете больше, чем несколько КБ: измените размер больше, чем минимум, в противном случае, не беспокойтесь ...
Если вы находитесь на сервере, прекратите чтение сейчас: все готово!
Если вы используете клиент для настольного компьютера / ноутбука (не сервер), вы хотите, чтобы ваш графический интерфейс был максимально отзывчивым и менялся только тогда, когда это действительно необходимо . Ubuntu был оптимизирован для ранней замены для использования на сервере, но на вашем клиенте вы хотите, чтобы это огромное необработанное 250-мегапиксельное изображение
gimp
было быстрым , поэтому если вы установитеswappiness
10, то ядро не будет переключаться слишком рано, при этом гарантируя, что это не произойдет. поменять слишком поздно:и добавить:
в конец файла сохраните файл ( Ctrl+ XY+ Enterв nano) и выполните:
чтобы перезагрузить параметр или просто ради старости, воспользуйтесь подходом Window $ и перезагрузите компьютер ... :-)
источник
Компромиссный ответ: это зависит от значения слова «должен».
Вам нужен раздел подкачки в том смысле, что что-то плохое случится, если у вас его нет в описанных вами условиях работы? Нет .
Это мудрое , чтобы иметь раздел подкачки только в случае , если вы случайно нерест армии свиной памяти , так у вас есть шанс , чтобы убить их перед ОЫМИ киллерами ног в? Да.
Если ваша физическая ОЗУ «значительно» превышает объем используемой памяти для всех программ, которые вы будете запускать одновременно, то не будет никакого выигрыша в производительности при использовании свопинга. Если оно превышает, но не «значительно», производительность может быть полезной, если ОС может выгрузить редко используемую память, чтобы сохранить в памяти более часто используемые файлы данных.
В целом, это здорово, что у вас 16 ГБ ОЗУ. Но если у вас также есть диск объемом 1 ТБ, не можете ли вы зарезервировать 16 ГБ для его замены? Это всего лишь 1,5% диска.
источник