Manpages

名 前

move_pages − あ る プ ロ セ ス の 個 々 の ペ ー ジ を 別 の ノ ー ド に 移 動 す る

書 式

#include <numaif.h>

long move_pages(int pid, unsigned long count, void **pages,
const int *
nodes, int *status, int flags);

−lnuma と リ ン ク す る 。

説 明

move_pages() は 、 プ ロ セ ス pid の 指 定 さ れ た ペ ー ジ pagesnodes で 指 定 さ れ た メ モ リ ー ノ ー ド に 移 動 す る 。 移 動 の 結 果 は status に 反 映 さ れ る 。 flags で は 移 動 さ れ る ペ ー ジ に 関 す る 制 約 を 指 定 す る 。

pid は 、 移 動 さ れ る ペ ー ジ が 属 す る プ ロ セ ス の ID で あ る 。 別 の プ ロ セ ス の ペ ー ジ を 移 動 す る た め に は 、 呼 び 出 し 元 が 特 権 (CAP_SYS_NICE) を 持 っ て い る か 、 呼 び 出 し た プ ロ セ ス の 実 ユ ー ザ ー ID か 実 効 ユ ー ザ ー ID が ペ ー ジ 移 動 対 象 の プ ロ セ ス の 実 ユ ー ザ ー ID か 保 存 set−user−ID の ど ち ら か と 一 致 し な け れ ば な ら な い 。 pid が 0 の 場 合 、 move_pages() は 呼 び 出 し た プ ロ セ ス の ペ ー ジ を 移 動 す る 。

count は 移 動 す る ペ ー ジ 数 で あ る 。 count に よ り pages, nodes, status の 3 つ の 配 列 の 大 き さ が 定 義 さ れ る 。

pages は 、 移 動 す べ き ペ ー ジ へ の ポ イ ン タ ー の 配 列 で あ り 、 各 ポ イ ン タ ー は ペ ー ジ 境 界 に 揃 え た 値 を 指 定 す べ き で あ る 。 pid で 指 定 さ れ た プ ロ セ ス で 見 え る ア ド レ ス を 指 定 す る 。

nodes は 、 各 ペ ー ジ の 希 望 の 移 動 場 所 を 示 す 整 数 値 の 配 列 で あ り 、 配 列 の 各 要 素 は ノ ー ド 番 号 で あ る 。 nodes に は NULL を 指 定 す る こ と も で き 、 こ の 場 合 に は move_pages() は ど の ペ ー ジ も 移 動 し な い が 、 各 ペ ー ジ が 現 在 配 置 さ れ て い る ノ ー ド を 配 列 status に 格 納 し て 返 す 。 ど の ペ ー ジ を 移 動 す る 必 要 が あ る か を 判 断 す る た め に 、 各 ペ ー ジ の 状 態 の 取 得 が 必 要 な 場 合 も あ る 。

status は 、 各 ペ ー ジ の 状 態 を 表 す 整 数 値 の 配 列 で あ る 。 こ の 配 列 に 有 効 な 値 が 格 納 さ れ る の は 、 move_pages() が エ ラ ー を 返 さ な か っ た 場 合 だ け で あ る 。

flags に は 、 ど の 種 類 の ペ ー ジ を 移 動 す る か を 指 定 す る 。 MPOL_MF_MOVE は 、 そ の プ ロ セ ス が 排 他 的 に 使 用 し て い る ペ ー ジ だ け を 移 動 す る こ と を 意 味 す る 。 MPOL_MF_MOVE_ALL は 、 複 数 の プ ロ セ ス 間 で 共 有 さ れ て い る ペ ー ジ も 移 動 で き る こ と を 意 味 す る 。 MPOL_MF_MOVE_ALL を 使 用 す る た め に は 、 そ の プ ロ セ ス が 特 権 (CAP_SYS_NICE) を 持 っ て い な け れ ば な ら な い 。

status 配 列 に 格 納 さ れ る ペ ー ジ 状 態
status
配 列 の 各 要 素 と し て 、 以 下 の 値 が 返 さ れ る 。
0..MAX_NUMNODES
そ の ペ ー ジ が 配 置 さ れ て い る ノ ー ド を 示 す 。
−EACCES
そ の ペ ー ジ は 複 数 の プ ロ セ ス に よ り マ ッ プ さ れ て お り 、 MPOL_MF_MOVE_ALL が 指 定 さ れ た 場 合 に の み 移 動 で き る 。

−EBUSY そ の ペ ー ジ が 現 在 ビ ジ ー で あ り 、 移 動 で き な い 。 後 で も う 一 度 試 す こ と 。 こ の 状 況 は 、 ペ ー ジ が

I/O の 実 行 中 で あ っ た り 、 カ ー ネ ル の 他 の サ ブ シ ス テ ム が そ の ペ ー ジ へ の 参 照 を 保 持 し て い る 場 合 に 発 生 す る 。
−EFAULT
そ の ペ ー ジ が zero page で あ る か 、 そ の メ モ リ ー 領 域 は そ の プ ロ セ ス に よ り マ ッ プ さ れ て い な い 。

