SWAP
SWAP – один из механизмов виртуальной памяти, при котором отдельные фрагменты памяти (обычно неактивные) перемещаются из ОЗУ во вторичное хранилище (отдельный раздел или файл), освобождая ОЗУ для загрузки других активных фрагментов памяти.
Более подробно о механизме своппинга можно прочитать в Википедии.
Дополнительно SWAP используется при организации режима сна (hibernation или suspend to disk). При этом в SWAP сохраняется образ оперативной памяти.
Размещение
SWAP может быть размещен на разделе диска, в файле или в RAM. Исторически в Linux SWAP размещался на разделе, но в современных дистрибутивах производительность SWAP-файла не уступает SWAP-разделу. Однако стандартный установщик Ubuntu (до версии 17.04) не умеет создавать SWAP-файл при установке и выдает предупреждение, если SWAP-раздел не определен при разметке диска. Начиная с версии 17.04, Ubuntu предлагает по умолчанию создавать SWAP в файле (объем определяется как 5% от свободного на диске места, но не более 2 Гб). Использование SWAP-файла имеет некоторые преимущества: он не занимает отдельный раздел, его легко создать, изменить его размер или удалить.
Дополнительно при выборе размещения SWAP нужно учитывать, что не все файловые системы позволяют использовать прямую адресацию блоков SWAP-файла. Так, к примеру, нельзя использовать SWAP в файле на разделе с файловой системой btrfs(по состоянию на середину 2017).
Безопасность
При работе с секретными/зашифрованными данными часть этих данных в процессе работы либо при гибернации может оказаться в SWAP в расшифрованном виде. В таких случаях рекомендуется шифровать не только данные, но и сам SWAP. Однако нужно учитывать, что у режима сна при шифровании SWAP могут возникнуть сложности.
Размер
В Интернете можно найти множество рекомендаций по определению размера SWAP, однако универсального ответа не существует.
При определении размера SWAP следует учесть следующие аспекты:
Каков размер оперативной памяти?
Какие приложения будут использоваться?
Будет ли вестись работа с секретными данными?
Нужен ли режим сна (suspend to disk)?
В зависимости от ответов на эти вопросы рекомендации по размеру SWAP будут значительно различаться.
Для машин с незначительным объемом памяти (меньше 2 Гб) рекомендуется создавать SWAP размером от 1,5 до 2-х размеров оперативной памяти. И стоит попробовать изменять vm.swappiness, но лучше поискать возможность увеличить объем оперативной памяти.
Для машин с объемом памяти 3-4 Гб нужно решить, будет ли использоваться suspend to disk. Если да, то нужно создавать SWAP размером на 10-15% больше размера оперативной памяти. Если же suspend to disk использоваться не будет, то можно создать SWAP небольшого размера (размером от половины до 1 объема оперативной памяти). Можно не создавать SWAP при установке системы, а при необходимости добавить его позже как файл.
На компьютерах с объемами оперативной памяти более 6Gb имеет смысл создать SWAP размером в половину от объема оперативной памяти. При этом, если вы хотите использовать гибернацию, следует оценить загрузку оперативной памяти в процессе работы и задать величину SWAP, исходя из этого. К примеру, если объем оперативной памяти составляет 16 ГБ, а рабочая загрузка не превышает в среднем 5-6 ГБ, величины SWAP-раздела в 8 ГБ вам хватит для гибернации. При таком подходе следует помнить, что при использовании ресурсоёмких программ (рендеринг изображения, компиляция огромных проектов и т.п.) оперативная память может заполняться полностью, а SWAP — использоваться в качестве подкачки. В таких ситуациях размер SWAP нужно выбирать индивидуально.
При работе с секретными (зашифрованными) данными стоит либо шифровать SWAP, либо рассмотреть вариант с отказом от SWAP вовсе (зависит от размера оперативной памяти). Стоит также рассмотреть вариант с шифрованием всего диска.
Создание SWAP на разделе диска
Разобравшись с требованиями к SWAP, можно приступить к его созданию или изменению.
Ядро Linux может работать с несколькими частями SWAP. Поэтому если вы решили, что созданного при установке системы SWAP-раздела недостаточно, то стоит создать дополнительный SWAP (выделить место под раздел или файл). Однако нужно учитывать, что для гибернации нужен непрерывный блок SWAP, который должен иметь размер больший, чем оперативная память.
К примеру, у нас есть раздел /dev/sdc2 (ваше имя раздела может отличаться). Создадим на нем необходимую структуру данных для работы SWAP:
sudo mkswap /dev/sdc2
Подключим раздел как SWAP:
sudo swapon /dev/sdc2
Проверить результат можно, посмотрев на вывод команды
sudo swapon -s
Сделаем автомонтирование SWAP-раздела при запуске системы. Узнаем UUID раздела:
sudo blkid
Теперь пропишем строку в /etc/fstab
echo "UUID= swap swap defaults,pri= 0 0"| sudo tee -a /etc/fstab
SWAP с динамически изменяемым размером
Если вы не хотите думать об объеме SWAP, имеет смысл воспользоваться утилитой swapspace (динамический менеджер подкачки). Эта утилита работает в фоновом режиме и динамически управляет подкачкой. При необходимости swapspace автоматически создаёт дополнительные файлы подкачки требуемого размера. Неиспользуемые файлы подкачки удаляются и не занимают место.
Однако, если вы работаете с секретными документами, не забудьте указать swapspace создавать SWAP-файлы на зашифрованном диске или внутри шифрованного контейнера 1) .
Hibernate (suspend to disk, гибернация)
О настройке режима гибернации можно прочитать здесь.
Параметр vm.swappiness
Основной параметр, влияющий на работу системы со swap, — это vm.swappiness. Очень приблизительно этот параметр можно определить так: он задает процент свободной оперативной памяти, при котором начинается использование подкачки. Более точное определение смысла этой переменной можно уяснить из описания которое было дано в рассылке kernel.org — статья на английском.
Без особой необходимости трогать его не рекомендуется.
Скорректировать значение, применяемое при загрузке системы, можно, указав в файле /etc/sysctl.conf значение vm.swappiness. Пример:
echo "vm.swappiness=30"| sudo tee -a /etc/sysctl.conf
Мгновенно применить эту настройку можно с помощью следующей команды:
# sysctl -f
Актуальное значение, используемое ядром в настоящее время, можно просмотреть или изменить в /proc/sys/vm/swappiness.
# cat /proc/sys/vm/swappiness # echo 10 > /proc/sys/vm/swappiness
Изменения в /proc/sys/vm/swappiness будут сброшены при следующей перезагрузке.
Значение vm.swappiness по умолчанию — 60.
Какое значение выбрать?
Маленькое значение vm.swappiness (минимальное значение: 0) будет заставлять ядро использовать больше оперативной памяти под память процессов (в ущерб буферам и кэшам), тогда как большое значение (максимальное значение: 100) будет выделять больше памяти под кэши и буфера (в ущерб памяти для процессов).
Нужно понимать: ни одно значение vm.swappiness не увеличит волшебным образом производительность компьютера многократно. Урезаете кеши — понижаете отзывчивость системы при работе с файлами, урезаете память процессов — снижаете отзывчивость системы при переключении задач.
Нужное вам значение, скорее всего, стоит подбирать экспериментально.
Помощь
Swap — файл или раздел на жестком диске, который выделяется для освобождения части оперативной памяти за счет перемещения неактивных фрагментов памяти на жесткий диск. Это происходит в случаях сильной загруженности оперативной памяти.
Swap файл подкачки наиболее эффективно работает на SSD дисках, но может быть подключен и на HDD. Виртуальный сервер с файлом подкачки будет работать быстрее.
Создание Swap на Linux/CentOS (VPS KVM)
Подключитесь к серверу по SSH суперпользователем root и выполните команду, которая проверит, используется ли уже файл подкачки или нет:
swapon -s
Если файл подкачки уже есть, то в ответе на команду будет содержаться имя Swap файла. Если в ответе содержатся нули или ответ пустой, то выполните команду, которая создаст Swap:
dd if=/dev/zero of=/swap.file bs=1M count=512 где swap.file - имя файла, count=512 - размер файла (укажите желаемое значение).
Выполните команду, которая запретит вносить правки в этот файл всем, кроме root:
chmod 600 /swap.file
Инициализируйте Swap файла командой:
mkswap /swap.file
Включите созданный файл в автозагрузку — откройте для редактирования файл /etc/fstab и внесите строку:
/swap.file swap swap defaults 0 0
Выполните команду для включения Swap файла или перезагрузите сервер.
swapon /swap.file
Можно подключить Swap без перезагрузки, для этого выполните команду:
swapon /swap.file
Проверьте, подключен ли Swap командой:
free -m или swapon -s
Создание Swap на FreeBSD (VPS KVM)
Создайте файл подкачки командой:
dd if=/dev/zero of=/swap.file bs=1M count=512, где swap.file - имя файла, count=512 - размер файла (укажите желаемое значение).
Выполните команду, которая запретит вносить правки в этот файл всем, кроме root:
chmod 600 /swap.file
Откройте для редактирования файл /etc/rc.conf и добавьте строку:
swapfile=/swap.file
Перезагрузите сервер или выполните команды включения Swap файла:
mdconfig -a -t vnode -f /swap.file -u 0 swapon /dev/md0
Проверьте наличие Swap командой:
В ответе на команду должен содержаться размер файла подкачки: свободное место и занятое.
49. Виртуальная память, swap

