SWAPON(2)

名前
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(5) のようなインメモリーファイルシステム上にある。

EINVAL (Linux 3.4 以降)
    (swapon()) swapflags に無効なフラグ値が指定された。

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 プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。