Назад | Перейти на главную страницу

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

Многие говорят, что если у вас 2 ГБ ОЗУ, вам следует настроить своп на 2 ГБ или более. FWIK для гибернации может потребоваться подкачка того же размера для сохранения памяти при отключении питания, но в целом, если у вас большая оперативная память, вам даже не нужна подкачка, не так ли?

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

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

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

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

Если вы чувствуете, что что-то слишком часто выгружается на диск, вы можете настроить свой обмен быть менее агрессивным.

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

Со временем упрощения превратились в фольклор и «правила», которым нужно следовать, а относительные различия в стоимости и времени ожидания между ОЗУ и диском постепенно изменились. Сегодня большинство этих правил в лучшем случае бессмысленно.

Однако обратите внимание, что вопрос не в том, «Я могу хранить все свои приложения в ОЗУ, мне не нужна свопинг». Возникает вопрос: «У меня x RAM. Как мне лучше всего использовать ее для работы приложений, спящих приложений и буферизации дискового ввода-вывода?».

Вопрос OP помечен как «Linux», и я не так много знаю об управлении виртуальной памятью Linux (я знаю больше о Windows и FreeBSD), поэтому я не буду предлагать здесь предлагаемые новые рекомендации. Хорошее место для начала чтения - это ветка обсуждения между разработчиками ядра Linux 2.6 про параметр настройки ВМ "подкачка".

когда вы устанавливаете Linux без подкачки, программа установки предупредит вас, что у вас не было монтирования подкачки.

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

Нет, он мне просто не нужен [своп], потому что у меня достаточно ОЗУ, верно?

Неправильно. Или с поправкой на небольшое количество «необходимости», вам, строго говоря, в этом случае не требуется подкачка, но ваш компьютер будет с ней быстрее. Без подкачки все ваши программы находятся в ОЗУ, включая те, которые неактивны и не будут выполняться в ближайшее время. С помощью подкачки неактивные программы могут быть заменены, а физическая оперативная память может использоваться для более продуктивных задач - в основном для буферизации диска, чтобы замаскировать, насколько медленным является дисковый ввод-вывод (включая SSD).

Если вы хотите контролировать балансировку ядер между выделением дисковых буферов и заменой кода приложения, то вам нужен параметр настройки "swappiness", обсуждение, на которое я ссылался выше.

Различные правила размера подкачки («у вас должно быть столько же подкачки, сколько у вас RAM», «у вас должно быть в два раза больше подкачки, чем у вас RAM») имели больше смысла, когда у нас не было такого безумного количества RAM, которое мы имеем сегодня.

На мой взгляд, при типичном использовании слишком большой объем подкачки совершенно не нужен. Если ваш типичный образец использования соответствует типичному использованию настольного компьютера - просмотр веб-страниц, прослушивание музыки, просмотр фильмов и т. Д., 2 ГБ ОЗУ должно быть более чем достаточно. С другой стороны, если вы время от времени делаете что-то, что требует больших затрат памяти, например, рендеринг очень сложных 3D-сцен, неплохо было бы немного поменять местами. К счастью, ядро ​​Linux поддерживает обмен на основе файлов, поэтому вы можете настроить большой объем подкачки по запросу без необходимости переразбивки, если по какой-либо причине потребуется своп. Однако я не пробовал выходить из спящего режима с помощью файлового свопа.

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

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

Вот несколько факторов, которые влияют на практическое правило «максимальный размер физической ОЗУ, поддерживаемой материнской платой, +1 МБ».

Полные дампы ядра. Если подкачки недостаточно для обработки полного дампа ядра, возможно, вы не сможете диагностировать определенные системные паники.

Некоторые операционные системы используют пространство подкачки, чтобы выгрузить свое ядро ​​при панике системы. Вы (или разработчики ОС) можете использовать этот дамп ядра, чтобы понять, почему. Большинство современных операционных систем делают «мини-дамп», который значительно меньше общего объема ОЗУ ... но если проблема сложная, может потребоваться полный дамп ядра.

Метаданные дампа ядра. Также иногда вместе с дампом ядра присутствует небольшой объем метаданных. Добавление дополнительного 1M к размеру свопа покроет это.

Предварительная подготовка к обновлению ОЗУ. Системы без установленного максимального объема ОЗУ могут быть обновлены в будущем. Настройте своп, чтобы быть готовым к этому, а не пытаться не забыть добавить еще несколько месяцев (или лет) позже.

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

Однако: выделить 2 ГБ из 500 ГБ диска дешевле (полдюжины центов за гигабайт), чем покупать больше оперативной памяти. Разница между «достаточно большим» и «слишком большим» заключается в том, что архитектура больше не поддерживает это.

Обратите внимание, что начиная с ядра 2.6 вы также можете использовать swap файл, так что вы можете вообще избежать подкачки, пока не проведете некоторый анализ использования, чтобы его оправдать.

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

В примечаниях к выпуску Ubuntu / Lucid также упоминается об этом, поскольку установщик недостаточно умен, чтобы решить эту проблему самостоятельно.

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