Представьте себе, что вы находитесь в библиотеке. Полки — это ваш жёсткий диск, книги — это файлы, а вы — ядро операционной системы. Перед вами есть стол — это оперативная память. Ваша работа — читать книги. Только, как и в реальной жизни, вы не можете читать книгу целиком — вы читаете страницами. Когда вы берёте из полки книжку, вы копируете нужные страницы и кладёте их на стол.
Т.е. на столе у вас разложены страницы. И вы, как Цезарь, многозадачны, читаете множество книг одновременно. Когда стол большой, т.е. когда много оперативки — всё хорошо, вы можете разместить кучу страниц. Но большой стол стоит больших денег, поэтому обычно вы берёте средненький стол, рассчитанный под ваши задачи, ну и чтобы оставалось немного свободного места.
Есть определённые книжки, которые вам нужны не постоянно, но вы с ними работаете относительно часто. Скажем, вы читаете книжку, там много неизвестных терминов и вам периодически нужен словарь. Не то чтобы он нужен всегда на столе, но если у вас есть немного места, то почему бы временно не положить словарь на стол? Чтобы постоянно не тратить время на копирование словаря. А если понадобится место под другие книжки — ничего, уберёте словарь.

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

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

А касательно записи, представьте, что вам нужно что-то дописать в словаре. Если один раз — написали на листе, отнесли и добавили в книгу. А если вы часто что-то пишете? Вместо того, чтобы после каждой строчки относить и добавлять в книгу, вы можете подержать страницу пока на столе — а может ещё что-то понадобится дописать? Когда вы изменяете страницу в оперативке, у неё появляется метка, что она грязная — dirty page. И уже потом, скажем, раз в 5 секунд, вы относите грязные листы и добавляете в книги, т.е. сохраняете изменённые данные с оперативки на диск.

