解決ksoftirqd進程耗盡單核100%si處理非強制中斷導致效能瓶頸之法

來源:互聯網
上載者:User

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 'alias bond0 bonding' >> /etc/modprobe.conf

# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=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=0 miimon=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

# service network restart

第8點,升級硬體,使用支援RSS功能的網卡。

下面是intel對RSS的說明

Receive-side scaling (RSS) routes incoming packets to specific queues, efficiently balancing network loads across CPU cores and increasing performance on multi-processor systems. RSS, called Scalable I/O in Linux*, creates a hash table from IP, TCP, and Port Addresses and uses that table to decide which queue to route a packet to, and to which processor the packet should be associated.

可是從我們使用網卡的官網硬體指標上,都是支援RSS的。Windows的設定方式是`netsh int tcp set global rss=enabled`。

第9點,更換作業系統。此方案在生產環境下部署的可能性比較小,但是否關作業系統的事確實需要確認。

據說Windows的NLB、solaris、AIX支援網卡RSS,目前還有待確認

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.