Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

6.3.4. numactl で NUMA 親和性を管理

numactl を使用すると指定したスケジュールまたはメモリー配置ポリシーでプロセスを実行することができます。Numactl は共有メモリーセグメントやファイルに永続的なポリシーを設定したり、プロセスのプロセッサー親和性やメモリー親和性を設定することもできます。
NUMA トポロジーのシステムではプロセッサーのメモリーへのアクセス速度はプロセッサーとメモリーバンク間の距離が離れるほど低下していきます。したがってパフォーマンス重視のアプリケーションの場合はメモリー割り当てをできるだけ近距離のメモリーバンクから行うよう設定することが重要となります。メモリーと CPU は同じ NUMA ノードのものを使用するのが最適です。
パフォーマンスに敏感するマルチスレッドアプリケーションは、特定のプロセッサーではなく特定の NUMA ノードで実行されるように設定することで、メリットが得られます。これが適切なかどうかは、システムやアプリケーションの要件によって異なります。複数のアプリケーションスレッドが同じキャッシュされたデータにアクセスする場合、同じプロセッサーでこれらのスレッドを実行するように設定することが適切な場合があります。ただし、異なるデータにアクセスし、キャッシュする複数のスレッドが同じプロセッサーで実行される場合、各スレッドは、以前のスレッドによってアクセスされたキャッシュデータをエビクトする可能性があります。つまり、それぞれのスレッドがキャッシュを「ミス」するため、メモリーからデータを取り出すため実行時間を浪費してキャッシュの入れ替えを行います。「perf」 の説明に従って perf ツールを使用して、過剰な数のキャッシュミスの有無を確認できます。
Numactl はプロセッサーとメモリー親和性を管理する場合に役立つオプションがいくつか用意されています。詳細は、「numastat」 または man ページを参照してください。
$ man numactl
注記
numactl パッケージには libnuma ライブラリーが収納されます。このライブラリーは、カーネル対応の NUMA ポリシーに対するシンプルなプログラミングインターフェースを提供し、numactl アプリケーションに比べより高度な調整を行うことができます。詳細は man ページをご覧ください。
$ man numa