−EIO ペ ー ジ を 書 き 戻 す

(write back) こ と が で き な い 。 ペ ー ジ が dirty

で 、 フ ァ イ ル シ ス テ ム が dirty な ペ ー ジ を 移 動 で き る よ う な 移 動 機 能 を 提 供 し て い な い た め 、 そ の ペ ー ジ を 移 動 す る た め に は ペ ー ジ を 書 き 戻 さ な け れ ば な ら な い 。

−EINVAL

dirty な ペ ー ジ を 移 動 で き な い 。 フ ァ イ ル シ ス テ ム が dirty な ペ ー ジ を 移 動 す る た め の 機 能 を 提 供 し て お ら ず 、 ペ ー ジ を 書 き 戻 す 能 力 も な い 。

−ENOENT ペ ー ジ が 存 在 し な い 。
−ENOMEM
移 動 先 の ノ ー ド で メ モ リ ー を 確 保 す る こ と が で き な い 。

返 り 値

成 功 す る と 、 move_pages() は 0 を 返 す 。 エ ラ ー の 場 合 、 −1 を 返 し 、 errno に エ ラ ー を 示 す 値 を 設 定 す る 。

エ ラ ー

E2BIG 移 動 す べ き ペ ー ジ が 多 過 ぎ る 。

EACCES 移 動 先 の ノ ー ド の い ず れ か が 現 在 の

CPU 集 合 で は 許 可 さ れ て い な い 。

EFAULT パ ラ メ ー タ ー 配 列 に ア ク セ ス で き な か

っ た 。

EINVAL

flagsMPOL_MF_MOVE で も MPOL_MF_MOVE_ALL で も な い 値 が 指 定 さ れ た か 、 カ ー ネ ル ス レ ッ ド の ペ ー ジ を 移 動 さ せ よ う と し た 。

ENODEV

移 動 先 の ノ ー ド の い ず れ か が オ ン ラ イ ン で な い 。

ENOENT 移 動 が 必 要 な ペ ー ジ が 全 く 見 つ か ら な か っ た 。 指 定 さ れ た 全 て の ペ ー ジ が 、 す で に 移 動 先 の ノ ー ド に 存 在 す る か 、 存 在 し な い か 、 無 効 な ア ド レ ス で あ っ た か 、 複 数 の プ ロ セ ス に よ っ て マ ッ プ さ れ て い て 移 動 で き な か っ た か 、 の い ず れ か で あ っ た 。

EPERM 呼 び 出 し 元 は

MPOL_MF_MOVE_ALL を 指 定 し た が 、 十 分 な 特 権 (CAP_SYS_NICE) を 持 っ て い な い 。 ま た は 、 呼 び 出 し 元 が 他 の ユ ー ザ ー に 属 す る プ ロ セ ス の ペ ー ジ を 移 動 し よ う と し た が 、 そ れ を 行 え る だ け の 特 権 (CAP_SYS_NICE) を 持 っ て い な か っ た 。

ESRCH プ ロ セ ス が 存 在 し な い 。

バ ー ジ ョ ン

move_pages() は 、 バ ー ジ ョ ン 2.6.18 で 初 め て Linux に 登 場 し た 。

準 拠

こ の シ ス テ ム コ ー ル は Linux 固 有 で あ る 。

注 意

ラ イ ブ ラ リ に よ る サ ポ ー ト に つ い て は numa(7) を 参 照 。 現 在 の CPU 集 合 で 許 可 さ れ て い る ノ ー ド の 集 合 を 取 得 す る に は 、 フ ラ グ MPOL_F_MEMS_ALLOWED を 指 定 し て get_mempolicy(2) を 使 用 す れ ば よ い 。 取 得 し た 情 報 は 、 CPU 集 合 の 手 動 ま た は 自 動 で の 再 構 成 に よ り い つ 何 時 変 化 し て し ま う か 分 か ら な い 。 こ の 関 数 を 使 用 す る と 、 ペ ー ジ の 位 置 (ノ ー ド ) が 指 定 さ れ た ア ド レ ス に 対 し て 設 定 さ れ た メ モ リ ー ポ リ シ ー (mbind(2) 参 照 ) や 指 定 さ れ た プ ロ セ ス に 対 し て 設 定 さ れ た メ モ リ ー ポ リ シ ー (set_mempolicy(2) 参 照 ) に 違 反 し て し ま う 可 能 性 が あ る 。 つ ま り 、 メ モ リ ー ポ リ シ ー は move_pages() で 使 わ れ る 移 動 先 ノ ー ド を 制 限 し な い と い う こ と で あ る 。 ヘ ッ ダ ー フ ァ イ ル <numaif.h> は glibc に は 含 ま れ て お ら ず 、 libnuma−devel か 同 様 の パ ッ ケ ー ジ を イ ン ス ト ー ル す る 必 要 が あ る 。

関 連 項 目

get_mempolicy(2), mbind(2), set_mempolicy(2), numa(3), numa_maps(5), cpuset(7), numa(7), migratepages(8), numastat(8)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。