网站建设全包:这个根据网卡型号和驱动版本的不同可能会发生变化
在高吞吐高负载的应用中,小文件对网卡和CPU的压力经常导致int偏高。针对Intel
多队列网卡,可以通过绑定队列到CPU中断的方式让中断分布平均化。
检查网卡是否是多队列网卡的办法如下。
这个根据网卡型号和驱动版本的不同可能会发生变化。所以我们还可以从Linux层面
来检查。
cat
31:
32:
33:
34:
35:
36:
37:
38:
39:
/proc/interrupts I grep eth :'
1 0 0; :: ' 0 PCI-MSI-edge eth0
496264 4285038723 183045979 4261001431 PCI-MSI-edge ethO-rx-0
616597 4286889728 181983908 4266611362 PCI-MSI-edge ethO-rx-l
637105 7676528 195087860 4176934847 PCI-MSI-edge ethO-rx-2
664370 4176592309 193372878 17962407 PCI-MSI-edge ethO-rx-3
2516359 2221308809 1586839592 2231100173 PCI-MSI-edge ethO-tx-0
1385780 3204456867 173337759 3199154048 PCI-MSI-edge ethO-tx-l
2148360 2106264051 1707846633 2131107094 PCI-MSI-edge ethO-tx-2
2435577 2214043654 1571130355 2262530323 PCI-MSI-edge ethO-tx-3这样就可以一目了然地看出来eth0网卡有4个队列了。
默认情况下,Linux也会将中断散布在各个CPU上以提供更高的性能,但是同一个队列分为rx和tx进出两个方向,被散布开之后,反而带来更大的CPU之间的数据交换,CPU级的cache效果降低,从而影响性能。所以更好的做法是,手动绑定每个队列的rx/tx到同一个CPU上。
绑定中断到每个CPU核的脚本,最早是由Linux内核network子系统的开发者DavidMiller编写的,我们可以在Intel网卡驱动源码的scripts/目录下获得。目前Intel最新的ixgbe源码下载地址为:http://downloadmirror.intel.com/14687/eng/ixgbe- 3.14.5.tar.gz。
脚本内容很简单,原理就是从上例提到的/proc/interrupts中取出中断的MASK,然后写入对应中断号的/proc/irq/$IRQ/smp_affinity文件,代码如下。
set_affinity ( )
if [ $VEC -ge 32 ]
then
MASK_FILL-''''
MASK_ZERO="OOOOOOOO"
let 'IDX = $VEC / 32" : :
do
MASK FILL="$ {MASK_FILL } , $ { MASK ZERO } "
done
本文地址:
http://www.yishenzhou.com/yes/post/472.html | 分类:做网站 |
次阅读