1 .\" Copyright 2003,2004 Andi Kleen, SuSE Labs.
2 .\" and Copyright 2007 Lee Schermerhorn, Hewlett Packard
4 .\" %%%LICENSE_START(VERBATIM_PROF)
5 .\" Permission is granted to make and distribute verbatim copies of this
6 .\" manual provided the copyright notice and this permission notice are
7 .\" preserved on all copies.
9 .\" Permission is granted to copy and distribute modified versions of this
10 .\" manual under the conditions for verbatim copying, provided that the
11 .\" entire resulting derived work is distributed under the terms of a
12 .\" permission notice identical to this one.
14 .\" Since the Linux kernel and libraries are constantly changing, this
15 .\" manual page may be incorrect or out-of-date. The author(s) assume no
16 .\" responsibility for errors or omissions, or for damages resulting from
17 .\" the use of the information contained herein.
19 .\" Formatted or processed versions of this manual, if unaccompanied by
20 .\" the source, must acknowledge the copyright and authors of this work.
23 .\" 2006-02-03, mtk, substantial wording changes and other improvements
24 .\" 2007-08-27, Lee Schermerhorn <Lee.Schermerhorn@hp.com>
25 .\" more precise specification of behavior.
27 .\"*******************************************************************
29 .\" This file was generated with po4a. Translate the source file.
31 .\"*******************************************************************
33 .\" Japanese Version Copyright (c) 2006 Akihiro MOTOKI
34 .\" all rights reserved.
35 .\" Translated 2006-08-14, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.39
36 .\" Updated 2008-02-13, Akihiro MOTOKI, LDP v2.77
37 .\" Updated 2008-08-06, Akihiro MOTOKI, LDP v3.05
38 .\" Updated 2008-08-21, Akihiro MOTOKI, LDP v3.07
39 .\" Updated 2008-11-19, Akihiro MOTOKI, LDP v3.13
41 .TH GET_MEMPOLICY 2 2008\-08\-15 Linux "Linux Programmer's Manual"
43 get_mempolicy \- プロセスの NUMA メモリのポリシーを取得する
45 \fB#include <numaif.h>\fP
48 \fBint get_mempolicy(int *\fP\fImode\fP\fB, unsigned long *\fP\fInodemask\fP\fB,\fP
49 \fB unsigned long \fP\fImaxnode\fP\fB, unsigned long \fP\fIaddr\fP\fB,\fP
50 \fB unsigned long \fP\fIflags\fP\fB);\fP
55 \fBget_mempolicy\fP() は、呼び出し元プロセスもしくは指定されたメモリアドレスの NUMA ポリシーを \fIflags\fP
58 NUMA (非対称メモリアクセス) マシンでは、CPU により メモリコントローラが異なり、距離も異なっている。
59 メモリポリシーは、どのノードからメモリをそのプロセスに 割り当てるかを定めるものである。
61 \fIflags\fP に 0 が指定された場合、 (\fBset_mempolicy\fP(2) で設定された)
62 呼び出し元プロセスのデフォルトポリシーに関する情報を返す。 返されたポリシー [\fImode\fP と \fInodemask\fP] を
63 \fBset_mempolicy\fP(2) に渡すことで、そのプロセスのポリシーを \fBget_mempolicy\fP()
66 \fIflags\fP に \fBMPOL_F_MEMS_ALLOWED\fP (Linux 2.6.24 以降で利用可能) を指定すると、 \fImode\fP
67 引き数は無視され、 そのプロセスがその後の \fBmbind\fP(2) や \fBset_mempolicy\fP(2) で [\fIモードフラグ\fP
68 が指定されていない場合に ] 指定できるノード (メモリ) の集合が \fInodemask\fP に返される。 \fBMPOL_F_MEMS_ALLOWED\fP
69 を、 \fBMPOL_F_ADDR\fP や \fBMPOL_F_NODE\fP と同時に指定することはできない。
71 \fIflags\fP に \fBMPOL_F_ADDR\fP が指定された場合、 \fIaddr\fP
72 で指定されたメモリアドレスに適用されているポリシーに関する情報を返す。 \fBmbind\fP(2) や \fBnuma\fP(3)
73 で説明されているヘルパー関数を使って、 \fIaddr\fP を含むメモリ領域に対するポリシーが設定されていた場合には、
74 返されるポリシーはプロセスのデフォルトポリシーと違うことがある。
76 \fImode\fP 引き数が NULL でない場合、 \fBget_mempolicy\fP() は要求された NUMA ポリシーのモードと追加の
77 \fIモードフラグ\fP を \fImode\fP が指す場所に格納する。 \fInodemask\fP が NULL 以外の場合、そのポリシーに対応するノードマスクを
78 この引き数が指す場所に格納する。 \fImaxnode\fP には \fInodemask\fP に格納できるノード ID の数、つまり最大ノード ID に 1
79 を足した値を指定する。 \fImaxnode\fP で指定された値は常に \fIsizeof(unsigned long)\fP の倍数に切り上げられる。
81 \fIflags\fP で \fBMPOL_F_NODE\fP と \fBMPOL_F_ADDR\fP の両方が指定された場合、 \fBget_mempolicy\fP()
82 はアドレス \fIaddr\fP が割り当てられているノードのノード ID を \fImode\fP が指す場所に入れて返す。
83 指定されたアドレスにどのページもまだ割り当てられていない場合、 \fBget_mempolicy\fP()
84 は、あたかもそのプロセスがそのアドレスに対して読み込みアクセスを 実行したかのようにページの割り当てを行い、ページが割り当てられた ノードの ID
87 .\" Note: code returns next interleave node via 'mode' argument -Lee Schermerhorn
88 \fIflags\fP で \fBMPOL_F_NODE\fP は指定されたが、 \fBMPOL_F_ADDR\fP は指定されていない場合で、かつ
89 そのプロセスの現在のポリシーが \fBMPOL_INTERLEAVE\fP の場合、 \fBget_mempolicy\fP()
90 は、そのプロセスに対して割り当てられたカーネルの内部ページで 次にインターリーブ用に使用されるノードのノード ID を、 NULL でない
91 \fImode\fP 引き数が指す場所に入れて返す。 読み込みアクセス用として \fBMAP_PRIVATE\fP フラグ付きで \fBmmap\fP(2)
92 したプロセスメモリ領域や、 任意のアクセス用として \fBMAP_SHARED\fP フラグ付きで \fBmmap\fP(2)
93 したメモリ領域の、メモリマップされたファイルに対するページも 上記のプロセスに対して割り当てられたページに含まれる。
97 設定可能なポリシーの概要については \fBset_mempolicy\fP(2) を参照。
99 成功すると、 \fBget_mempolicy\fP() は 0 を返す。エラーの場合、\-1 を返し、 \fIerrno\fP にエラーを示す値を設定する。
103 \fInodemask\fP と \fImaxnode\fP で指定されたメモリ領域の一部または全部が、 呼び出し元がアクセス可能なアドレス空間外を指している。
106 \fImaxnode\fP で指定された値がシステムがサポートするノード ID の数よりも少ない。 または、 \fIflags\fP に
107 \fBMPOL_F_NODE\fP でも \fBMPOL_F_ADDR\fP でもない値が指定された。 または、 \fIflags\fP に \fBMPOL_F_ADDR\fP
108 が指定されており、 \fIaddr\fP が NULL である。 または、 \fIflags\fP に \fBMPOL_F_ADDR\fP がされておらず、
109 \fIaddr\fP が NULL でない。 または、 \fIflags\fP に \fBMPOL_F_NODE\fP が指定されており、 \fBMPOL_F_ADDR\fP
110 が指定されておらず、 プロセスの現在のポリシーが \fBMPOL_INTERLEAVE\fP でない。 または、 \fIflags\fP に
111 \fBMPOL_F_MEMS_ALLOWED\fP が指定されており、さらに \fBMPOL_F_ADDR\fP か \fBMPOL_F_NODE\fP
112 のいずれかが指定されている。 (他にも \fBEINVAL\fP となる場合がある。)
114 \fBget_mempolicy\fP() システムコールはバージョン 2.6.7 で Linux カーネルに追加された。
116 このシステムコールは Linux 固有である。
118 ライブラリによるサポートについては \fBnuma\fP(7) を参照。
120 \fBgetcpu\fP(2), \fBmbind\fP(2), \fBmmap\fP(2), \fBset_mempolicy\fP(2), \fBnuma\fP(3),
121 \fBnuma\fP(7), \fBnumactl\fP(8)
123 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.76 の一部
124 である。プロジェクトの説明とバグ報告に関する情報は
125 http://www.kernel.org/doc/man\-pages/ に書かれている。