NUMA(7) | Linux Programmer's Manual | NUMA(7) |
numa - 非対称型メモリーアーキテクチャーの概要
非対称型メモリーアクセス (Non-Uniform Memory Access; NUMA) は、 メモリーが複数のメモリーノードに分割されているマルチプロセッサシステム のことである。メモリーノードへのアクセス時間は、アクセス元の CPU と アクセス先のノードの相対的な位置関係に依存する (これに対し、対称型マルチプロセッサシステムでは、どの CPU から どのメモリーへのアクセス時間も同じである)。 通常は、 NUMA システムの各 CPU にはローカルのメモリーノードがあり、 そのメモリーノードには、他の CPU のローカルノードや全ての CPU で 共有されるバス上のメモリーよりも早くアクセスすることができる。
Linux カーネルには、次に示す NUMA 関連のシステムコールが実装されている: get_mempolicy(2), mbind(2), migrate_pages(2), move_pages(2), set_mempolicy(2). ただし、アプリケーションは通常は libnuma が提供するインターフェース を使用すべきである。下記の「ライブラリによるサポート」を参照。
このファイルは、プロセスの NUMA メモリーポリシーと割り当てに関する 情報を表示する。
各行に、そのプロセスが使用しているメモリー領域に関する情報が表示される。その他の情報 — そのメモリー領域に適用されているメモリーポリシーや、そのページがどのノード上に割り当てられているか、など — もあわせて表示される。
numa_maps は読み出し専用のファイルである。 /proc/<pid>/numa_maps から読み出しが行われると、 カーネルはそのプロセスの仮想アドレス空間をスキャンし、 メモリーの使用状況を報告する。 プロセスのメモリー領域の情報が 1 行に 1 領域で表示される。
各行の最初のフィールドはメモリー領域の開始アドレスを示す。 このフィールドは /proc/<pid>/maps ファイルの内容と対応している。 /proc/<pid>/maps には、メモリー領域の末尾のアドレスや、アクセス許可や共有といった他の情報も含まれる。
2 番目のフィールドは、 そのメモリー領域に現在適用されているメモリーポリシーを示す。 適用されているポリシーは、 必ずしもそのプロセスがこのメモリー領域に対して設定したポリシーとは限らない点に注意すること。 特に、 プロセスがその領域に対して「デフォルト」ポリシーを設定した場合、その領域に適用されるポリシーはプロセスのポリシーとなり、それが「デフォルト」ポリシーとなる場合もあればそうでない場合もある。
行の残りの部分には、そのメモリー領域に割り当てられたページに関する情報が入る。以下に詳細を示す。
NUMA インターフェースについて規定している標準はない。
Linux の NUMA システムコールと /proc インターフェースは、カーネルが 設定オプション CONFIG_NUMA を有効にして作成されている場合のみ、利用 可能である。
システムコールの定義を得るには -lnuma でリンクすること。 libnuma と必要なヘッダーファイル <numaif.h> は numactl パッケージで提供されている。
ただし、アプリケーションはこれらのシステムコールを直接利用すべきでない。 推奨される方法は、numactl パッケージの numa(3) の関数群が提供する 高レベルインターフェースの利用である。 numactl パッケージは ftp://oss.sgi.com/www/projects/libnuma/download/ で入手できる。 このパッケージが収録されている Linux ディストリビューションもある。 ディストリビューションによっては、開発用のライブラリとヘッダーファイルは 別パッケージ numactl-devel で提供されている。
get_mempolicy(2), mbind(2), move_pages(2), set_mempolicy(2), numa(3), cpuset(7), numactl(8)
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2012-08-05 | Linux |