SWAP в Linux
Руководство по созданию SWAP раздела на Linux
SWAP (своп) — это механизм виртуальной памяти, при котором часть данных из оперативной памяти (ОЗУ) перемещается на хранение на HDD (жёсткий диск), SSD (твёрдотельный накопитель).
В ОС Linux оперативная память (ОЗУ, RAM, random access memory) делится на разделы, называемые страницами (pages). Swapping (”подкачка”, своппинг) – это процесс во время которого страницы памяти копируются на специально сконфигурированный для этого раздел диска, называемый swap space (раздел подкачки, может быть как и файлом, так и разделом жесткого диска), для освобождения ОЗУ. Совокупные размеры физической памяти и раздела подкачки – это объем имеющийся виртуальной памяти.
Своппинг необходим по следующим причинам:
Зачастую, от недостатка свободной памяти первой страдает база данных. Вы можете сталкиваться с проблемами типа:
Если файл или раздел свопа хранится на SSD, нужно понимать что поиск и чтение данных происходит через оперативную память, что, в свою очередь, всё равно увеличивает время отклика.
Поэтому, если Вы сталкиваетесь с нехваткой оперативной памяти, мы рекомендуем переходить на тарифный план повыше.
Проверка наличия свопа в системе:
Дополнительно проверим командой:
Мы видим что SWAP готов и будет использоваться при необходимости.
В случае отсутствия можно создать файл для swap
Данная команда создаст файл /swap.file размером 512 мегабайт. Для увеличения данного показателя, измените count
Отформатируйте файл под swap
Отредактируйте файл /etc/fstab
Чтобы swap включался при загрузке, нужно добавить его в /etc/fstab
swap (своп) или файл подкачки
Swap (своп) или файл подкачки
Своп (swap) — это файл, либо раздел, т.е. определенное место на жестком диске (HDD), которое используется для «выгрузки» в него неиспользуемых страниц из оперативной памяти. Не зацикливайтесь на словосочетании «страница памяти» — это не столь важно на данный момент, ибо это уже углубление в принципы действия, которые вам не нужны на данном этапе и могут вообще не понадобится.
Стандартный HDD 3,5″ (На фото HDD от Western Digital)
Говоря же простым языком, в своп из оперативной памяти выгружается вся та информация, которая на данный момент не используется и к которой уже какое-то время не обращается ни одна программа. Т.е. своп в каком-то смысле создает дополнительный объем для вашей оперативной памяти, в который выгружается все ненужное на данный момент, но то, что может в скором времени понадобится какой-либо программе.
Думаю, многие знают и понимают, что HDD обладают в разы меньшим быстродействием, чем оперативная память и у вас может возникнуть логичный вопрос — зачем же использовать заведомо более медленное устройство?
Дело тут в том, что не возможно предусмотреть и предугадать объем оперативной памяти на каждом компьютере, а так же количество программ и процессов, которые будут запущены одновременно. Отсюда возникают ситуации, когда на некоторых компьютерах какая-либо программа может работать нормально, а на некоторых компьютерах появится проблема недостатка памяти.
Как раз для решения проблемы недостатка памяти и было придумано организовать специальное место на HDD — своп, в которое бы выгружалась вся ненужная на данный момент информация из оперативной памяти, освобождая место для активных программ и информации, которая используется на данный момент.
Если же к этой выгруженной в своп информации вновь поступает запрос, она загружается обратно в оперативную память, а из свопа удаляется, или просто поверх нее записывается что-то другое. А из-за того, что своп находится в одном и том же месте на HDD, время на поиск нужной информации минимально и не сравнится с процессом поиска, обработки и загрузки этой информации по-новой из директории программы.
С тем, что такое своп и зачем он нужен вроде бы разобрались. =) Надеюсь я не слишком вас утомил, ибо я старался объяснить подробнее и более простым языком, получилось у меня или нет уже вы мне скажете.
Теперь давайте перейдем к настройке самого своп-файла.
Настройки фйла подкачки в OC Windows (Диск E — это отдельный физический HDD)
В операционных системах на базе ядра Linux swap — представляет из себя специальное место на жестком диске, которое создается еще на стадии разметки диска при установке операционной системы. В Windows же дела обстоят иначе, тут swap представляется из себя файл pagefile.sys, который является скрытым системным файлом. Он располагается в файловой системе на одном или на нескольких логических дисках. И тут кроется с одной стороны преимущество, но с другой стороны и недостаток.
Преимущество такого решения в том, что можно мгновенно изменять размер свопа, но значительный недостаток кроется в том, что файл подкачки может фрагментироваться, т.е. разбиться на части, из-за других файлов, находящихся на логическом разделе. Подробнее о фргаментации вы можете прочитать в этой статье.
Поэтому для Windows есть определенный ряд правил и рекомендаций, которые нужно выполнять, если вы хотите что бы ваш компьютер нормально работал и не терял производительность из-за фрагментации своп-файла.
Практические советы по настройке своп-файла (файла подкачки) в ОС Wnidows
1 — Файл подкачки нужно располагать как можно ближе к начальным секторам жесткого диска (HDD), потому что именно в этом месте у большинства HDD самые высокие показатели скорости чтения и записи.
В идеале заняться настройкой файла подкачки нужно как только вы установили систему, пока ваш жесткий диск не забит файлами.
2 — Если у вас несколько логических разделов на жестком диске (HDD), то файл подкачки нужно располагать на первом по счету из них, т.е. как можно ближе к начальным секторам.
3 — Если у вас в компьютере несколько жестких дисков (HDD), то своп-файл нужно располагать на самом быстром из них.
4 — Перед тем, как задавать новый размер файла подкачки обязательно на время удалите файл подкачки (на всех дисках задать — «Без файла подкачки») и проведите дефрагментацию выбранного вами под swap-файл раздела каким-нибудь дефрагментатором (например Defraggler).
5 — Не разбивайте файл подкачки на несколько логических или физических дисков — это только замедлит работу системы.
6 — Не стоит помещать файл подкачки на отдельный раздел, равный ему по размеру и отформатированный в журнальной файловой системе.
Например, в файловой системе NTFS из-за MFT логический раздел делится ровно на две части. Таким образом ваш файл подкачки на таком логическом разделе гарантированно будет разбит на 2 части, а то и более, так же не всегда есть возможность разместить подобный раздел в начале диска. И в конечном итоге вы таким образом ограничите себя в выборе максимального размера файла подкачки.
Какого размера должен быть файл подкачки?
Размер файла подкачки обязательно должен быть фиксированным, т.е. «Исходный размер» и «Максимальный размер» должны быть идентичными. Таким образом мы исключим возможную фрагментацию файла подкачки при разрастании от «Исходного» до «Максимального» размера.
Объем RAM Размер swap-файла
256МБ 1024МБ
512МБ 2048МБ
1024МБ-2048МБ 4096МБ
3072МБ-4096МБ 6144МБ-8192МБ
8192МБ и более можно указать минимальный размер (по-сути он не нужен, но
многие программы требуют его наличия)
Файл и раздел подкачки в Linux. Разница между swapping и paging
Обновл. 23 Июн 2021 |
Каждая операционная система имеет в своем распоряжении некоторый выделенный объем оперативной памяти, с помощью которого она производит обработку различных программ. Однако этот объем ограничен и не может вместить в себя слишком большое количество данных. В связи с этим у системы появляется потребность в дополнительном резерве памяти, к которому можно было бы обратиться всякий раз, когда исчерпывается оперативная память.
Данная концепция применима как к операционной системе Windows, так и к Linux-системам. В ОС Windows, если возникает ситуация, когда для хранения процесса не хватает оперативной памяти, то система занимает некоторый объем памяти (т.н. «виртуальной памяти») из вторичного хранилища. Аналогичным образом поступают и Linux-системы.
Таким образом, оперативная память всегда обладает достаточным объемом памяти для сохранения в ней любого вновь запускаемого процесса. Заимствованное пространство жесткого диска называется памятью подкачки (англ. «swap memory»). И в этой статье мы подробно рассмотрим механизм памяти подкачки, его свойства и работу с ним в Linux.
Swapping vs. Paging
Paging — это процесс, при котором Linux делит свою физическую оперативную память на куски фиксированного размера (4 КБ), называемые страницами (англ. «pages»).
Swapping (или «подкачка памяти») — это процесс, при котором страница памяти копируется в специальное пространство на жестком диске, называемое пространством подкачки (англ. «swap space»), освобождая занимаемый ею объем оперативной памяти. В Linux для этого существует специальная программа — менеджер памяти. Каждый раз, когда системе требуется больше памяти, чем ей физически доступно в данный момент, менеджер памяти ищет все редко используемые страницы памяти и вытесняет их на жесткий диск, предоставляя освободившуюся память другому приложению (процессу).
Часто случается так, что приложение в момент своего старта задействует существенное количество страниц памяти, которые в дальнейшем ему больше не потребуются. В таких случаях операционная система также может произвести вытеснение подобных страниц памяти на диск, освободив тем самым память для других приложений (или даже для дискового кэша).
Рассмотрим основные различия между Swapping и Paging:
| Swapping | Paging |
| Процедура копирования памяти всего процесса. | Метод выделения памяти. |
| Возникает тогда, когда память всего процесса переносится на диск. | Возникает тогда, когда какая-то часть процесса переносится на диск. |
| Происходит временное вытеснение данных из основной памяти во вторичную. | Непрерывный фрагмент памяти разбивается на несколько отдельных блоков фиксированного размера, называемых фреймами (frames) или страницами (pages). |
| Может выполняться без какого-либо управления памятью. | Управляется менеджером памяти. |
| Выполняется над неактивными процессами. | Выполняется только с участием активных процессов. |
Типы памяти подкачки
Как правило, существует два различных типа памяти подкачки:
Раздел подкачки (англ. «swap partition») — тип памяти подкачки по умолчанию. Представляет собой раздел жесткого диска, используемый исключительно для подкачки памяти; никакие другие файлы не могут находиться там.
Файл подкачки (англ. «swap file») — специальный файл, который находится среди остальных файлов вашей файловой системы.
Чтобы узнать, каким объемом памяти подкачки вы владеете, используйте следующую команду:
Каждая перечисленная строка на вышеприведенном скриншоте (у нас всего 1 строка) обозначает имеющиеся у нас пространства подкачки. Рассмотрим детально пункты вывода:
Filename — указывает на расположение пространства подкачки (мы видим, что наш раздел подкачки находится в /dev/sda5).
Type — указывает, что пространство подкачки является разделом (partition), а не файлом (file).
Size — размер пространства подкачки в килобайтах.
Used — указывает на использованное количество килобайт памяти подкачки.
Priority — определяет, какое пространство подкачки использовать в первую очередь.
Одна из замечательных особенностей подсистемы подкачки Linux заключается в том, что если вы смонтируете два (или более) пространства подкачки (на двух разных устройствах) с одинаковым приоритетом, то Linux будет чередовать активность подкачки между ними, что может значительно повысить производительность системы подкачки.
Примечание: Монтирование в Linux — это подключение диска в основную файловую систему.
Преимущества использования памяти подкачки
Изучая работу памяти подкачки, мы можем легко понять преимущества её использования, основные из которых перечислены ниже:
Память подкачки может легко удерживать те неактивные блоки оперативной памяти, которые задействовались всего один или два раза, после чего к ним больше не было никаких обращений. Освобожденная таким образом оперативная память может быть отдана в работу программам с более высоким приоритетом.
Память подкачки предотвращает нехватку места в оперативной памяти, позволяя запускать «тяжелые» приложения, требующие большого объема оперативной памяти.
Память подкачки действует как резервная копия для увеличения фактического пространства оперативной памяти.
В процессе гибернации всё содержимое оперативной памяти записывается на диск в память подкачки.
Повышает общую производительность вашей системы.
Раздел подкачки
Раздел подкачки (англ. «swap partition») — это раздел жесткого диска, используемый исключительно для подкачки памяти; является типом памяти подкачки по умолчанию.
Добавление раздела подкачки
Чтобы добавить дополнительный раздел подкачки в вашу систему, вам сначала нужно выполнить его подготовку. На первом шаге требуется убедиться, что раздел жесткого диска помечен как swap. На втором — создать файловую систему swap. Чтобы проверить, что раздел помечен как swap, запустите команду:
Примечание: Замените /dev/sda на путь к диску в вашей системе с разделом подкачки на нем.
Вы должны увидеть примерно следующее:
Как только ваш раздел пометится как swap, его необходимо будет подготовить с помощью команды mkswap (сокр. от «make swap«):
$ sudo mkswap /dev/sda5
Если при этом не было получено никаких ошибок, то ваш раздел подкачки готов к использованию. Для его активации введите команду:
$ sudo swapon /dev/sda5
/dev/sda5 swap swap defaults 0 0
/dev/sda5 — путь к разделу подкачки;
swap — означает, что раздел будет смонтирован как раздел подкачки;
defaults — означает использовать настройки по умолчанию;
0 (последние два параметра) означает, что данные параметры не используются.
Удаление раздела подкачки
Чтобы удалить раздел подкачки, нужно выполнить следующие шаги:
Шаг №1: Отключаем раздел подкачки следующей командой:
$ sudo swappoff /dev/sda5
Или можно отключить вообще все разделы подкачки, используя:
Шаг №2: Поскольку раздел подкачки управляется подсистемой инициализации systemd, то при следующем запуске системы он будет снова активирован. Чтобы навсегда отключить автоматическую активацию обнаруженного раздела подкачки, необходимо найти ответственный за подкачку swap-юнит:
UNIT (dev–sda5.swap) — это название swap-юнита, соответствующего разделу подкачки.
LOAD (loaded) — означает, что наш swap-юнит успешно загружен.
ACTIVE (inactive) — обобщенный статус юнита. Может принимать значения:
active — юнит запущен;
inactive — юнит остановлен.
SUB (dead) — более низкоуровневый статус юнита. В зависимости от типа юнита, может принимать значения:
exited — успешно завершил выполнение;
failed — ошибка при выполнении;
DESCRIPTION (/dev/sda5) — указывает на путь к swap-юниту (разделу подкачки).
Шаг №3: Отключаем дальнейшие запуски выбранного юнита с помощью команды mask :
$ sudo systemctl mask dev-sda5.swap
Шаг №4: Перезагружаем систему.
Вышеописанные действия отключают использование раздела подкачки системой и не приводят к его физическому удалению. В этом можно убедиться, просмотрев список всех разделов системы с помощью следующей команды:
Или с помощью графической утилиты управления дисками GParted:
Примечание: Если в вашей системе отсутствует GParted, то вы можете установить её с помощью следующей команды:
sudo apt-get install gparted
Для полного удаления раздела подкачки через GParted, необходимо кликнуть по нему ПКМ и выбрать пункт «Удалить» :
Или же воспользоваться следующей командой в терминале:
Затем вам нужно будет нажать d (сокр. от англ. «delete»), чтобы попасть в режим удаления раздела. После чего вас попросят указать номер удаляемого раздела (у меня это — sda5, поэтому я указал номер 5 ). Далее нажмите w (сокр. от англ. «write»), чтобы записать внесенные изменения в таблицу разделов диска и выйти из fdisk :
Также необходимо проверить, что у вас закомментированы (символом # ) все упоминания раздела подкачки в файлах конфигурации /etc/fstab и /etc/initramfs-tools/conf.d/resume.
В завершении, чтобы в момент старта система знала, что такого раздела больше нет, нужно выполнить следующую команду:
Готово! Раздел подкачки удален!
Файл подкачки
Файл подкачки (англ. «swap file») — это специальный файл, который создается вручную, для подкачки в него неактивного содержимого ОЗУ, когда на жестком диске недостаточно места для создания полноценного раздела подкачки. Файл подкачки можно создавать и монтировать аналогично разделу подкачки. Преимущество файлов подкачки заключается в том, что вам не нужно искать пустой раздел или переделывать диск, чтобы добавить дополнительное пространство подкачки.
Добавление файла подкачки
Чтобы добавить в систему файл подкачки, нужно выполнить следующие шаги:
Шаг №1: Создаем файл, который будет использоваться в качестве файла подкачки:
$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576
Часть /swapfile — это имя файла подкачки, а count=1048576 — размер файла подкачки в килобайтах (1048576 КБ ≈ 1.05 ГБ).
Шаг №2: Только root-пользователь должен иметь возможность записывать и читать файл подкачки. Для этого необходимо задать правильный тип разрешений:
$ sudo chmod 600 /swapfile
Шаг №3: Нужно подготовить файл подкачки с помощью команды mkswap так же, как мы это делали в случае с разделом, но на этот раз используем имя файла подкачки:
$ sudo mkswap /swapfile
Шаг №4: И точно так же монтируем файл подкачки с помощью команды swapon :
$ sudo swapon /swapfile
Затем нужно добавить запись в файл /etc/fstab для файла подкачки:
/swapfile swap swap defaults 0 0
Шаг №5: Чтобы убедиться, что мы активировали файл подкачки, используем команду swapon :
$ sudo cat /proc/swaps

Удаление файла подкачки
Если по какой-либо причине вы хотите отключить и удалить файл подкачки, выполните следующие шаги:
Шаг №1: Отключаем подкачку памяти с помощью следующей команды:
Шаг №2: Удаляем запись о файле подкачки из файла /etc/fstab:
/swapfile swap swap defaults 0 0
Шаг №3: Удаляем непосредственно сам файл подкачки с помощью команды rm :
Насколько большим должно быть пространство подкачки?
Можно запустить Linux-систему и без пространства подкачки, система будет замечательно работать, если у вас достаточно большой объем оперативной памяти. Но если она у вас закончится, то в вашей системе может произойти критический сбой, поэтому все же желательно иметь пространство подкачки, тем более что дисковое пространство относительно дешево.
Ключевой вопрос: «Сколько нужно пространства подкачки?». Более старые версии операционных систем типа Unix требовали пространства подкачки в два-три раза больше физической памяти. Современные Linux-системы применяют эмпирическое правило, смысл которого заключается в следующем:
Для настольной системы используйте пространство подкачки в два раза больше размера оперативной памяти, так как это позволит вам запускать большое количество приложений (многие из которых могут быть простаивающими и легко заменяемыми).
Для сервера имейте меньший объем доступной подкачки (например, половину от физической памяти), чтобы у вас была некоторая гибкость для подкачки, когда это необходимо, но контролируйте объем используемого пространства подкачки и обновляйте свою оперативную память, в случае надобности.
Для старых настольных компьютеров (имеющих, например, только 128 МБ оперативной памяти) по возможности выделяйте от 1 ГБ пространства и больше.
Настройка частоты использования пространства подкачки
$ sudo echo 50 > /proc/sys/vm/swappiness
Или, например, чтобы установить значение swappiness равным 10 через sysctl, нужно выполнить следующую команду:
$ sudo sysctl vm.swappiness=10
Если вы хотите перманентно изменить данное значение, то вам необходимо определить параметр vm.swappiness в файле /etc/sysctl.conf.
Оптимальное значение подкачки зависит от рабочей нагрузки вашей системы и того, как используется память. Регулируйте этот параметр небольшими шагами, чтобы найти оптимальное значение.
Заключение
В этой статье мы рассмотрели использование и работу памяти подкачки, а также её многочисленные преимущества. Память подкачки служит резервным вариантом для оперативной памяти, когда у последней не остается свободного места. Однако мы все знаем, что у нас не может быть бесконечного объема оперативной памяти, но у нас должно быть достаточное её количество, чтобы избежать сбоя наших приложений.
Кроме того, есть затраты, связанные с (физическим) добавлением большего объема оперативной памяти, в то время как нет затрат на использование памяти подкачки. Кроме того, не всегда представляется возможным добавить несколько планок оперативной памяти в ваш компьютер. Следовательно, единственный вариант, который у нас остается, — это использовать память подкачки, которая может заставить нашу систему работать эффективнее без каких-либо затрат.










