Manpages

名 前

swapon, swapoff − フ ァ イ ル /デ バ イ ス へ の ス ワ ッ プ を 開 始 /停 止 す る

書 式

#include <unistd.h>
#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

SWAP_FLAG_DISCARD フ ラ グ が swapon() の swapflags 引 き 数 に 指 定 さ れ た 場 合 、 ス ワ ッ プ デ バ イ ス が 破 棄 (discard) 操 作 や trim 操 作 を サ ポ ー ト し て い る 場 合 に は 、 解 放 さ れ た ス ワ ッ プ ペ ー ジ は 再 利 用 さ れ る 前 に 破 棄 さ れ る (こ れ に よ り 、 SSD (Solid State Device) に よ っ て は 性 能 が 向 上 す る こ と が あ る が 、 た い て い は 性 能 の 向 上 は な い )。 「 注 意 」 も 参 照 の こ と 。 こ れ ら の 関 数 は 特 権 プ ロ セ ス (CAP_SYS_ADMIN ケ ー パ ビ リ テ ィ (capability) を 持 つ プ ロ セ ス ) の み が 使 用 で き る 。 優 先 度 そ れ ぞ れ の ス ワ ッ プ 領 域 は 高 (high) と 低 (low) の ど ち ら か の 優 先 度 を 持 つ 。 デ フ ォ ル ト の 優 先 度 は 低 で あ る 。 低 い 優 先 度 の 領 域 に お い て 、 新 し い 領 域 は 古 い 領 域 よ り さ ら に 低 い 優 先 度 を 持 つ 。

swapflags が 設 定 さ れ た も の は 全 て 高 い 優 先 度 と な り 、 デ フ ォ ル ト よ り も 高 い 優 先 度 を 持 つ 。 使 用 者 は そ れ ら に 負 で な い 値 が 指 定 で き る 。 大 き な 数 字 は 高 い 優 先 度 を 意 味 す る 。 高 い 優 先 度 の 領 域 か ら 順 に ス ワ ッ プ ペ ー ジ と し て 使 用 さ れ る 。 よ り 低 い 優 先 度 の 領 域 を 使 用 す る 前 に よ り 高 い 優 先 度 の 領 域 を 使 い 切 る 。 も し 二 つ 以 上 の 領 域 が 同 じ 優 先 度 を 持 ち 、 使 え る 中 で 一 番 高 い 優 先 度 で あ れ ば 、 そ れ ら の ペ ー ジ は 間 で ラ ウ ン ド ロ ビ ン 方 式 で 配 分 さ れ る 。

Linux 1.3.6 に お い て 、 カ ー ネ ル は 通 常 は こ れ ら の 規 則 に 従 っ て い る 。 し か し 例 外 も 存 在 し て い る 。

返 り 値

成 功 し た 場 合 は 0 が 返 さ れ る 。 エ ラ ー の 場 合 は −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。

エ ラ ー

EBUSY

(swapon() に お い て ) 指 定 さ れ た path が 既 に ス ワ ッ プ 領 域 と し て 使 用 さ れ て い る 。

EINVAL

フ ァ イ ル path は 存 在 す る が 、 通 常 の フ ァ イ ル も ブ ロ ッ ク デ バ イ ス も 参 照 し て い な い 。
EINVAL

(swapon()) 指 定 さ れ た パ ス が 有 効 な ス ワ ッ プ の 署 名 (signature) を 含 ん で い な い か 、 tmpfs の よ う な イ ン メ モ リ ー フ ァ イ ル シ ス テ ム 上 に あ る 。

EINVAL (Linux 3.4 以 降 )

(swapon()) flags に 無 効 な フ ラ グ 値 が 指 定 さ れ た 。

EINVAL

(swapoff()) path が 現 在 ス ワ ッ プ 領 域 で は な い 。

ENFILE

オ ー プ ン さ れ た フ ァ イ ル の 総 数 が シ ス テ ム 全 体 の 上 限 に 達 し て い た 。

ENOENT フ ァ イ ル

path が 存 在 し な い 。

ENOMEM ス ワ ッ プ を

開 始 す る の に 十 分 な メ モ リ ー が シ ス テ ム に な い 。

EPERM 使 用 者 が

CAP_SYS_ADMIN ケ ー パ ビ リ テ ィ を 持 っ て い な い 。 も し く

は 、 最 大 数 の ス ワ ッ プ フ ァ イ ル が す で に 使 用 さ れ て い る (下 記 の 「 注 意 」 の 節 を 参 照 )。

準 拠

こ れ ら の 関 数 は Linux 特 有 で あ り 、 移 植 を 意 図 し た プ ロ グ ラ ム で は 使 用 し て は い け な い 。 二 番 目 の swapflags 引 き 数 は Linux 1.3.2 か ら 導 入 さ れ た 。

注 意

パ ー テ ィ シ ョ ン や パ ス は mkswap(8) に よ っ て 準 備 さ れ て い な け れ ば な ら な い 。 使 用 で き る ス ワ ッ プ フ ァ イ ル の 数 に は 上 限 が あ り 、 そ の 上 限 は カ ー ネ ル 定 数 MAX_SWAPFILES で 定 義 さ れ る 。 MAX_SWAPFILES の 値 は 、 カ ー ネ ル 2.4.10 よ り 前 で は 8、 カ ー ネ ル 2.4.10 以 降 で は 32 で あ る 。 カ ー ネ ル 2.6.18 以 降 で は 、 カ ー ネ ル が CONFIG_MIGRATION オ プ シ ョ ン を 有 効 に し て 作 成 さ れ た 場 合 、 こ の 上 限 が 2 少 な い 値 (つ ま り 30) と な る (こ の カ ー ネ ル で は 、 mbind(2)migrate_pages(2) の ペ ー ジ マ イ グ レ ー シ ョ ン 機 能 用 に ス ワ ッ プ テ ー ブ ル の エ ン ト リ ー が 二 つ 予 約 さ れ る )。 カ ー ネ ル 2.6.32 以 降 で は 、 カ ー ネ ル が CONFIG_MEMORY_FAILURE オ プ シ ョ ン を 有 効 に し て 作 成 さ れ た 場 合 、 こ の 上 限 が さ ら に 1 少 な い 値 と な る 。 ス ワ ッ プ ペ ー ジ の 破 棄 は 、 カ ー ネ ル 2.6.29 で 導 入 さ れ 、 そ の 後 カ ー ネ ル 2.6.36 で SWAP_FLAG_DISCARD フ ラ グ が 指 定 さ れ た 場 合 に だ け 実 行 さ れ る よ う に な っ た が 、 今 で も 、 こ の フ ラ グ ビ ッ ト が 指 定 さ れ て い な い 場 合 で あ っ て も 、 swapon が 呼 び 出 さ れ た 際 に ス ワ ッ プ 領 域 全 体 の 破 棄 が 行 わ れ る 。

関 連 項 目

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

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。