質問するログイン新規登録

回答編集履歴

2

一部脱字の修正

2019/10/30 00:46

投稿

退会済みユーザー
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

論点を整理

2019/10/30 00:45

投稿

退会済みユーザー
answer CHANGED
@@ -1,5 +1,21 @@
1
- 現実的な話、少なくもLinux場合は一部のNICのQueの割り込は偏ります。
2
- けれどもそれは、どちらかというとドライバの作り込みやデフォルト設定値の問題です。
3
- でもこれに価値もあります。
4
- ご存知でしたら、釈迦に説法になって恐縮なんですが、マルチキューのすべてのEtherフレームが、なんの考慮もなしにバラバCPUに割振られると、NUMAノードを超えてメモリアクセス発生してしまため、不要にCPUインターコネクトの帯域を圧迫することにります。
5
- NIC側からも、ドライバ側からも、取り付けられて起動されるまで、どんなNUMAノード構成なのか、知る由もありませんから、結果的に、可変って事になってるのです。
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ノード構成なのか、知る由もありませんから、結果的に、可変って事になってる場合が多いようです。