MIGRATE_PAGES
Section: Linux Programmer's Manual (2)
Updated: 2019-03-06
Index
JM Home Page
roff page
 
名前
migrate_pages - プロセスの全ページを別のノード集合に移動する
 
書式
#include <numaif.h>
long migrate_pages(int pid, unsigned long maxnode,
                   const unsigned long *old_nodes,
                   const unsigned long *new_nodes);
-lnuma とリンクする。
 
説明
MIGRATE_PAGES() は、メモリーノード old_nodes にあるプロセス pid
の全ページを、メモリーノード new_nodes に移動しようとする。old_nodes で
指定されたメモリーノードに置かれていないページは移動されない。
カーネルは、 new_nodes への移動の際に、 old_nodes 内の相対的な
トポロジー関係を可能な限り維持しようとする。
引数 old_nodes と new_nodes は、最大で maxnode ビットから
構成されるノード番号のビットマスクへのポインターである。
各ビットマスクは符号なし long 整数の配列として管理される
(maxnode で指定された長さを越えた部分のビットは無視される)。
引数 maxnode は最大ノード番号であり、ビットマスクの長さに 1 を
加えた値となる (これは mbind(2) と同じだが、 select(2) とは違う)。
引数 pid は、移動を行うページの所有者のプロセス ID である。
別のプロセスのページを移動するには、呼び出したプロセスが特権
(CAP_SYS_NICE) を持っているか、呼び出したプロセスの実ユーザー ID か
実効ユーザー ID がページ移動の対象プロセスの実ユーザー ID か saved-set
ユーザー ID と一致していなければならない。pid が 0 の場合、
migrate_pages() は呼び出したプロセスのページを移動する。
別のプロセスと共有しているページは、呼び出したプロセスが
CAP_SYS_NICE 特権を持っている場合にのみ移動される。
 
返り値
migrate_pages() は、移動できなかったページ数を返す
(つまり、移動に成功した場合は返り値は 0 となる)。
エラーの場合、 -1 を返し、 errno にエラーを示す値を設定する。
 
エラー
- EFAULT
 - 
old_nodes/new_nodes と maxnode で指定されたメモリー領域の一部または全部が、
呼び出し元がアクセス可能なアドレス空間外を指している。
 - EINVAL
 - 
The value specified by maxnode exceeds a kernel-imposed limit.  Or,
old_nodes or new_nodes specifies one or more node IDs that are greater
than the maximum supported node ID.  Or, none of the node IDs specified by
new_nodes are on-line and allowed by the process's current cpuset
context, or none of the specified nodes contain memory.
 - EPERM
 - 
pid で指定されたプロセスのページを移動するのに必要な特権
(CAP_SYS_NICE) がなかった。または、指定された対象ノードにアクセス
するのに必要な権限 (CAP_SYS_NICE) がなかった。
 - ESRCH
 - 
プロセス ID が pid のプロセスが見つからなかった。
 
 
バージョン
migrate_pages() システムコールは Linux 2.6.16 で初めて登場した。
 
準拠
このシステムコールは Linux 固有である。
 
注意
ライブラリによるサポートについては numa(7)  を参照。
呼び出し元プロセスの CPU 集合で許可されているノード集合を取得するには、
MPOL_F_MEMS_ALLOWED フラグを付けて get_mempolicy(2) を使うこと。
この情報は、手動/自動に限らず CPU 集合の再構成によりいつでも
変更されることがある点に注意してほしい。
migrate_pages を使用すると、ページが置かれる場所 (ノード) が、指定
されたアドレスに対して設定されたメモリーポリシー (mbind(2) 参照) や
指定されたプロセスに対して設定されたメモリーポリシー
(set_mempolicy(2) 参照) に違反する状況になる可能性がある。
すなわち、メモリーポリシーによる制約は migrate_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)
Linux カーネルソースの Documentation/vm/page_migration.rst
 
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/ に書かれている。
 Index
- 名前
 - 
 - 書式
 - 
 - 説明
 - 
 - 返り値
 - 
 - エラー
 - 
 - バージョン
 - 
 - 準拠
 - 
 - 注意
 - 
 - 関連項目
 - 
 - この文書について
 - 
 
This document was created by
man2html,
using the manual pages.
Time: 16:46:42 GMT, November 24, 2023