Раздел подкачки – это одна из тех классических функций, которые уже давно являются частью Linux. Почти в каждом руководстве по установке Linux есть шаг, на котором вам предлагают создать такой раздел. И давайте будем честными – большинство из нас делают это просто по привычке, а не потому, что задумываются о том, нужен ли он нам.
В начале 2000-х годов все было иначе. Мы работали с системами, которые имели 64 или 128 МБ оперативной памяти (возможно, 256 МБ, если у вас был дорогой коомпьютер), работающими на частоте 133 МГц и с HDD дисками SATA со скоростью 5400 об/мин. В те времена наличие раздела подкачки было не обязательным, а необходимым.
Но вот прошло 20 лет и ситуация полностью изменилась. Сегодня даже средние ноутбуки и настольные компьютеры оснащаются 16 или 32 ГБ оперативной памяти, работающей на частоте 3200 МГц и выше. А энтузиасты аппаратного обеспечения могут похвастаться установками с 64 или даже 128 ГБ оперативной памяти, часто разогнанной до невероятных скоростей.
Системы хранения данных также претерпели изменения – накопители NVME в значительной степени заменили устаревшие жесткие диски в настольных системах, обеспечивая молниеносную скорость чтения и записи в тысячи мегабайт в секунду.
Зачем же все это вспоминать? Потому что это напрямую влияет на то, нужен ли вам раздел подкачки в современной системе Linux. Или, если пойти еще дальше, может ли он на самом деле не помогать, а вредить производительности системы?
Именно это я и хочу выяснить в этой статье. Охватывая все важные детали, я постараюсь изложить их ясно и доступно – особенно для тех, кто не очень разбирается в технике. Мы рассмотрим, что такое раздел подкачки, для чего он нужен и в чем его недостатки. Оставайтесь со мной – это будет достойное чтение.
Что такое Linux Swap?
swap – это специальная область на вашем устройстве хранения данных, например, раздел или файл, которую ядро Linux использует в качестве виртуальной памяти, когда оперативная память системы переполнена. Вы можете думать о ней как об аварийном переполнении памяти. Когда реальная (физическая) память операционной системы становится очень востребованной, данные могут быть временно перемещены из оперативной памяти в своп.
Цель – освободить место в оперативной памяти для активных процессов. Однако за это приходится платить, и в данном случае своп работает гораздо медленнее, чем системная память, поскольку располагается на диске. В отличие от операций с оперативной памятью, которые происходят практически мгновенно, все, что связано с подкачкой, происходит медленнее – ведь это чтение с диска и запись на него. А чтобы было еще понятнее, я буду представлять все так:
| Тип хранения | Время отклика |
|---|---|
| RAM | ~10-100 наносекунд |
| SSD | ~50-100 микросекунд |
| HDD | ~5-15 миллисекунд |
Другими словами, своп в тысячи раз медленнее оперативной памяти, особенно на жестких дисках. На SSD ситуация лучше, но все равно заметно медленнее, чем в оперативной памяти.
Теперь еще один интересный момент: как ядро решает, какие процессы переместить из системной памяти в swap? Ну, во-первых, оно принимает это решение динамически, используя сложный алгоритм замены страниц. Если есть участки памяти, которые процесс выделяет, но практически не трогает, ядро может поменять их местами, чтобы освободить пространство для более часто используемых данных.
Кроме того, важно понимать, что ядро не меняет местами целые процессы, а перемещает только менее часто используемые данные (страницы). Можете ли вы управлять этим? Конечно, это же Linux.
Опция ядра swappiness (параметр подсистемы sysctl в диапазоне от 0 до 100) управляет тем, насколько активно ядро предпочитает обмениваться страницами. Меньшее значение говорит ядру избегать свопинга, когда это возможно, в то время как большее значение позволяет более активный свопинг. Значение по умолчанию равно 60, и вы можете проверить его, используя:
cat /proc/sys/vm/swappiness
Другими словами, низкое значение (например, 10) означает, что система предпочитает держать вещи в оперативной памяти как можно дольше. Напротив, высокое значение (например, 80 или 100) говорит ядру о необходимости начать свопинг раньше, чтобы освободить больше кэша.
Конечно, вы можете временно изменить это поведение, выполнив sudo sysctl -w vm.swappiness=X, или сделать его постоянным, отредактировав файл sysctl.conf, включив в него vm.swappiness=X, а затем перезагрузив его с помощью sudo sysctl -p.
Установив swappiness=0 это фактически говорит системе не подменять память приложений на диск, помогая вместо этого работать в оперативной памяти. В любой другой ситуации, даже при наличии свободной оперативной памяти, ядро Linux будет продолжать перемещать редко используемые страницы памяти в пространство подкачки.
Тем не менее, я не рекомендую вносить какие-либо изменения, если вы не уверены в том, что делаете.
Что произойдет, если какой-нибудь процесс вдруг начнет пожирать всю системную память (а вы не используете своп, или он уже заполнен)? Вот тогда все может стать немного некрасиво.
В такой ситуации ядро Linux действует как сторожевой пес – оно без колебаний немедленно убивает процесс, посылая ему сигнал SIGKILL. Неважно, насколько важен процесс для вас или системы – ядро сделает все, что потребуется, чтобы предотвратить полное зависание системы.
И, наконец, очень коротко о том, что очень важно – о типах свопа. В Linux можно использовать два вида:
- Swap Partition: Исторически распространенный метод. Представляет собой отдельный выделенный раздел на диске, предназначенный исключительно для подкачки.
- Swap File: Обычный файл на существующем разделе, настроенный так, чтобы ядро воспринимало его как место подкачки. Легче изменить размер, если в будущем вам понадобится больше (или меньше) места подкачки. Часто используется в современных системах, особенно установленных на SSD или в виртуальных машинах.
Теперь, когда вы хорошо понимаете, что делает swap в Linux и как ядро управляет им, давайте перейдем к основной теме статьи.
Действительно ли вам нужен своп в Linux?
Ответ зависит от нескольких ключевых моментов. Прежде всего, сколько оперативной памяти у вашей системы? Затем, готовы ли вы отказаться от «страховочной сетки», которую обеспечивает своп, в обмен на немного лучшую производительность? И наконец, готовы ли вы отказаться от возможности перевести компьютер в спящий режим? Давайте разберемся в этом подробнее.
Если вы используете Linux-систему с большим объемом памяти – скажем, 32, 64 или даже 128 ГБ – и ищете краткий ответ, то да, вы можете отказаться от использования свопа. Это означает, что ваша система может работать немного быстрее, потому что ядро работает полностью в оперативной памяти, а не записывает данные на диск.
Конечно, есть несколько моментов, о которых следует помнить, прежде чем идти по этому пути. Самое главное – знать, сколько памяти обычно использует ваша система. Например, если у вас 32 ГБ оперативной памяти, но часто используется более 20 ГБ – возможно, из-за запуска виртуальных машин, использования требовательных к памяти программ или чего-то подобного, – то отказ от свопа может оказаться не самой лучшей идеей.
Если ваша система часто выглядит так, как показано на скриншоте ниже, то включение подкачки просто необходимо.

