numactrl --interleave
を使用して特定のプロセスのnumaモードを「インターリーブ」(NBを参照)に設定することは可能であることを知っていますが、可能かどうか知りたいですこれをシステム全体のデフォルトにする(別名「システムポリシー」を変更する)たとえば、これを実現するためのカーネルブートフラグがある場合、
NB:ここでは、割り当てられたページをNUMAノード間でインターリーブするカーネルの動作について説明しています-キャッシュラインをインターリーブするBIOSレベルでのメモリコントローラーの動作設定ではありません
RHEL/CentOS/Fedoraを使用している場合は、 numad デーモンを使用することをお勧めします。 (RedHatペイウォールリンク)。
私はnumactl --interleave
ディレクティブをあまり使用していませんが、ワークロードにそれが必要であると判断したようです。より良いコンテキストを提供するために、なぜこれが当てはまるのか説明できますか?
編集:
明示的なnumactl
定義を推奨するほとんどのアプリケーションは、 libnumaライブラリ呼び出し を行うか、 ラッパースクリプト にnumactl
を組み込むようです。
numad
側には、コマンドラインまたは/etc/numad.conf
..で指定できる構成オプションがあります。
-K <0|1>
This option controls whether numad keeps interleaved memory spread across NUMA nodes, or
attempts to merge interleaved memory to local NUMA nodes. The default is to merge interleaved
memory. This is the appropriate setting to localize processes in a subset of the system’s
NUMA nodes. If you are running a large, single-instance application that allocates inter-
leaved memory because the workload will have continuous unpredictable memory access patterns
(e.g. a large in-memory database), you might get better results by specifying -K 1 to instruct
numad to keep interleaved memory distributed.
Xが100xコアカウントであるnumad -K 1 -u X
のようなものでこれを試すと、これが役立つかもしれないと言う人もいます。それを試してみてください。
LinuxおよびNUMAに関するHPのProLiantホワイトペーパー も参照してください。