码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2015-09-01 12:44:31      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:

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一书的作者,多项专利的发明者。

 

 

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

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

标签:

原文地址:http://my.oschina.net/u/2448801/blog/499984

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!