如何提高服务器网卡的性能

来源:互联网 发布:北京市软件协会 编辑:程序博客网 时间:2024/06/02 04:15


原文链接:  http://blog.csdn.net/tenfyguo/article/details/7738259


基本思路是如何让CPU的超线程或者多核更加均衡和高效的利用起来,我们知道总是有一块cpu去专门响应网卡的中断请求,如果网络请求包非常大,很可能单个CPU就处理不过来,因此,需要激活多核或者超线程,把网卡中断请求分发到多个CPU去执行,从而提高整体服务器的接入性能,也是提高CPU资源利用率的好办法。下面分别进行讨论:

一,  双CPU超线程的服务器

        我们知道,在linux下,对于双CPU超线程的服务器而已,如果内核激活了CPU的超线程功能(HT),  则通过cat /proc/cpuinfo 可以识别到4块CPU: CPU0-3,其中CPU0和CPU1是同一真实CPU的本身和它的超线程出的CPU,CPU2和CPU3也是同理一对。

我们可以配置网卡的irq路由,来选择指定的一块CPU来处理对应网卡中断请求,从而使得多块网卡的中断处理分别分摊到2块真实的CPU上,达到充分发挥双CPU的性能。

1,  首先我们可以通过访问/proc/cpuinfo的信息查看到cpu的具体信息。

cat /proc/cpuinfo

 

cat /proc/cpuinfo | grep processor

 

cat /proc/cpuinfo | grep processor| wc –l

最后的命令可以得到当前cpu的个数。

 

2,  分别获取eth0和eth1网卡的中断irq号,并且赋值给shell变量

ETH0_IRQ_NUM  =`cat  /proc/interrupts | grep  eth0 | awk -F ':'  '{print $1}'`

ETH1_IRQ_NUM  =`cat  /proc/interrupts | grep  eth1 | awk -F ':'  '{print $1}'`

 

3,  指定CPU来处理对应网卡的中断请求

首先可以查看一下现有的cpu情况(需要root用户):

cat  /proc/irq/$ETH0_IRQ_NUM/smp_affinity

cat  /proc/irq/$ETH1_IRQ_NUM/smp_affinity

 

echo 8 > /proc/irq/$ETH0_IRQ_NUM/smp_affinity

(指定CPU3来处理网卡eth0的中断请求)

 

echo 2 >/proc/irq/$ETH1_IRQ_NUM/smp_affinity

 (指定CPU1来处理网卡eth1的中断请求)

 

4,  查看切换后的效果

watch  cat  /proc/interrupts

       可以看到每隔2s的时间间隔的中断处理效果

 

二,  双CPU双核的服务器

         在linux下,对双CPU双核的服务器来说,若内核没有开启超线程HT选项,则访问cat /proc/cpuinfo可以识别到4块CPU,分别是CPU0-3,其中CPU0和CPU1是同一真实CPU的两个核,同理,CPU2和CPU3是另外一个真实CPU的两个核。并且对同属于真实一个CPU的核共享4M的二级cache,因此,如果我们将一块网卡的中断请求对应到同一真实CPU的2个核上,可以在保证二级cache命中率的前提下,充分发挥双核心CPU的性能优势,从而提高整体服务器的性能。

具体的设置方法,如上说明。

 

三,  附加说明

        注意:对smp_affinity,一个字节(8个bit)本质上对应二进制位:xxxxxxxx,分别表示cpu7,cpu6,cpu5,cpu4,cpu3,cpu2,cpu1,cpu0,对应的位为1, 表示对应的cpu选中状态。

1,  echo 8 > /proc/irq/$ETH0_NU/smp_affinity,由于8 = 1000,所以是指定cpu3来响应。

2,  echo 2 > /proc/irq/$ETH1_NU/smp_affinity,由于2 = 0010,所以是指定cpu1来响应。

3,  echo c > /proc/irq/$ETH0_NU/smp_affinity,由于c = 1100,所以是指定cpu2和cpu3来响应。

4,  echo 3 > /proc/irq/$ETH1_NU/smp_affinity,由于3 = 0011,所以是指定cpu0和cpu1来响应。

 

0 0
原创粉丝点击