1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > linux程序单核 Linux Virtual Server (LVS)之:ksoftirqd进程耗尽单核100%si处理...

linux程序单核 Linux Virtual Server (LVS)之:ksoftirqd进程耗尽单核100%si处理...

时间:2019-01-18 08:08:12

相关推荐

linux程序单核 Linux Virtual Server (LVS)之:ksoftirqd进程耗尽单核100%si处理...

最近测试LVS性能,发现当CPU其中一个核耗尽后系统达到性能顶峰。

消耗CPU资源的是ksoftirqd进程,全部用于处理软中断(从进程名也能识别出了)。

搜了一下,很多人都遇到这类问题,似乎也没有解决。了解到并尝试过的解决方案有:

1、减少集群成员的数量;

2、修改集群模式(NAT、TURNL、DR);

3、修改集群调度算法;

4、升级操作系统内核到2.6.20以上;

5、调整网卡的最大传输单元(MTU);

6、修改设备中断方式;

7、使用多网卡负载均衡;

8、升级硬件(网卡);

9、更换操作系统。

一一解说如下吧:

第1点:减少集群成员的数量。由于瓶颈不在真实服务器上,所以减少成员数量,lvs性能没有明显变化。

第2点:修改集群模式。理论上DR模式是最省资源的,大概了解理论的朋友应该都知道。由于NAT模式不满足需求,故仅对比了DR和TUN模式,两者没有明显区别。

第3点:修改集群调度算法。已有的十种算法中属rr最简单,而且目前瓶颈还未深入到这一层。实际上在处理网络包的时候导致的瓶颈。调度算法简单比较了rr和wrr,两者没有明显区别。

第4点:升级操作系统内核到2.6.20以上。我直接升级到当前已发布的最新版本2.6.34,结果瓶颈并没有得到改善。

第5点:调整网卡的最大传输单元。交换机支持最大的传输单元是9216,将网卡的最大传输单元分别修改为:1500(默认)、5000、9000、9216。其中1500和5000两者没有明显差别,9000和9216会导致网络不稳定,性能也没有提高反而出现大量连接超时。

第6点:修改设备中断方式。通过修改设置中断/proc/irq/${网卡中断号}/smp_affinity:

测试服务器CPU为四核,理论上网卡的smp_affinity值为1、2、4、8分别对应cpu0、cpu1、cpu2、cpu3。

结果:

1、网卡的smp_affinity默认值为8,测试过程中软中断全部由cpu3处理。正确

2、设置smp_affinity=1,测试过程中软中断全部由cpu0处理。正确

3、设置smp_affinity=2,测试过程中软中断全部由cpu1处理。正确

4、设置smp_affinity=4,测试过程中软中断全部由cpu2处理。正确

5、设置smp_affinity=5,测试过程中软中断全部由cpu0处理,预期应该分配给cpu0和cpu2处理。无效

6、设置smp_affinity=f,测试过程中软中断全部由cpu0处理,预期应该分配给cpu0、cpu1、cpu2和cpu2处理。无效

即:修改smp_affinity的功能只针对单核有效。

第7点:使用多网卡负载均衡。此方案可行!使用两张网卡绑定一个IP地址,性能就提升了一倍,效果非常明显。原因就是两张网卡各用一个CPU核,相比用单核而言,性能自然提升一倍。

配置方式如下:

单网卡工作模式

#cat/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=none

BROADCAST=192.168.223.255

HWADDR=00:1E:90:76:6F:E0

IPADDR=192.168.223.113

NETMASK=255.255.254.0

NETWORK=10.20.222.0

ONBOOT=yes

GATEWAY=192.168.222.1

TYPE=Ethernet

绑定双网卡操作步骤

echo'aliasbond0bonding'>>/etc/modprobe.conf

#cat/etc/sysconfig/network-scripts/ifcfg-bond0DEVICE=bond0

BOOTPROTO=static

BROADCAST=192.168.223.255

MACDDR=00:1E:90:76:6F:E2

IPADDR=192.168.223.113

NETMASK=255.255.254.0

NETWORK=192.168.222.0

USERCTL=no

ONBOOT=yes

GATEWAY=10.20.222.1

TYPE=Ethernet

BONDING_OPTS="mode=0miimon=100"

#cat/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

ERCTL=no

ONBOOT=yes

MASTER=bond0

SLAVE=yes

BOOTPROTO=none

#cat/etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

USERCTL=no

ONBOOT=yes

MASTER=bond0

SLAVE=yes

BOOTPROTO=none

#servicenetworkrestart

第8点,升级硬件,使用支持RSS功能的网卡。下面是intel对RSS的说明Receive-sidescaling(RSS)routesincomingpacketstospecificqueues,efficientlybalancingnetworkloadsacrossCPUcoresandincreasingperformanceonmulti-processorsystems.RSS,calledScalableI/OinLinux*,createsahashtablefromIP,TCP,andPortAddressesandusesthattabletodecidewhichqueuetorouteapacketto,andtowhichprocessorthepacketshouldbeassociated.可是从我们使用网卡的官网硬件指标上,都是支持RSS的。Windows的设置方式是`netshinttcpsetglobalrss=enabled`。

第9点,更换操作系统。此方案在生产环境下部署的可能性比较小,但是否关操作系统的事确实需要确认。

据说Windows的NLB、solaris、AIX支持网卡RSS,目前还有待确认。

------------------06-06:

OK,此问题已确认。

使用不同

更多来源:/question/

型号的服务器进行测试,发现是否分发多核和硬件相关,进一步确定是由网卡决定!

我们使用了惠普、戴尔、联想3大品牌进行测试。

------------------10-10:

网卡中断分发多核是由3个因素影响:

1、硬件支持:Intel支持RSS功能的,支持队列数和硬件及驱动设置有关。Broadcom支持MSI-X的,可虚拟同CPU核数的队列。

2、驱动支持:某些平台的驱动不支持网卡中断分发多核,升级系统内核或使用指定的驱动版本可实现中断分发多核。

3、系统设置:CPU亲和性设置,默认会分配到多核。可手动设置或使用irqbalance服务管理。

-----------------01-20结贴:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。