合計36コアのUbuntu14.04 TLS =(2 x CPU x9コアx2ハイパースレッディング)では、lscpu
を教えてください:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 36
On-line CPU(s) list: 0-35
Thread(s) per core: 2
Core(s) per socket: 9
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 63
Stepping: 2
CPU MHz: 1200.000
BogoMIPS: 5858.45
Hypervisor vendor: Xen
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 25600K
NUMA node0 CPU(s): 0-8,18-26
NUMA node1 CPU(s): 9-17,27-35
知られているように、データ交換は、複数の異なるCPUのコア間(QPIリンク経由)よりも、単一CPUのコア間(キャッシュL3経由)で高速です。
0-8と9-17は2つのNUMAノードの物理CPUコアですが、18-26と27-35はハイパースレッディングCPUコアであり、最初はすべての物理コアを取得し、次に2回目のラウンドで使用することをお勧めします。各物理コアで2つの論理コアを使用します。つまり、これにより全体的なパフォーマンスが向上しますか?
または、8つ以上のスレッド(たとえば12スレッド)を起動すると、9つのスレッド(0-8)が1番目のCPU(NUMA node0)で実行され、3つのスレッド(9-12)が2番目のCPU(9-12)で実行されることを意味しますか? NUMAノード1)?そして、これはスレッド間の交換の待ち時間を増やし、全体的なパフォーマンスを低下させますか?
NUMAノード全体のコアの分散を次のように変更するにはどうすればよいですか?
NUMA node0 CPU(s): 0-17
NUMA node1 CPU(s): 18-35
Numaノード間のコアの分布を変更することはできません。
Numaノードは、2つのソケットを持つことに関連する物理的な制約です。
Numa --non-uniform-memory-architectureには、ローカルノードからメモリにアクセスする場合のペナルティがあります。ハイパースレッディングコアは、メインコアと同じnumaノードに「コア」として表示されるはずです。
つまり9コア/ NUMAノードがあり、ハイパースレッディングをオンにしている場合(ハイパースレッディングコアがメインコアからリソースを盗み、より多くの「スラッシング」が発生するため、通常、ほとんどの状況でパフォーマンスが向上するわけではありません。ただし、ハイパースレッディングプロセスが同じ部分である場合を除きます。プログラムを実行し、メインコアと同じキャッシュ部分を使用します。通常、人々はコアを独立したリソースとして扱い、ハイパースレッドコアも独立して扱われます。
一般的なワークロードの場合、「ロード」されているマシンでは、ハイパースレッディングによってリソースの競合が増加し、全体的なスループットが低下します。すべてのメインCPUとハイパースレッディングが同じプログラム専用であり、関連するスレッドを実行しているようなワークロードの場合、ハイパースレッディングを使用するとパフォーマンスが向上する可能性があります。
あなたの質問を考えると、ハイパースレッディングをオフにすることをお勧めします。ハイパースレッディングは、すべてローカルメモリとリソースを共有できる1つのアプリケーションに1つのnumaノードを予約しているようには見えないからです。
ハイパースレッドの問題を無視します-これはほとんど同じルールが適用される追加の複雑さであるため、CPUのコアも物理的に1つのチップ(numaノード)または他のチップに配置されているため、ノード間でCPUを移動することはできません。
プロセッサアフィニティを使用して、プロセスとスレッドを1つのnumaノードまたは他のノードにバインドできます。おそらくそれが必要ですか?