Но если все выглядит именно так, вы можете смело отказаться от использования свопа для повышения производительности.

Вы также можете учесть, что Linux позволяет использовать избыточную память (memory overcommit) – политику управления памятью, которая позволяет системе выделять приложениям больше памяти, чем физически доступно. Обычно это нормально, потому что не все процессы используют всю выделенную им память сразу. Однако в крайних случаях, если реальное использование превышает физический объем оперативной памяти, система может столкнуться с ситуацией нехватки памяти (OOM).
Следующий момент – гибернация. Эта функция обычно не работает без настроенного свопа. Почему? Потому что, когда система впадает в спячку, все состояние оперативной памяти копируется в swap. Подумайте об этом как о создании снимка оперативной памяти – он захватывает все процессы, запущенные в системе Linux в данный момент.
Однако следует учесть следующее: если вы собираетесь использовать гибернацию на системах с большим объемом оперативной памяти, вам нужен раздел или файл подкачки размером не менее объема оперативной памяти. Другими словами, если у вас 64 ГБ оперативной памяти, то для работы гибернации вам также потребуется не менее 64 ГБ пространства подкачки (в виде раздела или файла). Это довольно значительный кусок дискового пространства, от которого придется отказаться. Так что стоит ли использовать гибернацию, зависит от ваших потребностей – решать только вам.
Износ твердотельных накопителей – еще один фактор, который можно принять во внимание. Хотя современные SSD (особенно NVMe) обладают довольно высокой выносливостью, постоянная замена накопителя теоретически может добавить ему лишних циклов записи. Обычно это не является критичной проблемой при среднем использовании, но это фактор, который следует иметь в виду.
Более того, некоторые рабочие нагрузки, чувствительные к задержкам или реальному времени (обработка/поток аудио/видео в реальном времени, игровые системы и т. д.), могут почувствовать замедление, если ядро решит выгрузить какую-либо часть этих процессов на диск. Хотя Linux старается держать «горячие данные» в оперативной памяти, в некоторых крайних случаях (особенно при неправильной настройке свопинга) может наблюдаться падение производительности.
Заключение и практические рекомендации
Да, я знаю – есть над чем подумать, принимая решение о том, стоит ли использовать своппинг или вообще отказаться от него. Как и во многих других случаях, лучшее решение обычно сводится к поиску хорошего баланса. Итак, вот мои рекомендации.
Если в вашей системе установлен небольшой объем памяти – например, 8 или 16 ГБ, – я настоятельно рекомендую не отключать своп.
Однако если в вашей системе 32 ГБ оперативной памяти или больше, мне очень нравится и я регулярно использую такой подход: вместо выделенного раздела подкачки используйте файл подкачки размером 4 ГБ, а значение swappiness установите довольно низким – около 10 или 20 максимум. Такой подход имеет ряд преимуществ.
Во-первых, использование файла подкачки гораздо более гибкое. С помощью пары команд вы можете изменить его размер на лету всего за несколько секунд. Сравните это с изменением размера раздела подкачки – это не только займет больше времени, но и даже небольшая ошибка может сломать всю систему.
Более того, использование файла подкачки с низким значением swappiness даёт вам лучшее из двух миров: вы получаете защиту, которая помогает предотвратить проблемы с нехваткой памяти, и в то же время ваша система работает лучше, потому что ядро Linux не переходит к использованию swap так быстро, как это происходит обычно.
И наконец, если вы работаете с системой, чувствительной к задержкам или нагрузкам реального времени, где даже потеря микросекунды является проблемой – смело отключайте своп. Просто осознайте риски такого выбора, а затем наслаждайтесь максимальной скоростью, где вас ничто не будет тормозить.
Надеюсь, эта статья была вам полезна. Мне интересно узнать ваши мысли по этому поводу, так что не стесняйтесь делиться ими в комментариях. До следующего раза, друзья!


Комментарии (0)