int swapon(const char *path, int swapflags);
int swapoff(const char *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) を持つプロセス) のみが使用できる。
swapflags が設定されたものは全て高い優先度となり、デフォルトよりも高い優先度を持つ。 使用者はそれらに負でない値が指定できる。 大きな数字は高い優先度を意味する。
高い優先度の領域から順にスワップページとして使用される。 より低い優先度の領域を使用する前により高い優先度の 領域を使い切る。もし二つ以上の領域が同じ優先度を持ち、 使える中で一番高い優先度であれば、それらのページは間で ラウンドロビン方式で配分される。
Linux 1.3.6 において、カーネルは通常はこれらの規則に従っている。 しかし例外も存在している。
使用できるスワップファイルの数には上限があり、その上限は カーネル定数 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 が呼び出された際にスワップ領域全体の破棄が行われる。
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]