回答編集履歴

2

一部脱字の修正

2019/10/30 00:46

投稿

退会済みユーザー
test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
 
26
26
 
27
- この辺りは、後藤さんの記事(たとえば[これ](https://pc.watch.impress.co.jp/docs/column/kaigai/1075501.html))を読んで想像してもらうとわかるのですが、モダンなCPUでは直接CPUに接続されているため(Non Unified Memory Access : NUMA)、このNUMAのCPU Coreのノードを超えるメモリアクセスは、CPUインターコネクトをまたいだアクセスが発生し、アクセスレイテンシが増加し、内部バスの帯域を圧迫することになります。
27
+ この辺りは、後藤さんの記事(たとえば[これ](https://pc.watch.impress.co.jp/docs/column/kaigai/1075501.html))を読んで想像してもらうとわかるのですが、モダンなCPUではメモリは、直接CPUに接続されているため(Non Unified Memory Access : NUMA)、このNUMAのCPU Coreのノードを超えるメモリアクセスは、CPUインターコネクトをまたいだアクセスが発生し、メモリアクセスレイテンシが増加し、CPU間及びCPU内部バスの帯域を圧迫することになります。
28
28
 
29
29
 
30
30
 

1

論点を整理

2019/10/30 00:45

投稿

退会済みユーザー
test CHANGED
@@ -1,9 +1,41 @@
1
- 現実的な話、少なともLinux場合は一部のNICのQueの割り込は偏ります。
1
+ 説明がちょっとざっりしすぎてていた改めて説明を試みます。
2
2
 
3
- けれどもそれは、どちらかというとドライバの作り込みやデフォルト設定値の問題です。
4
3
 
5
- でもこれには価値もあります。
6
4
 
7
- ご存知で、釈迦に説法になって恐縮なんすが、し、マルチキューすべてEtherフレームが、なん考慮もなしにバラバラのCPUに割り振られると、NUMAノードを超えてメモリアクセスが発生してしまうため、不要にCPUインターコネクトの帯域を圧迫することになります。
5
+ Linuxの場合は(そておそくWindowsあろうと)一部NICQueの割り込みは偏ります。
8
6
 
9
- NIC側からも、ドライバ側からも、取り付けられて起動されるまで、どんなNUMAノード構成なか、知る由もあませんから、結果的に、可変って事になってるです。
7
+ けれどそれは、ドライバの込みやデフォルト設定値がそうなってからです。
8
+
9
+
10
+
11
+ でもこの偏りは意図的なもので、一定の価値があります。
12
+
13
+
14
+
15
+ EtherフレームをPCが受信する場合の動作について想像してほしいのですが、
16
+
17
+ ・L2通信でNICに到着する
18
+
19
+ ・(ある種のNICによるネットワーク処理オフロードが行われる)
20
+
21
+ ・DMA転送で、メインメモリにNICが書き込む
22
+
23
+ ・OS/CPUが、各プロセスに書き込まれたメモリ領域を引き渡す
24
+
25
+
26
+
27
+ この辺りは、後藤さんの記事(たとえば[これ](https://pc.watch.impress.co.jp/docs/column/kaigai/1075501.html))を読んで想像してもらうとわかるのですが、モダンなCPUでは直接CPUに接続されているため(Non Unified Memory Access : NUMA)、このNUMAのCPU Coreのノードを超えるメモリアクセスは、CPUインターコネクトをまたいだアクセスが発生し、アクセスレイテンシが増加し、内部バスの帯域を圧迫することになります。
28
+
29
+
30
+
31
+ 理想的には、受け取りたい仮想マシン/プロセスが走行しているCPU CoreにNICがDMAで書き込んでくれることですが、マルチキューのすべてのEtherフレームが、なんの考慮もなしにバラバラのCPUコアに割り振られると、仮想マシン/プロセスがネットワークの通信を拾うのに、CPU間のデータ転送が頻繁に発生してしまいます。
32
+
33
+
34
+
35
+ 元来、割り込み、というのは、CPUの処理を一旦中断するため、多量な割り込み処理は本来やりたかったタスクに処理能力が割けない、という事態を巻き起こしかねません。
36
+
37
+ 例えば少しでもコンピューティングパフォーマンスがほしい場合、ハイパフォーマンス・コンピューティングでは、ネットワーク転送量をできるだけ絞ったような処理になるようにプログラムされますから、割り込みが偏っていたほうが、他のCPUは余計な割り込み処理に振り回されることがなくて、そちらのほうが適しているということも言えるわけです。
38
+
39
+
40
+
41
+ NIC側からも、ドライバ側からも、ハードウェアに取り付けられて起動されるまで、どんなNUMAノード構成なのか、知る由もありませんから、結果的に、可変って事になってる場合が多いようです。