MIGRATE_PAGES

Section: Linux Programmer's Manual (2)
Updated: 2019-03-06
Index JM Home 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/ に書かれている。

関連キーワード

nodes   ノード   pages   メモリー   ビット   集合   mempolicy   long   マスク   特権   specified   node   ポリシー   migrate   numaif   カーネル   最大   番号   一部   アドレス   kernel   none   相対的   トポロジー   関係

Linux マニュアル 一覧

関連するコマンド・関数

move_pages.2   get_mempolicy.2   numa.7   set_mempolicy.2   mbind.2   rcsfile.5
 

Index

名前
書式
説明
返り値
エラー
バージョン
準拠
注意
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:38:55 GMT, October 11, 2026