Т.е. данные не сразу пишутся на диск, а некоторое время хранятся в оперативке, в кэше. И чтобы вручную синхронизировать изменённые в оперативке данные с диском, надо выполнить команду sync. Размер грязных страниц можно посмотреть в /proc/meminfo:
grep Dirty /proc/meminfo
И вот небольшой тест с созданием файла. Сначала делаем sync, чтобы убедиться, что все данные записаны на диск. Затем с помощью dd генерируем файл размером в 100 мегабайт. Сразу после этого смотрим размер грязных страниц — 100 мб. Это означает, что файл пока что в оперативке, а не на диске. Делаем sync и снова проверяем — теперь всё записалось на диск.
Такой режим кэша, когда данные сначала сохраняются в оперативке, а потом пишутся на диск, называется writeback. Но если вдруг компьютер потеряет питание и информация не успеет синхронизироваться, грязные страницы пропадут. Соответственно, есть риск потерять данные. Т.е. такой режим очень быстрый, но не самый надёжный. Также есть режим кэша writethrough — когда данные пишутся одновременно и на диск. Т.е. условно при каждом изменении страницы вы относите страницу в книгу на полку. Так всё работает чуть медленнее, зато при внезапном выключении вы ничего не теряете. Есть и другие режимы, но это два основных.

