名 前
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 が 既 に ス ワ ッ プ 領 域 と し て 使 用 さ れ て い る 。
フ ァ イ
ル path は 存 在 す
る が 、 通 常 の
フ ァ イ ル も ブ
ロ ッ ク デ バ イ
ス も 参 照 し て
い な い 。 (swapon()) 指 定 さ れ た パ ス が 有 効 な ス ワ ッ プ の 署 名 (signature) を 含 ん で い な い か 、 tmpfs の よ う な イ ン メ モ リ ー フ ァ イ ル シ ス テ ム 上 に あ る 。 EINVAL (Linux 3.4 以 降 ) (swapon()) flags に 無 効 な フ ラ グ 値 が 指 定 さ れ た 。
オ ー プ ン さ れ た フ ァ イ ル の 総 数 が シ ス テ ム 全 体 の 上 限 に 達 し て い た 。
開 始 す る の に 十 分 な メ モ リ ー が シ ス テ ム に な い 。
は 、 最 大 数 の ス ワ ッ プ フ ァ イ ル が す で に 使 用 さ れ て い る (下 記 の 「 注 意 」 の 節 を 参 照 )。 準 拠こ れ ら の 関 数 は 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/ に 書 か れ て い る 。 |