Manpages

名 前

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 引 き 数 は 、 ど の ペ ー ジ を 解 放 す る か を 指 定 す る : addralloc_hugepages() の 呼 び 出 し の 返 り 値 で あ る (全 て の ユ ー ザ ー が メ モ リ ー を 解 放 し た と き に 、 そ の メ モ リ ー は 初 め て 実 際 に 解 放 さ れ る )。 alloc_hugepages() の addr 引 き 数 は ヒ ン ト で あ り 、 カ ー ネ ル は そ れ に 従 う か も し れ な い し 、 従 わ な い か も し れ な い 。 ア ド レ ス は 正 し く 配 置 さ れ な け れ ば な ら な い 。

len 引 き 数 は 要 求 さ れ た セ グ メ ン ト の 長 さ で あ る 。 こ れ は ヒ ュ ー ジ ペ ー ジ の サ イ ズ の 倍 数 に し な け れ ば な ら な い 。

prot 引 き 数 は セ グ メ ン ト の メ モ リ ー 保 護 を 指 定 す る 。 こ れ は PROT_READ, PROT_WRITE, PROT_EXEC の い ず れ か で あ る 。

key が 正 で な い 限 り 、 flag 引 き 数 は 無 視 さ れ る 。 key が 正 で 、 か つ flagIPC_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 プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。