SET_MEMPOLICY

Section: Linux Programmer's Manual (2)
Updated: 2006-02-07
Index JM Home Page roff page
 

名前

set_mempolicy - プロセスとその子プロセスの NUMA メモリの デフォルトポリシーを設定する  

書式

#include <numaif.h>

int set_mempolicy(int policy, unsigned long *nodemask,
                  unsigned long maxnode);
 

説明

set_mempolicy() は、呼び出し元プロセスの NUMA ポリシーを policy に設定する。

NUMA (非対称メモリアクセス) マシンでは、CPU により メモリコントローラが異なり、距離も異なっている。 メモリポリシーは、どのノードのメモリをそのプロセスに 割り当てられるかを定めるものである。

set_mempolicy() は、プロセスのデフォルトのポリシーを定める。 さらに、 mbind(2) を使って、特定のメモリ領域に対してポリシーを設定することができる。 設定したポリシーは、プロセスに新規のページが割り当てられるときにのみ 適用される。無名メモリ (anonymous memory) の場合、新規ページの割り当ては アプリケーションが初めてページにアクセスした際に行われる。

指定可能なポリシーは MPOL_DEFAULT, MPOL_BIND, MPOL_INTERLEAVE, MPOL_PREFERRED である。 MPOL_DEFAULT 以外のポリシーの場合、呼び出し元が nodemask パラメータでポリシーを適用するノードを指定する必要がある。 nodemask はノードを表すビットフィールドへのポインタであり、 maxnode 個のビットから構成される。 ビットフィールドの大きさは、直近の sizeof(unsigned long) の倍数に切り上げられるが、カーネルが使用するのは maxnode 個までのビットだけである。

MPOL_DEFAULT ポリシーがデフォルトであり、これを指定するとローカルのメモリが 割り当てられる、つまりメモリ割り当てのきっかけとなった CPU の ノードにメモリが割り当てられる。 nodemask には NULL を指定すべきである。

MPOL_BIND は厳しいポリシーで、メモリ割り当ては nodemask に指定されたノードに限定される。 他のノードへの割り当ては行われない。

MPOL_INTERLEAVE では、メモリ割り当てを nodemask に指定されたノードに交互に行う。 このポリシーでは、遅延ではなく、帯域が最適化される。 効果を得るには、メモリ領域をある程度大きくすべきであり、 少なくとも 1MB 以上必要である。

MPOL_PREFERRED は、割り当て時に優先されるノードを設定する。 カーネルはまず優先ノードに割り当てを行おうとし、 優先ノードに空きメモリが少ない場合に他のノードに割り当てを行う。 nodemask の最初のノードだけが使用される。 nodemask にどのノードもセットされていなければ、 (MPOL_DEFAULT と同じように) 割り当てのきっかけとなった CPU のノードにメモリ割り当てが行われる。

メモリポリシーは execve(2) の前後で保持され、 fork(2) や clone(2) を使って作成された子プロセスに継承される。  

返り値

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

準拠

このシステムコールは Linux 独自である。  

注意

ページがスワップ・アウトされる場合には、 プロセスポリシーの設定は推奨されない。  

バージョンとライブラリでの対応

mbind(2) 参照。  

関連項目

mbind(2), get_mempolicy(2), numactl(8), numa(3)


 

Index

名前
書式
説明
返り値
準拠
注意
バージョンとライブラリでの対応
関連項目

This document was created by man2html, using the manual pages.
Time: 04:32:01 GMT, November 19, 2007