void *alloc_hugepages(int key, void *addr, size_t len, int prot, int flag); int free_hugepages(void *addr);
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 が返される。
ヒュージページの最大数は、 hugepages= 起動パラメーターを使って指定できる。
[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]