注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

逍遥子 曰:

得失失得 何必患得患失 舍得得舍 不妨不舍不得

 
 
 

日志

 
 

[原]将网卡中断分布到多个cpu上的方法  

2015-08-11 15:15:58|  分类: C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Linux下默认的一个网卡的中断操作只是有一个cpu来处理,目前多数主机都是多核cpu,在网络io操作比较多的服务器上,io操作往往成为瓶颈。

最直观的体现就是,当网络操作较多时,应用程序的cpu飙升到100%,但是再查看每个cpu的负载情况,会发现压力都被击中到了某个cpu上,其他的cpu都还是空的,例如:

[原]将网卡中断分布到多个cpu上的方法 - 逍遥子 - 逍遥子 曰:

 

1

出现上述情况时就应考虑是不是由于io太多的原因了,这里的Mosquitto是网络程序,所以基本就是网络io引起的;

此时再查看系统的中断情况,可以看到网卡产生了大量的中断,而且所有的中断都被分到一个cpu上,使用命令:

cat /proc/interrupts

例如:

[原]将网卡中断分布到多个cpu上的方法 - 逍遥子 - 逍遥子 曰:

 

2

这里的p2p1就是当前的网卡设备,如下图可以看出:

[原]将网卡中断分布到多个cpu上的方法 - 逍遥子 - 逍遥子 曰:

 

3

查看中断的cpu分配情况:

使用命令:cat /proc/irq/45/smp_affinity

这里的45就是图2中网卡设备p2p1对应的中断代号;其输出结果用二进制的位来表示当前的中断由那个cpu来处理,例如:如果0000 0001表示第0cpu来处理,那么0000 0010就表示第1cpu来处理。例如:

[原]将网卡中断分布到多个cpu上的方法 - 逍遥子 - 逍遥子 曰:

 

4

这里的8就是0x0000 1000即第三个cpu来处理中断,因此也就是图2中大量的网络中断被分配到了第三个cpu;同样,0x 0000 0011就表示由第0个和第1cpu来处理;

修改中断代号:

echo "f">/proc/irq/45/smp_affinity

如下图所示:

[原]将网卡中断分布到多个cpu上的方法 - 逍遥子 - 逍遥子 曰:

 

 

 

  评论这张
 
阅读(339)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017