Память можно поделить на 4 типа по двум категориям. Она может быть личной и общей — т.е. доступна только для одного процесса или нескольких. А также может быть анонимной и основанной на файле, т.е. файловой. File-backed — это когда вы загружаете файл в оперативку — взяли книжку и положили листы на стол. А анонимная — это когда процесс просит вас выделить ему место, не привязанное к какому-либо файлу. Скажем, не книжку взять, а просто чистый A4 положить. Процесс там будет хранить какие-то данные во время работы. Таким образом получается 4 типа — anonymous private, anonymous shared, file-backed private и file-backed shared.
И теперь представим, что у вас на столе осталось мало места, а вам надо ещё добавить листов, т.е. мало оперативки осталось. Первым делом вы поищете листы, которые вам больше не нужны — т.е. освободите память, которую использовали завершённые процессы. Но этого может не хватить. Тогда в расход пойдут старые листы, которые как бы и нужны, но используются очень редко и основаны на книжках — т.е. файловые. Вы избавитесь от этих страниц, а если вдруг они потом понадобятся — то опять возьмёте их из книг, так как вы знаете, что это за файл. А вот от анонимных листов избавиться не получится. То что там написано — нет ни в одной книге. Поэтому выкидывать эти листы не вариант.
И тут вам на помощь приходят ящички стола. Туда вы можете сложить старые листы, которые сейчас на столе не нужны, а при необходимости оттуда достать. Это ваш swap — место на диске, выделенное для отгрузки редкоиспользуемых страниц с оперативки. Этот механизм, когда вы что-то кладёте в swap или достаёте оттуда называется подкачка страниц. В качестве места может быть как отдельный файл на файловой системе, так и целый раздел, в зависимости от этого место может называться файл подкачки или раздел подкачки.
Т.е. swap не выступает продолжением оперативки, он выступает временным хранилищем для редкоиспользуемых страниц. И не обязательно, чтобы он использовался только когда оперативки не хватает. Иногда полезней использовать оперативку для кэша, чем для редкоиспользуемых страниц.
Чтобы вся эта подкачка работала для программ прозрачно, чтобы разработчики сами не заботились о swap-е, ядро ОС выделяет процессам вместо реальной памяти виртуальную, которая может быть больше оперативки. Виртуальная память состоит из оперативки и swap-а. Т.е. условно, книжка может предварительно попросить места под 100 листов на столе. И пусть у вас стол будет поменьше, но, если что, редкоиспользуемые страницы вы добавите в ящик.

Также swap используется для гибернации. Это как спящий режим, только, если в спящем режиме у вас всё оборудование начинает меньше потреблять энергии, но всё ещё потребляет по чуть-чуть, то при гибернации все данные из оперативки сохраняются в swap-е, а компьютер полностью выключается, т.е. ничего не потребляет. А при запуске всё из swap-а возвращается в оперативку. Это позволяет больше сэкономить энергии, но запуск чуть дольше, чем при спящем режиме.
Пара популярных вопросов:
- нужен ли swap, если много оперативки?
Если большой излишек оперативки, т.е. много много оперативки не тратится — то можно обойтись и без swap-а. С другой стороны swap даже на таких системах может пригодится — будет чуть больше места для кэша.
- стоит ли делать swap на ssd?
С одной стороны, из-за скорости подкачка страниц будет быстрее, что увеличит производительность. С другой стороны, у ssd есть ограниченное число циклов перезаписи, и использование swap-а активно их расходует. Но, если у вас оперативки достаточно — подкачка будет происходить довольно редко. Ну и даже с относительно средним использованием, современные SSD проживут довольно долго, а их цена не такая кусачая. Точные сроки никто назвать не сможет, так как это индивидуально для конкретной системы и SSD.
- раздел подкачки или файл подкачки — что лучше?
Раньше из-за прослойки с файловой системой swap-файл был чуть помедленнее, но ядро после версии 2.6 работает с блоками swap-файла минуя файловую систему. С одной стороны пропала разница в производительности с разделом подкачки, с другой — нельзя просто взять и переместить файл подкачки на другую файловую систему, swap надо предварительно отключить. Но файл обычно легче увеличить, чем раздел, хотя если swap-раздел на LVM и есть свободное место — тоже несложно.
- сколько места выделять под swap?

