您的位置:首页 > 其它

如何充分利用CPU资源提高服务器的性能

2012-07-11 22:32 232 查看
基本思路是如何让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来响应。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: