Что такое swap память
Перейти к содержимому

Что такое swap память

  • автор:

SWAP — как создать, подключить, очистить и отключить файл подкачки в Linux

SWAP (своп) — это механизм виртуальной памяти, при котором часть данных из оперативной памяти (ОЗУ) перемещается на хранение на HDD (жёсткий диск), SSD (твёрдотельный накопитель), флеш-накопитель или иное вторичное хранилище. Как правило, swapping (свопинг) происходит, когда оперативная память переполнена, и ей для работы требуется дополнительное пространство.

Когда может понадобиться своп

Зачастую, от недостатка свободной памяти первой страдает база данных. Вы можете сталкиваться с проблемами типа:

  1. Постоянное падение сайта: Ошибка соединения с базой данных — означает, например, что MySQL упал;
  2. При внимательном изучении логов /var/log/mysql.log обнаруживается ошибка InnoDB: Fatal error: cannot allocate memory for the buffer pool . Она свидетельствует о том, что базе данных не хватает выделенной ей оперативной памяти для создания буфера.

При подобных симптомах и ошибках может помочь своппинг.

Преимущества SWAP

Экономия бюджета Допустим, рассчитано, что под работу сайта необходимо 2 гигабайта оперативной памяти. Однако, в зависимости от всплесков трафика, активности пользователей или особенностей работы проекта в моменты пиковой нагрузки оперативной памяти может не хватать, что, в свою очередь, может вызывать сбои в работе. Можно решить проблему, докупив оперативную память на 2-4 гигабайта, но тогда большую часть времени она будет простаивать вхолостую. В таком случае, может помочь простое подключение свопа на 4 гигабайта — вы выделяете место на диске под своп, и он берёт на себя роль помощника оперативной памяти.
Теперь сравним:

Сравнение стоимости оперативной памяти и SSD
(цены актуальны на 7 июля 2017 года) IHOR FirstVDS
Оперативная память, в среднем за 1 гигабайт 100 рублей в месяц 170 рублей в месяц
SSD, в среднем за 1 гигабайт 10 рублей в месяц 13 рублей в месяц

Как видно из таблицы, экономия выйдет примерно в 10 раз.

Недостатки SWAP

Медленная работа Если файл или раздел свопа хранится на HDD (жёстком диске), то скорость чтения данных с него намного меньше, чем из оперативной памяти. Получше дела обстоят с SSD (твёрдотельным накопителем), однако, надо понимать, что поиск и чтение данных происходит через оперативную память, что, в свою очередь, всё равно увеличивает время отклика. Поэтому, если Вы решили сэкономить на оперативной памяти, полностью положившись на SWAP, то я категорически не рекомендую так делать.

SWAP — это не замена оперативной памяти, а всего лишь его поддержка.

Необходимо наличие свободного места на диске Вам необходимо зарезервировать свободное место на диске под своп, иначе стабильность работы не гарантируется. Это не то, чтобы недостаток свопа, просто его надо учитывать и помнить о нём.

Как создать и подключить файл подкачки SWAP

Далее, в работе используется командная строка SSH.
Инструментарий: Far Manager или Putty.
Для примера приводятся команды из под root . Если Вы работаете не под root , перед командами задавайте префикс sudo

Проверка наличия свопа в системе

Для начала, нужно убедиться, что своп ещё не подключен:

swapon -s

Если команда выдала пустой результат или что-то навроде:

Filename Type Size Used Priority

— значит, своп, скорее всего отсутствует.

Дополнительно проверим командой:

free -m

Своп нулевой

Если в таблице в строке swap стоит 0, значит своп отсутствует.

Проверка наличия свободного места на диске

Теперь, надо проверить, сколько свободного места есть на диске:

df -h

В результате, мы увидим что-то подобное:

root@server:~# df -h Файловая система Размер Использовано Дост Использовано% Cмонтировано в /dev/vda1 30G 20G 9,0G 66% / udev 10M 0 10M 0% /dev tmpfs 403M 41M 362M 11% /run tmpfs 1006M 336K 1005M 1% /dev/shm tmpfs 5,0M 0 5,0M 0% /run/lock tmpfs 1006M 0 1006M 0% /sys/fs/cgroup tmpfs 1006M 492K 1005M 1% /tmp

Как мы видим, доступно 9 гигабайт дискового пространства — вполне достаточно, чтобы создать своп-файл.

Какого размера создать swap

Исходите из принципа — сколько может понадобиться, столько и выделяйте. Как правило, можно начинать с размера объёма оперативной памяти, либо его удвоенного количества. Например, если у вас в системе 2 гигабайта оперативки, своп можно сделать размером 2-4 гигабайта, как правило, этого должно хватать. Но, Вы можете скорректировать его размер под себя.

Создание файла SWAP

Допустим, мы хотим создать swap-файл размером 4 гигабайта.
Далее, здесь существует 2 подхода, традиционный медленный и новый быстрый:

Быстрый способ Используем fallocate :

fallocate -l 4G /swapfile

Результатом будет пустая строка, это нормально.
В отличие от dd , результат будет получен почти сразу, и я рекомендую именно его. Традиционный, медленный способ Или используем команду:

dd if=/dev/zero of=/swapfile bs=1G count=4

Синтаксис команды простой:

  • dd — команда предназначена для того, чтобы что-то куда-то копировать побайтово;
  • if=/dev/zero — указывает на источник, т.е. на то, откуда копируем, в данном случае из /dev/zero — это специальный файл в UNIX-подобных системах, представляющий собой источник нулевых байтов;
  • of=/swapfile — указывает путь назначения, куда копируем данные;
  • bs=1G — количество байт, которые будут записаны за раз. В нашем случае, 1 гигабайт. Обозначения: G — гигабайт, M — мегабайт, K — килобайт, и так далее;
  • count=4 — сколько блоков размером с bs будет создано, в нашем случае 4.

Будьте очень внимательны с синтаксисом команды, потому что если, например, ошибиться с определением пути для of= (куда сохранять файл), можно повредить данные на диске.

Теперь, когда файл создан, проверим результат:

ls -lh /swapfile

В результате увидим:
-rw-r—r— 1 root root 4.0G Jul 07 16:16 /swapfile
Как видим, файл создался верно и с нужным объёмом.

Как подключить SWAP файл

Для начала, ограничим права доступа к вновь созданному файлу.

Предоставление другим пользователям возможности читать или писать в этот файл будет представлять собой огромный риск для безопасности, поэтому ограничение командой ниже строго обязательно:

chmod 600 /swapfile
ls -lh /swapfile

В результате, мы должны увидеть подобное:
-rw——- 1 root root 4.0G Jul 07 16:16 /swapfile
Права прописаны верно.

Теперь нужно сделать из swapfile файл подкачки:

mkswap /swapfile

В результате, увидим примерно следующее:
Setting up swapspace version 1, size = 4193300 KiB
no label, UUID=e5f3e9cf-c1a9-4ed4-b8ab-711b6a7d6544

Теперь, файл готов в роли свопа. Подключим его к системе:

swapon /swapfile
swapon: /swapfile: swapon failed: Operation not permitted

Если на данном этапе выходит похожая ошибка, значит, скорее всего, своп запрещено подключать в систему. Такое ограничение часто ставят на VDS с виртуализацией OpenVZ. Рекомендую использовать IHOR, сервера от 100 рублей в месяц и виртуализация KVM позволяют включать SWAP.

Всё, теперь своп подключен и работает. Осталось проверить правильность работы самой первой командой:

swapon -s
Filename Type Size Used Priority /swapfile file 4193300 0 -1

Своп также будет виден в стандартных командах:

free -m
total used free shared buffers cached Mem: 2010 1887 122 0 5 30 -/+ buffers/cache: 827 1183 Swap: 4095 0 4095

Всё, теперь точно, своп в системе готов и будет использоваться при необходимости.

Добавление свопа в автозагрузку

Чтобы при перезагрузке сервера своп автоматически подтягивался в систему, нужно прописать его в /etc/fstab :

echo "/swapfile none swap sw 0 0" >> /etc/fstab

Теперь система знает, где и как при перезагрузке искать и подключать своп.
Проверить, подключен ли своп в автозагрузке, можно с помощью редактора:

nano /etc/fstab

Дополнительные вопросы

Как очистить SWAP в Linux

Вообще, это делается с помощью отключения и включения свопа.

swapoff -a && sleep 3 && swapon -a

Однако, я не рекомендую прибегать к этому способу, так как swap просто очищается, а не переносится в ОЗУ, и, в случае наличия данных системных процессов, система может стать недоступна.

Swap (Русский)

Состояние перевода: На этой странице представлен перевод статьи Swap. Дата последней синхронизации: 3 февраля 2024. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

  • fstab (Русский)
  • Ждущий и спящий режимы#Гибернация
  • zswap (Русский)
  • zram (Русский)
  • Swap on video ram
  • ZFS#Swap volume
  • dm-crypt/Swap encryption

На этой странице представлено введение в пространство подкачки и подкачку страниц в GNU/Linux. Она охватывает создание и активацию файлов и разделов подкачки.

