
特定のプロセスにメモリが割り当てられる場所を調べたいと思います。
より具体的には、私は2つの物理CPUを持つccNUMAシステムでOpenMPパラレルFortranバイナリを実行しています。私が懸念しているのは、このプログラムが変数を初期化するときに最初のタッチルールに違反することです。これにより、メモリが不均衡な方法で割り当てられます。つまり、ほとんどのメモリが2つのCPU間でバランスを取るのではなく、1つの物理CPUアドレス空間に割り当てられます。その結果、メモリ帯域幅が制限されたアプリケーションのスケーラビリティが低下します。
残念ながら、ソースコードにアクセスすることはできません。したがって、メモリ割り当てを調べるのが良い方法のようです。他のアイデアも大歓迎です。
コメントに基づいて編集:OpenSUSE Leap 42.3、カーネルバージョン4.4.103-36-default
答え1
Linuxでは、次のコマンドを使用してプロセスの仮想アドレス空間を照会できます。工程(5)&マッピング(1)。
したがって、プロセス1234の場合は、cat /proc/1234/maps
を実行しますpmap 1234
。cat /proc/1234/numa_maps
また、見ることができます沼(7)、numa_maps(5)、メモリポリシー設定(2)、デジタル化(8)。