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