Что вам нужно знать о разделе подкачки в Linux

Когда вы устанавливаете Linux, процесс настройки, скорее всего, добавит раздел подкачки на жесткий диск вместе с разделами для самого Linux. Но для чего нужен этот раздел подкачки и действительно ли он необходим?
Также читайте: Нужен ли мне раздел подкачки в Ubuntu? Реалистичный подход
Что такое раздел подкачки?
Когда многозадачная операционная система исчерпывает физическую память, она не может запустить новые процессы или выделить больше памяти для существующих процессов. Для решения этой проблемы специальный блок пространства на локальном носителе (часто на жестком диске) отводится для временного хранения процессов, которые в данный момент не работают. Операционная система “перемещает” неактивный процесс из памяти на жесткий диск. Это освобождает память для новой работы. Когда неактивный процесс снова становится активным, он будет возвращен из локального хранилища в память. Эта процедура называется свопом.
На самом деле нужен ли раздел подкачки?
Является ли раздел подкачки технически необходимым? Нет. Linux может работать без него, и в некоторых ситуациях, например, встраиваемых решениях, Linux может работать без свопа. Если операционная система оказывается в ситуации, когда у нее недостаточно памяти, она «паникует» и останавливается. Если физической ОЗУ достаточно, машина будет работать без каких-либо проблем.
Является ли раздел подкачки практически необходимым? Да. Хотя своп замедляет работу компьютера (поскольку чтение и запись на жесткий диск намного медленнее, чем доступ к ОЗУ) и наличие большего физического объема памяти является лучшим решением для избежания свопа, существуют легитимные ситуации, когда своп желателен. Например, во время загрузки системы могут быть процессы, которые работают (и, следовательно, потребляют системную память), но впоследствии остаются неактивными на очень длительное время. Или память, которая выделена, записана и затем больше никогда не используется. В этих ситуациях алгоритм свопа начинает перемещать эту память на жесткий диск, тем самым освобождая ценную системную память. Это на самом деле обеспечивает максимальное количество ОЗУ, доступное в любой момент времени, и таким образом увеличивается производительность.

На машинах, где недостаточно физической ОЗУ, чтобы все помещалось в памяти, использование раздела подкачки является необходимым!
Для полноты картины стоит упомянуть, что в Linux также есть подсистема под названием Out-Of-Memory Killer (OOM), которая, вместо того чтобы останавливать ядро при исчерпании памяти, начинает завершать процессы для освобождения ресурсов. Ее действия можно настроить.
Сколько пространства для свопа мне выделить?
Абсолютного правила нет, и поскольку место на жестком диске стоит недорого (доллар за гигабайт), лучше выделить слишком много, чем слишком мало места. Как правило, у вас должно быть в два или три раза больше пространства для свопа, чем физической памяти.
Добавление свопа без расширения раздела подкачки
Существует два способа добавить пространство для свопа в систему, не изменяя существующий раздел подкачки. Один из способов — использовать раздел подкачки на другом диске, другой — использовать файл подкачки.
Чтобы использовать другой жесткий диск, создайте раздел типа “Linux swap” (код 82), затем выполните команду “mkswap” для подготовки пространства подкачки:
mkswap /dev/sdb2Где /dev/sdb2 — это имя созданного вами раздела. Чтобы сразу использовать пространство подкачки, выполните команду “swapon”:
swapon /dev/sdb2Используйте “swapon -s”, чтобы получить список текущих используемых пространств подкачки. Чтобы навсегда добавить пространство подкачки в систему, вам нужно отредактировать файл /etc/fstab и добавить строчку, похожую на следующую:
/dev/sdb2 none swap sw 00Если ваша система использует уникальные идентификаторы для именования дисков, используйте команду blkid, чтобы получить список идентификаторов устройств. Строка для монтирования пространства подкачки в /etc/fstab будет выглядеть примерно так:
UUID=036da155-1ea1-4392-b8d4-700f65aa1ead none swap sw 00Чтобы использовать файл для свопа, создайте большой пустой файл (с помощью dd) в файловой системе, которую вы хотите использовать для свопа. Например, чтобы создать файл размером 1 ГБ, введите:
dd if=/dev/zero of=/store/swapfile bs=1024 count=1048576Где /store/swapfile — это путь к файлу свопа в желаемой файловой системе.
Как и в случае с дополнительным разделом подкачки, файл теперь нужно подготовить с помощью mkswap, а затем использовать с помощью swapon. Его также нужно добавить в файл /etc/fstab. Процедура такая же, как и выше, но вам нужно использовать /store/swapfile, а не /dev/sdb2 в качестве параметра пространства подкачки.
Swappiness
Ядро Linux можно настроить, чтобы определить, насколько агрессивно оно должно пытаться свопить процессы из памяти. Эта тенденция контролируется переменной ядра под названием swappiness. Значение swappiness в 0 означает, что ядро будет избегать свопа насколько возможно, в то время как 100 означает, что ядро будет агрессивно использовать пространство подкачки. Значение по умолчанию для многих дистрибутивов Linux составляет 60. Значение можно изменить динамически с помощью следующей команды:
sudo sysctl vm.swappiness=10Чтобы установить значение навсегда, нужно изменить (или добавить, если оно не существует) переменную vm.swappiness в файле /etc/sysctl.conf.
Дайте нам знать, если у вас есть вопросы о свопе в Linux.
Эта статья была впервые опубликована в декабре 2013 года и обновлена в августе 2020 года.