0


2 つの C++ プロセスがあり、各プロセスに 1 つのスレッドがあります。スレッドは、32 の着信 TCP 接続からのネットワーク トラフィック (Diameter) を処理し、それを解析して、32 の発信 TCP 接続を介して分割メッセージを転送します。この C++ プロセスを DiameterFE と呼びましょう。
実行中の DiameterFE プロセスが 1 つだけの場合、1 秒あたり 70,000 メッセージを処理できます。
2 つの DiameterFE プロセスが実行されている場合、それぞれ 35,000 メッセージ/秒を処理できるため、合計で同じ 70,000 メッセージ/秒になります。
なぜ彼らはスケーリングしないのですか?ボトルネックとは?

詳細: 各 Diameter フロント エンド プロセスには 32 のクライアント (カモメ) と 32 のサーバ (カモメ) があり、別々のホストで実行されます。
これら 2 つのプロセス用に専用ホストが提供されます - 2 つの E5-2670 @ 2.60GHz CPU x 8 コア/ソケット x 2 HW スレッド/コア = 合計 32 スレッド。
10 ギガビット/秒のネットワーク。平均直径メッセージ サイズは 700 バイトです。

Cpu0 だけがネットワーク トラフィックを処理しているようです - 58.7%si. 異なるネットワーク キューを異なる CPU に明示的に構成する必要がありますか?
最初のプロセス (PID=7615) は 89.0 % の CPU を使用し、Cpu0 で実行されています。
2 番目のプロセス (PID=59349) は 70.8 % の CPU を使用し、Cpu8 で実行されています。
一方、Cpu0 は 95.2% = 9.7%us + 26.8%sy + 58.7%si で
ロードされますが、Cpu8 は 70.3% = 14.8%us + 55.5%sy でしかロードされません。

2番目のプロセスでもCpu0が作業を行っているようです。非常に高い softirq があり、Cpu0 = 58.7% のみです。なんで?

キー「1」が押されたときの一番上の出力は次のとおりです。

top - 15:31:55 up 3 days,  9:28,  5 users,  load average: 0.08, 0.20, 0.47
Tasks: 973 total,   3 running, 970 sleeping,   0 stopped,   0 zombie
Cpu0  :  9.7%us, 26.8%sy,  0.0%ni,  4.8%id,  0.0%wa,  0.0%hi, 58.7%si,  0.0%st
...
Cpu8  : 14.8%us, 55.5%sy,  0.0%ni, 29.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
...
Cpu31 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  396762772k total,  5471576k used, 391291196k free,   354920k buffers
Swap:  1048568k total,        0k used,  1048568k free,  2164532k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                      
 7615 test1     20   0 18720 2120 1388 R 89.0  0.0  52:35.76 diameterfe
59349 test1     20   0 18712 2112 1388 R 70.8  0.0 121:02.37 diameterfe                                      
  610 root      20   0 36080 1364 1112 S  2.6  0.0 126:45.58 plymouthd                                      
 3064 root      20   0 10960  788  432 S  0.3  0.0   2:13.35 irqbalance                                      
16891 root      20   0 15700 2076 1004 R  0.3  0.0   0:01.09 top                                      
    1 root      20   0 19364 1540 1232 S  0.0  0.0   0:05.20 init                                      
...
4

1 に答える 1

0

この問題の修正は、カーネルを 2.6.32-431.20.3.el6.x86_64 にアップグレードすることでした。
その後、ネットワーク割り込みとメッセージ キューが異なる CPU に分散されます。

于 2015-01-16T16:51:06.550 に答える