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

基本思路是如何让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来响应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值