Файл подкачки linux что это

Все о пространстве подкачки в ОС Линукс

Оригинал: All about Linux swap space
Автор: Gary Sims
Дата: 3 декабря 2007
Свободный перевод: Алексей Дмитриев
Дата перевода: 6 декабря 2007

При копировании материала обязательны указание автора, переводчика и ссылки на оригинал статьи и настоящую страницу как первоисточник перевода!

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

Линукс разделяет доступную физическую оперативную память (RAM — random access memory) на блоки, называемые страницами. Своппинг — это процесс, при котором страница памяти копируется в заранее заготовленное место на жестком диске, называемое пространством подкачки, чтобы освободить данную страницу памяти для новой информации. Сумма объемов физической оперативной памяти и пространства подкачки называется объемом доступной виртуальной памяти.

Подкачка необходима по двум причинам. Во-первых, когда системе требуется больше памяти, чем физически доступно, ядро переносит из памяти на диск наименее используемые страницы и отдает освободившуюся память тому приложению (процессу) который нуждается в ней немедленно. Во-вторых, значительное количество страниц памяти задействуется приложениями только во время их загрузки, и может больше не понадобиться по окончании процесса инициализации. Система может откачать эти страницы на диск, освободив тем самым память для других приложений, или даже для дискового кэша.

Однако подкачка имеет и оборотную сторону. По сравнению с памятью, диск работает очень медленно. Скорость памяти измеряется в наносекундах, тогда как скорость диска в миллисекундах, получается, что доступ к диску может быть в десятки тысяч раз медленнее доступа к физической памяти. Чем больше происходит подкачки, тем медленнее работает система. Иногда чрезмерный своппинг приводит к пробуксовке, когда страница откачивается, затем тут же закачивается обратно, потом снова откачивается и так далее. В такой ситуации система борется за свободную память, «гоняя» приложение на месте. В такой ситуации только добавление дополнительной оперативной памяти может помочь.

В Линуксе пространство подкачки бывает двух видов: раздел подкачки (swap partition) и файл подкачки (swap file).

Раздел подкачки — это независимая секция жесткого диска, используемая исключительно для подкачки, никаких других файлов там нет. Файл подкачки — это файл особого типа внутри файловой системы, среди прочих файлов всех других типов. Чтобы узнать каким пространством для подкачки вы располагаете, наберите в командной строке:

В ответ вы получите что-то типа:

Каждая строка относится к отдельному пространству подкачки, имеющемуся в системе. В данном случае строка всего одна. Поле ‘Type’ (Тип) говорит, что мы имеем раздел (partition), а не файл. Поле ‘Filename’ сообщает, что этот раздел находится на диске sda5. Поле ‘Size’ (размер) показывает размер раздела в килобайтах. Поле ‘Used’ (Использовано) сообщает, сколько килобайт пространства подкачки используется (в данном случае ноль). ‘Priority’ (Приоритет) сообщает, какое из пространств подкачки Линукс использует первым. Подсистема подкачки в линуксе имеет замечательное свойство: если вы смонтируете с одинаковым приоритетом два (или больше) пространств подкачки (желательно на разных устройствах), Линукс станет использовать их для подкачки поочередно, что существенно увеличит производительность своппинга.

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

Для того чтобы добавить дополнительный раздел подкачки в свою систему, необходимо сначала подготовить его. Шаг первый — убедиться, что раздел помечен как swap partition (раздел подкачки). Шаг второй — создать на нем специальную файловую систему — swap filesystem. Чтобы удостовериться, что раздел помечен как swap, с правами root (суперпользователя) наберите команду:

Замените /dev/hdb на то устройство, которое хотите проверить. В ответ получите что-то вроде:

Если раздел не помечен как Linux swap, то придется изменить его с помощью программы fdisk, используя опцию ‘t’. Будьте предельно осторожны при работе с разделами, если не хотите по ошибке удалить важный раздел, или переформатировать системный раздел в раздел подкачки. Вся информация на swap-разделе будет потеряна, так что семь раз отмерьте, один раз отрежьте. Также имейте в виду, что Solaris помечает свои разделы тем же идентификатором, что Линукс — свои разделы подкачки (Linux swap), так что поостерегитесь случайно испортить раздел Solaris (если они у вас есть). Когда раздел помечен как swap, необходимо отформатировать его командой mkswap (make swap), опять же, как root:

Если не появляется сообщений об ошибках, значит ваш раздел отформатирован и готов к работе. Чтобы немедленно его активировать напечатайте:

Убедиться, что раздел используется, можно запустив команду swapon -s . Чтобы новый раздел автоматически подключался (монтировался) при запуске компьютера, нужно отредактировать файл /etc/fstab, который содержит список файловых систем, подключаемых (монтируемых) при загрузке. Формат каждой строки таков:

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