Тут немного индивидуально — зависит от софта, который будет использоваться. Какие-то программы требуют больше swap-а, какие-то меньше. Но есть общие рекомендации — если у вас оперативки меньше 2 гигабайт — то под свап стоит выделить места в два раза больше, чем в оперативке. Если ещё и предполагаете использование гибернации — то в 3 раза больше. Ну и дальше по табличке.

Хорошо, что такое swap и для чего он нужен мы разобрались. Насколько используется swap мы можем увидеть с помощью утилиты free, либо утилиты swapon. Как видно, у нас для swap-а используется отдельный раздел, а точнее lvm:
sudo blkid | grep swap
Его размер — 2 гига, а используется небольшой процент. Кроме того видно, что у swap-а есть приоритет. Мы можем на одной системе сделать несколько swap разделов и файлов. Т.е. сначала будем складывать страницы в ящичек с высоким приоритетом, а если он забьётся — в ящик с приоритетом пониже. Скажем, мы можем выделить под swap место как на ssd, так и на жёстком диске. Также можно приоритет поставить одинаковым — тогда одновременно будут использоваться оба swap-а.

Попробуем добавить файл подкачки и перевести наш swap с раздела на файл. Для начала создадим файл размером в 2 гигабайта, для этого используем команду dd:
dd if=/dev/zero of=/swapfile bs=1K count=2M
Здесь bs — размер блока — 1Килобайт; 2M — 2 миллиона. Т.е. 2 миллиона блоков по 1 килобайту — получается 2 гигабайта. Помните, как после создания раздела мы записывали на него файловую систему — mkfs? Для swap-а мы делаем что-то похожее:
sudo mkswap /swapfile
Был бы раздел — указали бы название раздела. Команда вывела нам предупреждение, что у файла не безопасные права — 644, и рекомендуется выставить 600. Что ж, сделаем:
sudo chmod 600 /swapfile

И дальше, по аналогии того, как мы монтировали файловую систему, мы должны активировать swap, заодно зададим ему приоритет повыше:
sudo swapon -p 1 /swapfile
После этого посмотрим активные swap-ы — swapon. В списке появился наш файл.

Но, как и с файловыми системами, чтобы swap работал после перезагрузки, надо его добавить в fstab:
sudo nano /etc/fstab
Пропишем наш swap-file, а заодно закомментируем старый раздел.

Чтобы без перезагрузки избавиться от swap раздела, используем команду swapoff:
sudo swapoff /dev/dm-1 swapon
Таким образом мы убираем все страницы из раздела обратно в память или на другой swap.

Также стоит упомянуть такой параметр, как swappiness:
sysctl vm.swappiness
Этот параметр определяет, насколько сильно будет задействован swap. Тут значения от 0 до 100 — это баланс между кэшем и выгрузкой анонимных страниц. При низких значениях swap будет стараться держать анонимные страницы как можно дольше в памяти, при этом чаще выгружая кэш. Это может быть полезно, если программа сама управляет своим кэшем, а не отдаёт это ядру операционной системы. Например, так делают системы управления базами данных. Если же значение ближе к 100, то система агрессивнее будет заниматься подкачкой — перемещать анонимные страницы в swap и обратно. Это обычно системы, где программы сами не кэшируют, но кэш важнее. Например, частая работа с данными, при этом производительностью программ можно немного пожертвовать.

Если мы хотим поменять это значение и чтобы оно оставалось после перезагрузки, нужно создать файл или подредактировать существующий в директории /etc/sysctl.d/ , прописав в нём vm.swappiness и нужное значение, после чего применить:
sudo sysctl -p

