文档章节

转帖-Linux网卡中断使单个CPU过载

erichd
 erichd
发布于 2015/09/01 11:26
字数 1210
阅读 1729
收藏 2

Linux内核在性能方面已经经历了很长一段时间的考验,尤其是2.6/3.x内核。然而,在高IO,尤其是网络方面的情况下,对中断的处理可能成为问题。我们已经 在拥有一个或多个饱和1Gbps网卡的高性能系统上发现过这个问题,近来在有许多小包并发(大约10000packets/second)超载的虚拟机上 也发现了这个问题。

原因很清楚:在最简单的模式中,内核通过硬件中断的方式来处理每个来自于网卡的包。但是随着 数据包速率的增长,带来的中断渐渐超过了单个cpu可处理的范围。单cpu概念很重要,系统管理员对此往往认识不足。在一个普通的4-16核的系统中,因 为整体cpu的使用率在6-25%左右并且系统看上去很正常,所以一个过载的内核很难被发现,。但是系统将运行很慢,并且会在没有告警,没有dmesg 志,没有明显征兆的情况下严重丢包。

但是你使用top查看多个cpu模式(运行top,接着键入1)时,%si 列(系统中断)或者mpstat命令中 irq(mpstat -P ALL 1),在一些繁忙的系统中你会发现中断明显很高,通过经进一步mpstat使用,你会看到哪个cpu或者哪个设备存在问题。

你需要一个较新版本的mpstat,可以运行-I 模式,用以列出irq负载,运行如下命令:

mpstat -I SUM -P ALL 1

超过5000/ 有点繁忙, 1-2/秒相当高了。

运行如下命令来确认那个设备/项目导致负载:

mpstat -I CPU -P ALL 1

这个输出很难被阅读,但是你可以跟踪正确的列用来确认哪个中断导致负载,例如:1519995. 你也可以定义你想查看的cpu

mpstat -I CPU -P 3 1 # 3 top,htop中可以定位不同的cpu。(topmpstat都是从0开始,htop是从1开始计数)

记录下中断数,你就可以查看中断表 "cat /proc/interrupts" 找到mpstat's得到的数字,你可以发现是哪个设备在使用中断。这个文件也指示了使用该中断的#可以告诉你是什么导致过载。

需要做什么呢?

首先,确认你是否运行irqbalance,这个是nice守护进程它会自动在cpu间扩展中断。在繁忙的系统中很重要,尤其是两块网卡,因为默认cpu0 将处理所有中断,系统很容易过载。irqbalance扩散这些中断用以降低负载。为了性能最大化,你可以手动平衡这些中断将套接字和超线程共享内核分 散,但是通常没必要这么麻烦。

但是即使扩展了中断,某块网卡还是可能导致某一个cpu过载。这取决于你的网卡和驱动,但通常有两种有效的方法来防止这样的事情发生。

第一种是多网卡队列,有些Intel网卡就可以这么做。如果他们有4个队列,就可以有四个cpu内核同时处理不同的中断用以分散负载。通常驱动会自动这么做,你也可以通过mpstat命令来确认。

第二种,并且通常也是更加重要的,网卡驱动选项——'IRQ coalescing',中断请求合并。这个选项有着强大的功能,允许网卡在调用中断请求前缓存数个数据包,从而为系统节约大量的时间和负载。举个例子: 如果网卡缓存10个包,那么cpu负载将大约降低90%。这个功能通常用ethtool工具来控制,使用'-c/-C'参数,但是有些驱动要求在驱动初次 加载时就做好相关设置。如何设置需要查看本机文档。举个例子,有些网卡,譬如我们使用的Intel网卡,就有automatic模式可以根据负载自动做到 最优化。


本文由 Steve Mushero, 联合创始人兼首席执行官发表于2012425

 

作者简介:

Steve Mushero

云络创始人,首席技术官

Steve Mushero先生拥有超过20年在各行业的,国际性的技术管理经验。他曾经担任土豆网的首席技术官,负责Intermind的高级管理系统,在Beyond Access Communications AirReview担任首席架构师。他是Managing White-Collar Job Migration to Asia一书的作者,多项专利的发明者。

 

 

云络网络科技(上海)有限公司持有最终解释权

本文转载自:http://wenku.baidu.com/view/38a764b8f121dd36a32d828e.html

erichd
粉丝 3
博文 31
码字总数 7763
作品 0
徐汇
私信 提问
多核下绑定硬件进程到不同CPU

硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。现在的服务器上动不动就是多 CPU 多核、多网...

菜鸟东哥
2018/07/02
0
0
开启irqbalance提升服务器性能

操作系统 性能调休 公司有次压测存在一个问题:CPU资源压不上去,一直在40%已达到了性能瓶颈,后定位到原因,所在的服务器在压测过程中产生的中断都落在CPU0上处理,这种中断并没有均衡到各个...

sunsky303
2018/03/20
0
0
Redis在万亿级日访问量下的中断优化

作者介绍 骁雄,14年加入美团点评,主要从事MySQL、Redis数据库运维,高可用和相关运维平台建设。 春林,17年加入美团点评,毕业后一直深耕在运维线,从网络工程师到Oracle DBA再到MySQL DBA...

骁雄 春林
2018/05/16
0
0
Effective Gigabit Ethernet Adapters-Intel千兆网卡8257X性能调优

一.综述 针对服务器网络性能进行优化的工作是极端复杂的,因为在这里有多个不确定因素影响的最终的性能,在这里并不是简单的1+1+2=4的问题,而很可能会是1+1+2=-1。粗略的说,影响性能因素的...

晨曦之光
2012/04/10
800
0
NAPI模式--中断和轮询的折中以及一个负载均衡的问题

处理外部事件是cpu必须要做的事,因为cpu和外设的不平等性导致外设的事件被cpu 当作是外部事件,其实它们是平等的,只不过冯氏机器不这么认为罢了,既然要处理外部事件,那么就需要一定的方法...

晨曦之光
2012/04/10
719
1

没有更多内容

加载失败,请刷新页面

加载更多

设计模式-简介

设计模式简介 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案...

HOT_POT
18分钟前
0
0
SpringBoot版

使用外部Tomcat来启动程序,而不是用默认的Application的main()来启动。 因为,使用Application的main()来启动,修改页面的时候,刷新不会立即有反应。而是要make一下(Ctrl+F5) 而且还要加入...

流小文
23分钟前
1
0
Disable Autostart of MySQL Server on Ubuntu

OSC Markdown Editer 真香,笔记一篇,懒得转中文,如有表述问题,请不吝指出,先谢为敬! OS: Ubuntu 19.04 When the MySQL server is installed, it automatically started with the OS. I...

Iridium
44分钟前
2
1
OpenStack RDO + S3

Packstack(RDO) installation "sync db timeout" issue version: openstack-packstack-13.0.0-0.1.0rc1.el7.noarchopenstack-packstack-puppet-13.0.0-0.1.0rc1.el7.noarch add timeout =>......

Firxiao
47分钟前
2
0
java运算符的优先级

https://www.cnblogs.com/zjfjava/p/5996666.html

南桥北木
52分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部