运行多个进程无法扩展

时间:2014-09-04 09:09:02

标签: linux networking tcp scalability softirq


有两个C ++进程,每个进程中有一个线程。该线程处理来自32个传入TCP连接的网络流量(Diameter),解析它并通过32个传出TCP连接转发拆分消息。让我们称这个C ++进程为DiameterFE 如果只有一个DiameterFE进程正在运行,它可以处理70 000条消息/秒 如果两个DiameterFE进程正在运行,它们每个可以处理35 000条消息/秒,所以总共相同的70 000条消息/秒。 为什么他们不能扩展?什么是瓶颈?

详细说明: 每个Diameter前端进程有32个客户端(海鸥)和32个服务器(海鸥),在不同的主机上运行。
为这两个过程提供专用主机 - 2个E5-2670 @ 2.60GHz CPU x 8个核心/插槽x 2个HW线程/核心=总共32个线程。
10 GBit / sec网络。 平均Diameter消息大小为700字节。

看起来只有Cpu0处理网络流量 - 58.7%si。我是否必须为不同的CPU明确配置不同的网络队列? 第一个进程(PID = 7615)占用89.0%的CPU,它在Cpu0上运行 第二个进程(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

看起来Cpu0也在为第二个进程做工作。有很高的softirq,只有Cpu0 = 58.7%。为什么呢?

这是带键#34; 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                                      
...

1 个答案:

答案 0 :(得分:0)

此问题的解决方法是将内核升级到2.6.32-431.20.3.el6.x86_64。
之后,网络中断,消息队列分布在不同的CPU之间。