Также стоит упомянуть, что существует модуль ядра zswap. Он создаёт в оперативной памяти сжатую область, где и хранится swap. Это позволяет подкачке меньше использовать диск и работать быстрее. Но если места в оперативке нет — данные всё же выгружаются на swap, который на диске.
Подведём итоги. Сегодня мы с вами разобрали механизмы работы виртуальной памяти — что такое кэш, что такое грязные страницы, анонимные страницы, разобрались, зачем нужна подкачка, как она работает, как создавать раздел или файл подкачки и как это всё настраивать. Со swap-ом работают относительно редко — один раз настраивается во время установки системы, а больше делать ничего и не надо. Поэтому очень важно сразу всё настроить правильно.
© Copyright 2021, GNU Linux Pro, CC-BY-SA-4.0. Ревизия 5f665cc2 .
Swap (Русский)
Состояние перевода: На этой странице представлен перевод статьи Swap. Дата последней синхронизации: 15 июня 2018. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
- fstab (Русский)
- Управление питанием/Ждущий и спящий режимы#Гибернация
- Zswap
- Swap on video ram
- ZFS#Swap volume
- dm-crypt/Swap encryption
Эта страница дает ознакомление с пространством подкачки и подкачкой страниц в GNU/Linux. Охватывает создание, активацию файлов и разделов подкачки.
Linux делит свою физическую RAM (оперативную память) на кусочки памяти, называемые страницами. Подкачка (swapping) это процесс, когда страницы памяти копируются на предварительно сконфигурированное пространство на жестком диске, называемое пространством подкачки, чтобы освободить эту страницу из памяти. Суммарный размер оперативной памяти и пространства подкачки это количество доступной виртуальной памяти.
Поддержка подкачки обеспечивается ядром Linux и утилитами в пользовательском пространстве из util-linux пакета.
Пространство подкачки
Пространство подкачки может быть разделом диска или файлом. Пользователи могут создать пространство подкачки во время установки или позднее в любое желаемое время. Пространство подкачки может быть использовано для двух целей, расширить виртуальную память за пределы установленной оперативной памяти (RAM), а также для сохранения данных при гибернации (suspend-to-disk).
Иногда стоит включать Swap в зависимости от установленной оперативной памяти и количества требований для запуска желаемых программ. Если количество оперативной памяти меньше требуемого, тогда стоит включить подкачку. Это позволяет избежать состояния нехватки памяти (OOM), при котором механизм ядра Linux, OOM Killer, будет автоматически пытаться освободить память, убивая процессы. Чтобы увеличить количество виртуальной памяти до требуемого уровня, добавьте необходимую разницу как пространство подкачки. Например, если программа требует 7,5 GB памяти для запуска, а у вас установлено 4 GB оперативной памяти, добавьте разницу 3,5 GB как подкачку. В будущем добавляйте больше пространства к подкачке, учитывая требования. Это вопрос личных предпочтений если вы считаете, что программы должны быть убиты, вместо включения подкачки. Самый большой недостаток в подкачке это снижение производительности, см. раздел #Производительность
Для проверки статуса подкачки, используйте:
$ swapon --show
$ free -h
free также покажет недостаток памяти, который может быть исправлен включением или увеличением подкачки.
Примечание: Преимущества в производительности между файлом и разделом подкачки нет, оба варианта обрабатываются одинаково.
Раздел подкачки
Раздел подкачки может быть создан различными GNU/Linux утилитами разметки. Разделы подкачки обычно обозначаются как тип 82 . Хотя есть возможность использовать разные типы как подкачку, рекомендуется использовать тип 82 , в большинстве случаев systemd, будет автоматически определять его и монтировать (см. ниже)
Для установки раздела как область Linux подкачки, можно использовать mkswap . Например:
# mkswap /dev/sdxy
Важно: Все данные на указанном разделе будут утеряны.
Для подключения устройства как подкачку:
# swapon /dev/sdxy
Чтобы подключить этот раздел подкачки при загрузке, добавьте запись в fstab:
UUID= none swap defaults 0 0
где может быть получен из команды:
lsblk -no UUID /dev/sdxy
Совет: Предпочтительно использовать UUID и LABEL, чем имена устройств полученные от ядра (/dev/sd*), т.к. порядок устройств может измениться в будущем. Смотри fstab.
- Эта fstab запись необязательна если раздел подкачки находится на устройстве, использующий GPT разметку, см. следующий подраздел.
- Если используется SSD с поддержкой TRIM, учтите использование defaults,discard в fstab строке подключения подкачки. Если вручную активировать подкачку с помощью swapon, используйте параметр -d / —discard , который делает тоже самое. Подробности смотри в swapon(8) .
Важно: Включение discard в RAID установке с использованием mdadm, приведёт к блокировке системы при загрузке и во время выполнения, если использовать swapon.
Активация используя systemd
Активация разделов подкачки в systemd базируется на двух различных механизмах. Оба исполняются в /usr/lib/systemd/system-generators . Генераторы запускаются при старте системы и создают нативные systemd юниты для монтирования. Первый systemd-fstab-generator , читает fstab, чтобы генерировать юниты, включая юнит для подкачки. Второй systemd-gpt-auto-generator , осматривает корневой диск, чтобы генерировать юниты. Это операция проходит только на GPT дисках и может идентифицировать разделы подкачки по их тип коду 82 .
Отключение подкачки
Чтобы деактивировать определенное пространство подкачки:
# swapoff /dev/sdxy
Также можно использовать -a ключ, чтобы деактивировать все пространства подкачки.
С тех пор, как systemd управляет подкачкой, она вновь будет активирована при старте системы, для долговременного отключения автоматической активации найденных пространств подкачки, выполните systemctl —type swap , чтобы найти связанные со .swap юниты и замаскируйте (systemctl mask юнит) их.
Файл подкачки
Как альтернатива к созданию целого раздела, файл подкачки даёт возможность менять свой размер на лету, а также его гораздо легче полностью удалить. Это может быть особенно важно, если дисковое пространство ограничено (например, небольшие SSD)
Важно: Btrfs не поддерживает файлы подкачки. Несоблюдение этого предупреждения, может стать результатом разрушения файловой системы. Пока что, файл подкачки может быть использован в Btrfs, если смонтирован через loop-устройство, тогда будет сильно уменьшена производительность подкачки.
Вручную
Создание файла подкачки
Использовать под суперпользователем fallocate , чтобы создать файл подкачки размером на свой выбор (M = Mebibytes, G = Gibibytes). Например создание 512 MiB файла подкачки:
# fallocate -l 512M /swapfile
Примечание: fallocate может вызвать проблемы с некоторыми файловыми системами, такими как: F2FS или XFS.[1]. Как вариант, используйте dd, наиболее надёжный, но медленный.
# dd if=/dev/zero of=/swapfile bs=1M count=512
Установите права доступа (всеми читаемый файл подкачки это огромная локальная уязвимость)
# chmod 600 /swapfile
После создания файла нужного размера, форматируйте его в подкачку:
# mkswap /swapfile
Активируйте файл подкачки:
# swapon /swapfile
В завершении, отредактируйте fstab, добавив запись для файла подкачки:
/etc/fstab
/swapfile none swap defaults 0 0
Примечание: Не забудьте добавить discard, если у вас SSD с поддержкой TRIM
# swapon --discard /swapfile
/etc/fstab
/swapfile none swap defaults,discard 0 0
Удаление файла подкачки
Чтобы удалить файл подкачки, сначала нужно отключить подкачку, а затем файл может быть удален:
# swapoff -a # rm -f /swapfile
В завершении, удалите соответствующую запись из /etc/fstab .
Автоматически
systemd-swap
Установить systemd-swap AUR пакет. Установить swapfc_enabled=1 в Swap File Chunked разделе файла /etc/systemd/swap.conf . Start/enable systemd-swap сервис. Посетить страницу авторов на GitHub для получения подробностей и установить рекомендуемую конфигурацию.
Примечание: Если журнал продолжает показывать следующее предупреждение systemd-swap[..]: WARN: swapFC: ENOSPC и файл подкачки не создаётся, вы должны установить параметр swapfc_force_preallocated=1 в /etc/systemd/swap.conf .
Подкачка с USB устройства
Благодаря модульности, предлагаемой Linux, мы можем иметь множество разделов подкачки на различных устройствах. Если у вас полностью заполнен жесткий диск, то можно использовать USB устройство как временный раздел подкачки. Однако, этот метод имеет серьёзные недостатки:
- USB устройство медленнее чем жесткий диск
- Flash память имеет ограниченное количество циклов записи. Использование его как раздела подкачки, может быстро убить его.
Чтобы добавить USB устройство как подкачку, сначала необходимо разметить USB флешку для подкачки как описано в секции #Раздел подкачки.
Далее откройте /etc/fstab и добавьте
pri=0
в опции монтирования первоначальной записи подкачки, таким образом USB подкачка будет иметь приоритет записи над старым разделом.
Данная инструкция будет работать и для других устройств хранения, таких как SD карты и т.д.
Шифрование подкачки
Производительность
Операции подкачки как правило существенно медленнее чем непосредственный доступ к RAM. Отключение подкачки полностью для повышения производительности, иногда может привести к ухудшению, поскольку это уменьшает доступную память для VFS кеша, вызывая более частые и дорогостоящие операции ввода/вывода.
Значения подкачки можно настроить, чтобы помочь производительности:
Swappiness
Swappiness sysctl параметр представляющий частоту использования пространства подкачки. Swappiness может иметь значение от 0 до 100, значение по умолчанию = 60. Низкое значение заставляет ядро избегать подкачки, высокое значение позволяет ядру использовать подкачку наперёд. Использование низкого значения на достаточном количестве памяти, улучшает отзывчивость на многих системах.
Чтобы проверить текущее значение swappiness:
$ cat /sys/fs/cgroup/memory/memory.swappiness
$ cat /proc/sys/vm/swappiness
Примечание: Т.к. /proc менее организован и сохраняется только для обратной совместимости, вместо него предпочтительнее использовать /sys .
Чтобы временно установить значение swappiness:
# sysctl vm.swappiness=10
Чтобы постоянно установить значение swappiness, отредактируйте (создайте) конфигурационный файл sysctl
/etc/sysctl.d/99-sysctl.conf
vm.swappiness=10
Чтобы проверить и больше узнать, почему оно так работает, посмотрите эту статью.
VFS cache pressure
Другой sysctl параметр, который действует на производительность подкачки это vm.vfs_cache_pressure , он контролирует склонность ядра к применению памяти, которая используется для кэширования VFS caches, напротив кэширования страниц и подкачки. Увеличение этого значения увеличивает коэффициент с которым VFS caches применяется[2] [устаревшая ссылка 2020-08-06 ⓘ] . Для подробной информации смотри документацию ядра Linux.
Приоритет
Если у вас больше одного файла или раздела подкачки, вы должны учитывать присвоение приоритетного значения (от 0 до 32767) для каждой области подкачки. Система будет использовать области подкачки с высоким приоритетом, перед использованием областей с низким приоритетом. Например, если у вас быстрый диск ( /dev/sda ) и медленный ( /dev/sdb ), назначьте высокий приоритет для подкачки расположенной на быстром устройстве. Приоритет может быть назначен в fstab как pri параметр:
/dev/sda1 none swap defaults,pri=100 0 0 /dev/sdb2 none swap defaults,pri=10 0 0
Или как параметр в swapon —priority
# swapon --priority 100 /dev/sda1
Если две или более областей будут иметь одинаковый приоритет и он будет самым высоким из доступным приоритетов, то страницы будут распределяться по кругу между областями.
Использование zswap или zram
zswap это особенность ядра Linux, обеспечивающая сжатие обратного кэша для страниц подкачки. Она увеличивает производительность и уменьшает операции ввода/вывода. zram создаёт виртуальный сжатый файл подкачки в памяти, как альтернатива файлу подкачки на диске.
Чередование
Нет необходимости использовать RAID для повышения производительности подкачки. Ядро самостоятельно может чередовать подкачку на нескольких устройствах, если вы присвоите им одинаковый приоритет в /etc/fstab . Для подробной информации смотри The Software-RAID HOWTO.
Retrieved from «https://wiki.archlinux.org/index.php?title=Swap_(Русский)&oldid=787252»