/dev/hdb1 none swap sw 0 0

Здесь /dev/hdb1 — сам раздел подкачки, он не имеет специальной точки монтирования (mount point), следовательно, пишем none (нет). Его тип (type) — swap, обозначается опцией sw. Последние два параметра не используются, поэтому там нули.

Можно проверить без перезагрузки компьютера, будет ли ваш новый раздел подкачки автоматически подключаться. Для этого сначала отключим все пространства подкачки командой swapoff -a , затем обратно подключим все пространства подкачки, перечисленные в /etc/fstab командой swapon -a , затем проверим, что именно подключилось, командой swapon -s .

Читайте также:  Сторонние темы для windows 10 2004

Файл подкачки (Swap file)

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

Для создания файла подкачки используйте команду dd , которая «умеет» создавать пустые файлы. Для создания файла в 1Гб напечатайте:

dd if=/dev/zero of=/swapfile bs=1024 count=1048576

Здесь: /swapfile — имя файла подкачки, а число 1048576 — это размер файла в килобайтах (т.е. 1Гб) Подготавливаем файл подкачки при помощи команды mkswap, также как поступали с разделом, но на этот раз указываем имя файла:

Аналогично монтируем его командой swapon:

Строка в файле /etc/fstab для файла подкачки выглядит так:

Какого размера должно быть пространство подкачки?

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

Ключевой вопрос — сколько? Старые версии Unix-подобных операционных систем (такие как Sun OS и Ultrix) рекомендовали пространство подкачки вдвое или втрое превышающее размер оперативной памяти. Современные разработки (такие как Линукс) не требуют так много, но могут использовать его, если им дадут. Правило тут такое: 1) для настольных систем выделяйте пространство подкачки равное удвоенному размеру оперативной памяти, это позволит вам одновременно запускать много приложений (многие из которых, будучи неактивны, легко могут быть откачаны на диск, освободив память для активных); 2) для сервера выделяйте меньше пространства подкачки (около половины размера оперативной памяти), так, чтобы обеспечить при необходимости возможность своппинга, но следите за использованием пространства подкачки, и при необходимости наращивайте оперативную память (RAM); 3) для старых компьютеров с маленьким объемом оперативной памяти (скажем, только 128Мб), выделяйте столько пространства для подкачки, сколько сможете, вплоть до 1Гб.

Ядро Linux 2.6 добавило новый параметр, называемый swappiness (перевода не существует), позволяющий администратору регулировать то, как Линукс оперирует с пространством подкачки. Это число от 0 до 100. В общих чертах, чем больше это число, тем больше страниц откачиваются из оперативной памяти на диск, а чем меньше значение swappiness, тем большее число приложений остаются в оперативной памяти, даже если они неактивны. Разработчик ядра Andrew Morton утверждает, что выставляет на своих десктопах swappiness на высочайший уровень — 100, говоря при этом: «Я считаю, что не следует ограничивать ядро в его стремлении откачивать мусор. Вы же не хотите, чтобы сотни мегабайт памяти, занятой раздувшимися приложениями, без пользы зависли в вашей машине. Выгрузите их на диск, а память используйте на что-нибудь полезное». У идеи Мортона есть и оборотная сторона: если память освобождается слишком быстро, то время отклика приложений возрастет, так как при вызове приложения, система должна будет сначала закачать его обратно в память, что создаст ощущение медлительности.

Значение swappiness по умолчанию равно 60. Можно изменить его временно (до следующей перезагрузки) командой от имени root:

echo 50 > /proc/sys/vm/swappiness

Если хотите изменить его на постоянной основе, тогда нужно изменить параметр vm.swappiness в файле /etc/sysctl.conf

Заключение

Управление пространством подкачки является важным аспектом системного администрирования. Хорошо спланированный и правильно используемый своппинг дает много преимуществ. Не бойтесь экспериментировать и постоянно ведите мониторинг своей системы, чтобы убедиться, что вы достигли именно того результата, к которому стремились.

Источник

Файл и раздел подкачки в 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).
Может выполняться без какого-либо управления памятью. Управляется менеджером памяти.
Выполняется над неактивными процессами. Выполняется только с участием активных процессов.
Читайте также:  Mac os keychain export

Типы памяти подкачки

Как правило, существует два различных типа памяти подкачки:

Раздел подкачки (англ. «swap partition») — тип памяти подкачки по умолчанию. Представляет собой раздел жесткого диска, используемый исключительно для подкачки памяти; никакие другие файлы не могут находиться там.

Файл подкачки (англ. «swap file») — специальный файл, который находится среди остальных файлов вашей файловой системы.

Чтобы узнать, каким объемом памяти подкачки вы владеете, используйте следующую команду:

