強化された NUMA 対応アロケータに libnuma を使用しています。「numa man-page」または libnuma API で説明されているように機能しない関数がいくつかあります。正確には、次の関数に問題があります:numa_get_run_node_mask()
とnuma_node_to_cpus()
.
前者に関しては、API とマニュアルを読むとstruct bitmask *
、コンパイラが を要求する一方で、 を返すと書かれていますnodemask_t
。
後者は API 定義から 2 つのパラメーターを必要とするはずですが、コンパイラーは 3 つを要求します。3 つの引数を渡すと (ソース コード定義で見つけた次の宣言に従います)、使用numa_node_to_cpus_v1(int node, unsigned long *buffer, int bufferlen)
するbufferlenに関係なく、毎回segfaultが発生します。
言及するだけで、後者の関数は、コマンドを入力するときnuma_node_to_cpus()
と同じ用途です。ノード内のすべての cpu を取得するために使用されます。ソースコードを読んだところ、2 つの引数で正しく動作しました。numactl
numactl --hardware
int node, struct bitmask *mask
おそらく、修正が必要なバグや、libnuma のバージョンによって変更された API とソースの間に不一致がある可能性があります。(ところで、どの libnuma/numactl がマシンで実行されているかを確認するにはどうすればよいですか? サーバー上でリモートで作業していて、オプションnumactl
がないようです!)--version