Linux делит свою физическую оперативную память на кусочки памяти, называемые страницами. Подкачка (swapping) — это процесс, когда страницы памяти копируются на предварительно настроенное пространство на жёстком диске, называемое пространством подкачки (swap space), чтобы освободить эти страницы в оперативной памяти. Суммарный размер оперативной памяти и пространства подкачки — это количество доступной виртуальной памяти.

Работа с подкачкой обеспечивается ядром Linux и инструментами из пакета util-linux в пользовательском пространстве.

Пространство подкачки

Пространство подкачки может быть разделом диска или файлом. Пользователи могут создать пространство подкачки во время установки или позднее в любое желаемое время. Пространство подкачки может быть использовано для двух целей: для расширения доступной виртуальной памяти и для сохранения данных при переходе в спящий режим.

Имеет ли смысл расширять виртуальную память с помощью подкачки, зависит от объёма установленной физической памяти. Если он меньше, чем объём памяти, необходимый для запуска всех нужных программ, то добавление подкачки может оказаться полезно. Это позволит избежать состояния нехватки памяти (out of memory) и срабатывания OOM killer в ядре, который попытается освободить память путём убийства процессов. Чтобы увеличить количество виртуальной памяти до требуемого уровня, добавьте необходимую разницу (или больше) в качестве пространства подкачки.

Самый большой недостаток использования подкачки — снижение производительности; смотрите раздел #Производительность. Поэтому включение подкачки — это вопрос личных предпочтений: кому-то может быть предпочтительнее убить процессы при нехватке памяти, а кому-то важно сохранить работу ценой снижения скорости работы системы.

Проверить статус подкачки можно командой:

$ swapon --show

Посмотреть использование физической памяти и подкачки:

$ free -h

Раздел подкачки

Раздел подкачки может быть создан в большинстве инструментов для разметки. Разделы подкачки обычно обозначаются как тип 82 в MBR и как 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F в GPT.

Чтобы создать пространство подкачки на месте нужного раздела, используйте команду mkswap(8) :

# mkswap /dev/sdxy 

Важно: Все данные на указанном разделе будут утеряны.

Чтобы задействовать его:

# swapon /dev/sdxy 

Чтобы автоматически подключать этот раздел подкачки при загрузке системы, добавьте запись в /etc/fstab :

UUID=UUID_устройства none swap defaults 0 0

Где UUID_устройства — это UUID раздела, используемого в качестве пространства подкачки.

Синтаксис файла описан в статье fstab (Русский).

Примечание: Добавление записи в fstab необязательно, если раздел подкачки находится на устройстве с разметкой GPT; смотрите раздел #Активация с использованием systemd.

Важно: Включение discard в RAID установке с использованием mdadm приведёт к блокировке системы при загрузке и во время выполнения, если использовать swapon.

Активация с использованием systemd

systemd может автоматически активировать разделы подкачки, используя два различных механизма. Оба являются исполняемыми файлами в каталоге /usr/lib/systemd/system-generators . Это генераторы, которые запускаются при загрузке системы и создают mount-юниты. Первый — systemd-fstab-generator , который считывает файл fstab и из его содержимого генерирует systemd-юниты, в том числе юниты для подкачки. Второй — systemd-gpt-auto-generator , который сканирует корневой диск для создания юнитов. Он работает только с GPT-дисками и ищет разделы подкачки по GUID; смотрите раздел systemd (Русский)#Автомонтирование GPT-раздела для более подробной информации.

Отключение подкачки

Чтобы деактивировать определённое пространство подкачки:

# swapoff /dev/sdxy 

Также можно использовать ключ -a , чтобы деактивировать все пространства подкачки.

Поскольку подкачкой управляет systemd, она вновь будет активирована при следующем старте системы. Чтобы навсегда отключить активацию автоматически обнаруженного пространства подкачки, выполните systemctl —type swap для получения списка .swap юнитов и замаскируйте те юниты, которые вы хотите отключить.

Файл подкачки

Вместо создания целого раздела можно использовать файл подкачки. Он даёт возможность менять свой размер на лету, а также его гораздо легче полностью удалить. Это может быть особенно важно, если место на диске ограничено (например, небольшие SSD).

Создание файла подкачки

Примечание: Для файловой системы Btrfs следуйте инструкциям из раздела Btrfs (Русский)#Файл подкачки вместо описанных ниже шагов.

Используйте команду dd для создания файла подкачки нужного вам размера. Пример для создания файла размером 8 ГиБ:

# dd if=/dev/zero of=/swapfile bs=1M count=8k status=progress