Каждая перечисленная строка на вышеприведенном скриншоте (у нас всего 1 строка) обозначает имеющиеся у нас пространства подкачки. Рассмотрим детально пункты вывода:

Filename — указывает на расположение пространства подкачки (мы видим, что наш раздел подкачки находится в /dev/sda5).

Type — указывает, что пространство подкачки является разделом (partition), а не файлом (file).

Size — размер пространства подкачки в килобайтах.

Used — указывает на использованное количество килобайт памяти подкачки.

Priority — определяет, какое пространство подкачки использовать в первую очередь.

Одна из замечательных особенностей подсистемы подкачки Linux заключается в том, что если вы смонтируете два (или более) пространства подкачки (на двух разных устройствах) с одинаковым приоритетом, то Linux будет чередовать активность подкачки между ними, что может значительно повысить производительность системы подкачки.

Примечание: Монтирование в Linux — это подключение диска в основную файловую систему.

Преимущества использования памяти подкачки

Изучая работу памяти подкачки, мы можем легко понять преимущества её использования, основные из которых перечислены ниже:

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

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

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

В процессе гибернации всё содержимое оперативной памяти записывается на диск в память подкачки.

Повышает общую производительность вашей системы.

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

Раздел подкачки (англ. «swap partition») — это раздел жесткого диска, используемый исключительно для подкачки памяти; является типом памяти подкачки по умолчанию.

Добавление раздела подкачки

Чтобы добавить дополнительный раздел подкачки в вашу систему, вам сначала нужно выполнить его подготовку. На первом шаге требуется убедиться, что раздел жесткого диска помечен как swap. На втором — создать файловую систему swap. Чтобы проверить, что раздел помечен как swap, запустите команду:

$ sudo fdisk -l /dev/sda

Примечание: Замените /dev/sda на путь к диску в вашей системе с разделом подкачки на нем.

Вы должны увидеть примерно следующее:

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

Как только ваш раздел пометится как swap, его необходимо будет подготовить с помощью команды mkswap (сокр. от «make swap«):

$ sudo mkswap /dev/sda5

Если при этом не было получено никаких ошибок, то ваш раздел подкачки готов к использованию. Для его активации введите команду:

$ sudo swapon /dev/sda5

Вы можете убедиться, что данный раздел теперь задействован системой, выполнив команду swapon -s . Чтобы автоматически смонтировать раздел подкачки во время загрузки системы, необходимо добавить соответствующую запись в файл /etc/fstab, содержащий список файловых систем и пространств подкачки:

/dev/sda5 swap swap defaults 0 0

/dev/sda5 — путь к разделу подкачки;

swap — означает, что раздел будет смонтирован как раздел подкачки;

swap — тип раздела;

defaults — означает использовать настройки по умолчанию;

0 (последние два параметра) означает, что данные параметры не используются.

Чтобы без перезагрузки проверить, что ваш раздел подкачки монтируется автоматически, вы можете запустить команду swapoff -a (которая отключает все пространства подкачки), а затем swapon -a (которая монтирует все пространства подкачки, перечисленные в файле /etc/fstab), а затем проверить статус вашего раздела подкачки с помощью swapon -s .

Удаление раздела подкачки

Чтобы удалить раздел подкачки, нужно выполнить следующие шаги:

Шаг №1: Отключаем раздел подкачки следующей командой:

$ sudo swappoff /dev/sda5

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

$ sudo swappoff -a

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

$ sudo systemctl —all —type swap

UNIT (devsda5.swap) — это название swap-юнита, соответствующего разделу подкачки.

LOAD (loaded) — означает, что наш swap-юнит успешно загружен.

ACTIVE (inactive) — обобщенный статус юнита. Может принимать значения:

active — юнит запущен;

inactive — юнит остановлен.

SUB (dead) — более низкоуровневый статус юнита. В зависимости от типа юнита, может принимать значения:

exited — успешно завершил выполнение;

failed — ошибка при выполнении;

dead — не запущен;

DESCRIPTION (/dev/sda5) — указывает на путь к swap-юниту (разделу подкачки).

Шаг №3: Отключаем дальнейшие запуски выбранного юнита с помощью команды mask :

$ sudo systemctl mask dev-sda5.swap

Шаг №4: Перезагружаем систему.

Примечание: Если вы хотите немедленного (без перезагрузки) исполнения команды mask , то достаточно добавить к ней ключ —now , например:

$ sudo systemctl mask dev-sda5.swap —now

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

Читайте также:  Program on windows and linux

Или с помощью графической утилиты управления дисками GParted:

Примечание: Если в вашей системе отсутствует GParted, то вы можете установить её с помощью следующей команды:

sudo apt-get install gparted

Для полного удаления раздела подкачки через GParted, необходимо кликнуть по нему ПКМ и выбрать пункт «Удалить» :

Или же воспользоваться следующей командой в терминале:

$ sudo fdisk /dev/sda

Затем вам нужно будет нажать d (сокр. от англ. «delete»), чтобы попасть в режим удаления раздела. После чего вас попросят указать номер удаляемого раздела (у меня это — sda5, поэтому я указал номер 5 ). Далее нажмите w (сокр. от англ. «write»), чтобы записать внесенные изменения в таблицу разделов диска и выйти из fdisk :

Также необходимо проверить, что у вас закомментированы (символом # ) все упоминания раздела подкачки в файлах конфигурации /etc/fstab и /etc/initramfs-tools/conf.d/resume.

В завершении, чтобы в момент старта система знала, что такого раздела больше нет, нужно выполнить следующую команду:

$ sudo update-initramfs -u

Готово! Раздел подкачки удален!

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

Файл подкачки (англ. «swap file») — это специальный файл, который создается вручную, для подкачки в него неактивного содержимого ОЗУ, когда на жестком диске недостаточно места для создания полноценного раздела подкачки. Файл подкачки можно создавать и монтировать аналогично разделу подкачки. Преимущество файлов подкачки заключается в том, что вам не нужно искать пустой раздел или переделывать диск, чтобы добавить дополнительное пространство подкачки.

Добавление файла подкачки

Чтобы добавить в систему файл подкачки, нужно выполнить следующие шаги:

Шаг №1: Создаем файл, который будет использоваться в качестве файла подкачки:

$ sudo fallocate -l 1G /swapfile

Если утилита fallocate отсутствует или вы получили сообщение об ошибке типа failed: Operation not supported , то можете использовать следующую команду для создания файла подкачки:

$ 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 swapon —show

Или команду free :

$ sudo cat /proc/swaps

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

Если по какой-либо причине вы хотите отключить и удалить файл подкачки, выполните следующие шаги:

Шаг №1: Отключаем подкачку памяти с помощью следующей команды:

$ sudo swapoff -v /swapfile

Шаг №2: Удаляем запись о файле подкачки из файла /etc/fstab:

/swapfile swap swap defaults 0 0

Шаг №3: Удаляем непосредственно сам файл подкачки с помощью команды rm :

$ sudo rm /swapfile

Насколько большим должно быть пространство подкачки?

Можно запустить Linux-систему и без пространства подкачки, система будет замечательно работать, если у вас достаточно большой объем оперативной памяти. Но если она у вас закончится, то в вашей системе может произойти критический сбой, поэтому все же желательно иметь пространство подкачки, тем более что дисковое пространство относительно дешево.

Ключевой вопрос: «Сколько нужно пространства подкачки?». Более старые версии операционных систем типа Unix требовали пространства подкачки в два-три раза больше физической памяти. Современные Linux-системы применяют эмпирическое правило, смысл которого заключается в следующем:

Для настольной системы используйте пространство подкачки в два раза больше размера оперативной памяти, так как это позволит вам запускать большое количество приложений (многие из которых могут быть простаивающими и легко заменяемыми).

Для сервера имейте меньший объем доступной подкачки (например, половину от физической памяти), чтобы у вас была некоторая гибкость для подкачки, когда это необходимо, но контролируйте объем используемого пространства подкачки и обновляйте свою оперативную память, в случае надобности.

Для старых настольных компьютеров (имеющих, например, только 128 МБ оперативной памяти) по возможности выделяйте от 1 ГБ пространства и больше.

Настройка частоты использования пространства подкачки

В ядро Linux 2.6 был добавлен новый параметр под названием swappiness, определяющий как часто система будет использовать пространство подкачки. Он может иметь значения от 0 до 100 . Маленькое значение заставит ядро стараться избегать операций подкачки, когда это возможно, в то время как более высокое значение заставит ядро использовать пространство подкачки «более агрессивно».

Значение по умолчанию для swappiness равно 60 . Вы можете временно изменить его (до следующей перезагрузки), введя команду:

$ sudo echo 50 > /proc/sys/vm/swappiness

Или, например, чтобы установить значение swappiness равным 10 через sysctl, нужно выполнить следующую команду:

$ sudo sysctl vm.swappiness=10

Если вы хотите перманентно изменить данное значение, то вам необходимо определить параметр vm.swappiness в файле /etc/sysctl.conf.

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

Заключение

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

Кроме того, есть затраты, связанные с (физическим) добавлением большего объема оперативной памяти, в то время как нет затрат на использование памяти подкачки. Кроме того, не всегда представляется возможным добавить несколько планок оперативной памяти в ваш компьютер. Следовательно, единственный вариант, который у нас остается, — это использовать память подкачки, которая может заставить нашу систему работать эффективнее без каких-либо затрат.

Источник

Оцените статью