Scroll to navigation

SWAPON(2) Руководство программиста Linux SWAPON(2)

ИМЯ

swapon, swapoff - запускает/останавливает подкачку данных в файл/устройство

ОБЗОР

#include <unistd.h>
#include <asm/page.h> /* для PAGE_SIZE */
#include <sys/swap.h>

int swapon(const char *path, int swapflags);
int swapoff(const char *path);

ОПИСАНИЕ

swapon() включает использование файла или блочного устройства, указанного в path, в качестве подкачки данных. swapoff() выключает использование файла или блочного устройства, указанного в path, в качестве подкачки данных.

Если при вызове swapon() в аргументе swapflags установлен флаг SWAP_FLAG_PREFER, то новое пространство подкачки будет иметь больший приоритет, чем используемый по умолчанию. Приоритет задаётся в swapflags следующим образом:

(prio << SWAP_FLAG_PRIO_SHIFT) & SWAP_FLAG_PRIO_MASK

Если в аргументе swapflags вызова swapon() указан флаг SWAP_FLAG_DISCARD, то освобождаемые страницы подкачки будут исключены (discard) до того как они задействуются повторно (если устройство подкачки поддерживает операцию исключения или обрезки). Это может улучшить производительность на некоторых твёрдотельных накопителях, но, чаще всего, нет. Также смотрите ЗАМЕЧАНИЯ.

Эти функции могут использоваться только привилегированным процессом (имеющим мандат CAP_SYS_ADMIN).

Приоритет

Каждое пространство подкачки имеет приоритет, высокий или низкий. По умолчанию задается низкий приоритет. Внутри пространств с низким приоритетом, новые пространства имеют ещё меньший приоритет, чем старые.

Все приоритеты, установленные с помощью swapflags, выше используемого по умолчанию. Приоритет может быть любым неотрицательным числом (определяется вызывающим). Большее значение соответствует большему приоритету.

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

В Linux 1.3.6 работа ядра обычно следует этим правилам, но существуют исключения.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.

ОШИБКИ

(для swapon()) Указанный path уже используется в качестве пространства подкачки.
Файл path существует, но не является обычным файлом или блочным устройством; или, для swapon(), указанный путь не имеет правильной сигнатуры подкачки или располагается в файловой системе, работающей в памяти, например, tmpfs; или, для swapoff(), path в данный момент не является пространством подкачки.
Достигнуто максимальное количество открытых файлов в системе.
Файл path не существует.
Не хватает памяти ядра для запуска процесса подкачки.
Вызывающий не имеет мандата CAP_SYS_ADMIN. Или превышен лимит количества используемых пространств подкачки; см. ЗАМЕЧАНИЯ далее.

СООТВЕТСТВИЕ СТАНДАРТАМ

Эти функции предназначены только для работы в Linux и не должны использоваться в переносимых программах. Второй параметр swapflags впервые появился в Linux 1.3.2.

ЗАМЕЧАНИЯ

Раздел или путь должны быть подготовлены к подкачке при помощи mkswap(8).

Есть верхний предел на количество используемых файлов подкачки, он определяется константой ядра MAX_SWAPFILES. До ядра версии 2.4.10 значение MAX_SWAPFILES было равно 8; начиная с ядра 2.4.10, значение стало 32. Начиная с ядра 2.6.18, предел уменьшается на 2 (то есть стало 30), если ядро собирается с параметром CONFIG_MIGRATION (который резервирует 2 элемента таблицы подкачки для возможности переноса страниц mbind(2) и migrate_pages(2)). Начиная с ядра 2.6.32, предел ещё сокращается на 1, если ядро собирается с параметром CONFIG_MEMORY_FAILURE.

Исключение (discard) страниц подкачки появилось в ядре версии 2.6.29, флаг условия SWAP_FLAG_DISCARD появился в ядре версии 2.6.36, но пока при вызове swapon() исключается вся область подкачки, даже если этот флаг не задан.

СМОТРИТЕ ТАКЖЕ

mkswap(8), swapoff(8), swapon(8)

2010-11-15 Linux