Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
alloc_hugepages, free_hugepages - 大きなサイズのページの割り当てと解放を行う
書式
void *alloc_hugepages(int key, void *addr, size_t len, int prot, int flag); int free_hugepages(void *addr);
説明
システムコール alloc_hugepages() と free_hugepages() は Linux 2.5.36 で導入され、2.5.54 で再び削除された。 これらのシステムコールは i386 と ia64 のみで (かつ CONFIG_HUGETLB_PAGE を指定してビルドされた場合に) 存在する。 Linux 2.4.20 では syscall 番号が存在するが、 呼び 出すとエラー ENOSYS で失敗する。 i386 では、メモリー管理ハードウェアは通常のページ (4 KiB) と 大きなサイズのページ (以 下、ヒュージページ; 2MiB または 4 MiB) を 扱うことができる。 同様に、ia64 もいくつかのサイ ズのヒュージページを扱うことができる。 これらのシステムコールは、ヒュージページをプロセス のメモリーにマップしたり、 再び解放したりする。 ヒュージページはメモリー内にロックされ、ス ワップされない。 key 引数は識別子である。 0 の場合、ページは非公開になり、子プロセスに継承されない。 正の場 合、ページは同じ key を使う他のアプリケーションと共有され、子プロセスに継承される。 free_hugepages() の addr 引数は、どのページを解放するかを指定する: addr は alloc_hugepages() の呼び出しの返り値である (全てのユーザーがメモリーを解放したときに、 そ のメモリーは初めて実際に解放される)。 alloc_hugepages() の addr 引数はヒントであり、カー ネルはそれに従うかもしれないし、 従わないかもしれない。 アドレスは正しく配置されなければな らない。 len 引数は要求されたセグメントの長さである。 これはヒュージページのサイズの倍数にしなけれ ばならない。 prot 引数はセグメントのメモリー保護を指定する。 これは PROT_READ, PROT_WRITE, PROT_EXEC の いずれかである。 key が正でない限り、 flag 引数は無視される。 key が正で、かつ flag が IPC_CREAT であり、か つ指定された key で (セグメントが) 何も存在しない場合、 新しいヒュージページセグメントが作 成される。 flag が設定されておらず、かつ指定された key のセグメントが存在しない場合、 ENOENT が返される。
返り値
成功した場合、 alloc_hugepages() は割り当てられた仮想アドレスを返し、 free_hugepages() は 0 を返す。 失敗した場合、-1 を返し、 errno が適切に設定される。
エラー
ENOSYS このシステムコールはカーネルでサポートされていない。
ファイル
/proc/sys/vm/nr_hugepages 設定された hugetlb ページの数。 このファイルは読み書きできる。 /proc/meminfo 設定された hugetlb ページの数と、 3 つの変数 HugePages_Total, HugePages_Free, Hugepagesize の サイズについての情報を提供する。
準拠
このシステムコールは Intel プロセッサ上の Linux に固有のものであり、 移植性が必要なプログ ラムで使うべきでない。
注意
これらのシステムコールはなくなった。 これらは Linux 2.5.36 から 2.5.54 にのみ存在する。 代 わりに今は hugetlbfs ファイルシステムを使うことができる。 (CPU がサポートしている場合) ヒュージページを持つメモリーは、 mmap(2) を使ってこの仮想ファイルシステムでファイルをマッ プすることで取得できる。 ヒュージページの最大数は、 hugepages= 起動パラメーターを使って指定できる。
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。