Примечание: Использование команды dd для создания файла подкачки — самое универсальное решение; подробнее смотрите swapon(8) § Files with holes .

Установите правильные права доступа (файл подкачки, доступный для чтения всем, — это огромная локальная уязвимость):

# chmod 0600 /swapfile

После создания файла нужного размера отформатируйте его как подкачку:

# mkswap -U clear /swapfile

Активируйте файл подкачки:

# swapon /swapfile

Наконец, добавьте запись для файла подкачки в файл fstab:

/etc/fstab
/swapfile none swap defaults 0 0

Синтаксис файла описан в статье fstab (Русский).

Примечание: Необходимо указать именно путь к файлу подкачки в файловой системе, а не UUID или LABEL.

Удаление файла подкачки

Перед удалением файла подкачки сперва отключите его:

# swapoff /swapfile # rm -f /swapfile

Не забудьте удалить соответствующую строку в /etc/fstab .

Сжатое блочное устройство в ОЗУ

zswap используется по умолчанию, если вы используете файл или раздел подкачки, но вы можете обойтись вообще без файла или раздела подкачки и вместо него создать сжатое блочное устройство в оперативной памяти с помощью zram. Информация о различиях между использованием zram и zswap описана в разделе Увеличение производительности#zram или zswap.

Шифрование подкачки

Производительность

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

Значения подкачки можно настроить, чтобы помочь производительности:

Swappiness

Когда использование памяти достигает определённого порога, ядро начинает просматривать активную память и смотреть, что можно освободить. Изменённые данные файлов можно записать в файловую систему, выгрузить из памяти и по необходимости загрузить позже; другие данные, не связанные с файлами, нужно будет записать в подкачку перед выгрузкой.

Примечание: Есть распространённое заблуждение, что swappiness влияет на порог памяти или предотвращает использование подкачки, но на самом деле он влияет только на описанное выше предпочтение. Более подробное объяснение есть в этой статье, также можно посмотреть исходный код ядра.

Чтобы проверить текущее значение swappiness:

$ sysctl vm.swappiness

Также можно посмотреть файл /sys/fs/cgroup/memory/memory.swappiness (специфичный для cgroup v1) или /proc/sys/vm/swappiness .

Чтобы временно установить значение swappiness:

# sysctl -w vm.swappiness=10

Чтобы сделать изменение постоянным, создайте файл настроек sysctl.d(5) , например:

/etc/sysctl.d/99-swappiness.conf
vm.swappiness = 10

Чтобы значение swappiness задавал загрузчик при загрузке ядра, добавьте параметр ядра, например sysctl.vm.swappiness=10 .

Чтобы проверить и больше узнать, почему оно так работает, посмотрите эту статью. Смотрите также более новую статью о распространённых заблуждениях.

VFS cache pressure

Ещё один sysctl параметр, влияющий на производительность подкачки, — vm.vfs_cache_pressure . Он контролирует склонность ядра к задействованию (reclaim) памяти, которая используется для кэширования VFS caches, вместо кэша страниц и подкачки. Увеличение этого значения увеличивает частоту, с которой будет забираться память VFS caches[1]. Более подробная информация есть в документации ядра 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

Или с помощью параметра —priority в команде swapon:

# swapon --priority 100 /dev/sda1

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

Чередование

Нет необходимости использовать RAID для повышения производительности подкачки. Ядро самостоятельно может чередовать подкачку на нескольких устройствах, если вы присвоите им одинаковый приоритет в /etc/fstab . Подробнее смотрите The Software-RAID HOWTO.

Смотрите также

Retrieved from "https://wiki.archlinux.org/index.php?title=Swap_(Русский)&oldid=799598"

Что такое гарантированная память и SWAP

Гарантированная память — это объем оперативной памяти, выделенный под нужды конкретного виртуального выделенного сервера (VPS), и доступный в любой момент времени.

SWAP — это дополнительная память, размещаемая на логическом разделе жесткого диска физического сервера, которая может быть использована в случае исчерпания гарантированного объема оперативной памяти.

Обычно операционная система использует SWAP для менее активных приложений, нежели гарантированную память. Вы можете самостоятельно определять, насколько активно будет использоваться параметр SWAP, с помощью настройки по SSH. SWAP используется в операционной системе Linux и является аналогом файла подкачки, используемого в операционной системе Windows.

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-ом работают относительно редко — один раз настраивается во время установки системы, а больше делать ничего и не надо. Поэтому очень важно сразу всё настроить правильно.

© Авторские права 2021, GNU Linux Pro, CC-BY-SA-4.0. Ревизия b16e73a6 .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *