在CPU单核的时代,网卡收发包处理都会有一个CPU负责,但随着多核CPU的出现,
还按照以前网卡中断有一个cpu处理的话,明显浪费CPU资源,基于此出现了网卡中断绑定
特定CPU的技术,目的当然是为了提高CPU利用率,将网卡中断均衡的分配到各个CPU.
首先,简单说一下中断,什么是中断呢?就是各个硬件设备(网卡,键盘鼠标,磁盘等等)
与CPU的通信方式,告诉CPU,我这儿有任务要处理,CPU中断手头的工作,先去响应硬件;
老实说,中断处理系统是种比较有效率的做法,linux就是采用的这种方法。
中断比起轮询来说好很多,举个例子,比如一个人处理手机短信,轮询就是每5分钟去
检查一下手机,看看有没有短信;中断就是手机收到短信时,震动或响铃,提醒你处理短信,
是不是中断更搞笑啊。
接着来说中断,为了区分不同的硬件,每个硬件有个唯一的中断号,在linux下可以查看文件
cat /proc/interrupts
第1列就是中断号,比如网卡eth0对应的中断号为139,中断号数字越小,说明优先级越高;
第2,3列表示在各个CPU产生的中断次数,eth0的中断总共1480个,都是CPU0处理的;
第4列表示中断控制器类型;
第5列表示设备名称
二、 问题来了,如何将网卡中断绑定到特定CPU呢?
【centos6.5 内核版本2.6.32-431.el6.x86_64,cpu4核】
首先查看一下,网卡对应的中断号cat /proc/interrupts | grep eth
中断号18绑定的cpu记录在文件/proc/irq/18/smp_affinity
注意:smp_affinity和smp_affinity_list这两文件作用是一样的;
list是10进制,更直观,如截图eth1绑到CPU0和CPU2,
smp_affinity是十六进制形式,5换算成二进制0101,也表示绑定CPU0和CPU2;
二者是关联的,修改一个,另一个也会跟着变化;
注:irqbalance服务作用是自动绑定CPU与中断,如果不停止,手动绑定会被覆盖。
本文介绍了网卡中断绑定到特定CPU的原因和方法,以提高CPU利用率和中断处理效率。在多核CPU环境下,通过绑定中断可以均衡负载。在CentOS 6.5系统中,可以查看中断号并利用/proc/irq/中断号/smp_affinity文件来手动绑定中断到指定CPU,避免irqbalance服务自动覆盖设置。
264

被折叠的 条评论
为什么被折叠?



