[系统技巧] Linux CPU网卡软中断性能调优
作者:CC下载站 日期:2023-10-12 00:00:41 浏览:53 分类:玩电脑
前言
在工作中当我们使用了性能较差的 CPU 时,总会发现其软中断很容易偏高。
这是因为当软中断事件的频率过高时,由于 CPU 使用率偏高而导致内核线程的软中断处理不及时,从而引发网络收发延迟、调度缓慢等性能问题。其实,软中断 CPU 使用率过高也是一种最常见的性能问题,因此才需要我们做一些调优的方法,以便更合理的使用 CPU 来进行工作。声明:以下所有展示的图片,都是经过性能调优后给出的(Linux 默认软中断只绑定到 CPU0 处理)。
一、什么是中断?
在解决软中断偏高的问题之前,我们先来简单的了解一下中断的概念的吧。顾名思义,“中断”就是字面意思,是指 CPU 在执行某一项工作时突然被其他事情打断而被迫处理优先级更高的事务。比如,当你在愉快的享受假期时突然被领导强制要求回公司加班赶项目,而你此时不得不做出停止休假并赶回去加班的决定,这个过程就叫做中断。
Linux 中断是一种异步的事件处理机制,用来提高系统的并发处理能力。中断事件的发生会触发执行中断处理程序,而中断处理程序被分为上半部和下半部两个部分:
1、上半部对应硬中断,用来快速处理中断
2、下半部对应软中断,用来异步处理上半部未完成的工作Linux 软中断包括网络收发、定时、调度、RCU 锁等各种类型,可以通过查看 /proc/softirqs 观察软中断的运行情况。
Linux 默认每个 CPU 都对应一条软中断内核进程,进程名是:ksoftirqd/n(n 等于 cpu 编号。例如:ksoftirqd/0, ksoftirqd/1, …)。
ksofttrip 是一直循环运行的,只要系统发生了软中断,哪个 CPU 空闲了它就会去获取来处理。
二、如何查看系统运行以来的累积中断次数?
软中断 CPU 使用率(softirq)升高是一种很常见的性能问题。虽然软中断的类型很多,但多数情况下网络收发产生的软中断才是性能的瓶颈。那么,怎样查看 CPU 的中断次数呢?
方法一:
可通过 top 命令查看软中断的计数(按下1键可以显示每个 CPU 核心的详细信息):# top -d1
方法二:
可通过 /proc/softirqs 观察软中断的运行情况:# watch -d cat /proc/softirqs /* 定期查看中断次数变化 */
通过上边的 /proc/softirqs 内容变化情况来看:
发现 TIMER(定时中断)、NET_RX(网络接收)、SCHED(内核调度)、RCU(RCU 锁) 等这几个软中断都在不断的变化。
其中,NET_RX 网络数据包接收软中断的变化速率是最快的,而其他几种类型的软中断有一定的变化是正常的,因为它们是保证 Linux 调度、时钟和临界区保护等正常工作所必需的。方法三:
可通过 /proc/interrupts 观察硬中断的运行情况:# cat /proc/interrupts
其中,可以看出
信号量:45 ethernet
网卡硬中断主要集中在 CPU3,结合 top 命令来看 CPU3 的软中断还是挺高的,为什么会这样呢?这是因为当网卡收到数据包时会产生中断,通知内核有新数据包,然后内核调用中断处理程序进行响应,把数据包从网卡缓存拷贝到内存。
三、CPU软中断性能调优
Linux 默认情况下,所有网卡的软中断都是由 CPU0 来处理的,当你发现
ksoftrip/0 总是占比很高,说明可能是网卡问题了
。通过以上方法分析软中断的产生原因,会发现确实是网络接收的软中断过高导致的 CPU 性能下降,那么如何调优呢?
想要优化,先确认你的网卡是否为多通道队列的,如何确认网卡是否为多队列的呢? 查看网卡通道队列的数量方式:
# cat /proc/interrupts | grep ethernet | wc -l
注意:当队列数量 > 1,才说明你的网卡是支持多通道队列的
方法1:smp irq affinity 技术
smp irq affinity 技术,也称为信号量分布技术,就是把特定信号量的处理放到固定的 CPU 上,每个网卡的通道队列都有一个自己的信号量(
如下图的 ethernet 网卡,对应了信号量45
)。查看网卡通道队列的信号量方法:# cat /proc/interrupts | grep ethernet
注意: 不同的 Linux 平台网卡名称不一定相同。比如我的网卡名是 ethernet,而有的平台又是 eth0,或者名命为其他的
。如果是实在不知自己的网卡名称,直接通过 cat /proc/interrupts 查看通道队列的信号量亦可。当我们知道了网卡信号量"num"后,就可以开始对信号量进行绑定了,在 /proc/irq/num/ 下面有两个文件分别是 smp_affinity 和 smp_affinity_list。 smp_affinity 是通过 bitmask 算法绑定 CPU 的,smp_affinity_list 则是通过数字指定 CPU 编号的。
均衡配置: 将网络收发数据导致过高的软中断均摊到各个 CPU 来承担,以达到 CPU 整体性能提升的目的。使用以下任意一种绑定方法均可(以4核CPU为例)
:1. smp_affinity:
# echo f > /proc/irq/45/smp_affinity
2. smp_affinity_list:
# echo 0-3 > /proc/irq/45/smp_affinity_list
备注:以上命令的作用是,将中断号45的设备中断处理(包括软中断和硬中断)均摊绑定到各个 CPU 上。
方法2:RPS/RFS 技术
RPS 全称是 Receive Packet Steering,这是 Google 工程师 Tom Herbert ([email protected]) 提交的内核补丁,在 2.6.35 进入 Linux 内核。这个 patch 采用软件模拟的方式,实现了多队列网卡所提供的功能,分散了在多 CPU 系统上数据接收时的负载,把软中断分到各个 CPU 处理,而不需要硬件支持,大大提高了网络性能。
RFS 全称是 Receive Flow Steering,这也是 Tom 提交的内核补丁,它是用来配合 RPS 补丁使用的,是 RPS 补丁的扩展补丁,它把接收的数据包送达应用所在的 CPU 上,提高 cache 的命中率。
通俗点来说,单个网卡通道队列的软中断会平均到所有 CPU 上,中断会发生在处理数据包的那个 CPU 上,从而节省了 cpu cache。
那么如何配置 RPS/RFS 呢?
(以4核CPU为例)
:1. 配置 RPS,如果 CPU 核数是 4 个,可以设置成 f:
# echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
2. 配置内核参数 rps_sock_flow_entries(官方文档推荐设置:N=32768):
# echo 32768 > /proc/sys/net/core/rps_sock_flow_entries
3. 配置 rps_flow_cnt,单队列网卡可设置成 rps_sock_flow_entries(N=32768):
# echo 32768 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt
特别说明:
eth0:网卡设备(可能多个)
rx-0:接收队列(可能多个)
N:如果是多队列网卡,那么就按照队列数量设置成: N = rps_sock_flow_entries / 接收队列的数量
接收队列数量查看:cat /proc/interrupts | grep ethernet | wc -l
配置后效果展示,每个CPU都能接收软中断:
四、经验总结
如果是多队列网卡性能调优,优先推荐使用方法1。
如果是单网卡队列性能调优,优先推荐使用方法2(因为 RPS/RFS 能模拟多网卡工作)。
特别声明,如果方法1和方法2都不能达到理想效果,可以尝试将网卡软中断单独绑定到固定的 CPU 上处理,因为这样可以提高 cpu cache 的命中率,从而达到提升 CPU 整体性能的目的。例如,
将中断号45的中断处理单独绑定到 CPU3
:# echo 3 > /proc/irq/45/smp_affinity_list
猜你还喜欢
- 03-04 [服务器类]iis6.0安装包
- 04-07 [QQ专区]qq服务器拒绝了您发送离线文件解决方法
- 07-10 [玩网络] 服务器防火墙规则及进出站端口设置
- 08-20 [教程] 商梦网校VPS服务器管理教程
- 10-21 [操作系统]《红帽企业Linux 5.9服务器版》(Red Hat Enterprise Linux 5.9 Server)x86/64[光盘镜像]
- 04-07 [棋牌源码] 颂游棋牌各种教程各种端带服务器,一锅鲜大聚会
- 05-27 [站长帮] 宝塔的PHP环境下,服务器大量php-cgi.exe进程导致CPU占用100%
- 06-02 [服务器教程] ZBench: 服务器一键测试脚本 / 自带结果导出
- 08-12 [黑客软件] 御剑RDP爆破工具_暴力批量破解服务器
- 10-04 [服务器] 打开网站显示“No input file specified.”的解决方法
- 10-23 [服务搭建] 服务器Windows 2008系统安装IIS
- 10-29 [网络资源] Amazon Lightsail 一键管理服务器脚本
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[恐怖电影合集225部] [WEB-MP4/32.3GB][英语中字][1080P][恐怖合集]
[电影] 《让子弹飞》未删减版(2010)高码率4K+1080P【收藏版】国语中字【27.8GB】
[文艺] 超全中国戏曲合集已分类MP3格式(上万首146GB)
[纪录片] 中国海南·雨林秘境.第1季[2024]
[台剧] 我的男孩 [国语] [MP4]
[稀缺资源] 剧情杀剧本100套-快速收藏 [1G]
[音乐] 抖音网红热门歌曲(600首)精选集 2024 [mp3格式/5.3GB]
[书籍] 绝版珍藏古籍
[书籍] 【帛书版】合集
[老照片] 一万张珍贵历史老照片【jpg 40.4GB】
[书籍] 彭子益医书合集 [PDF/DOC]
[动画] 2002《火影忍者》720集全【4K典藏版】+11部剧场版+OVA+漫画 内嵌简日字幕
[动画] 收藏版:1996-2024年名侦探柯南全系列1080P,含国配、日配双语版+26部剧场作品
[纪录片] B站食贫道收费纪录片 *迷失东京* [1080P] 揭露日本大家感兴趣却不为人知的秘密
[电影] 《变形金刚系列》七部合集 [4K HDR 蓝光] 国英双语音轨 [内封精品特效字幕]【典藏版】235G
[剧集] 《斯巴达克斯》1-4季合集 无删减版 1080P 内嵌简英特效字幕
[电影] 《神奇动物在哪里三部合集》 4K REMUX原盘 [杜比视界] [国英双语音轨] 特效字幕 [171.1G]
[电影] 我的阿勒泰 (2024) 4K内封简繁 全8集 9.57G
[动画] 西游记 (1999) 动画版 4K 全52集 高清修复版 童年回忆
[动画] 小马宝莉(2011-2019)S01-S09季全集 1080P 国语中字 [附带英文版]
[电影] 《黄飞鸿》全系列合集
[Android] 开罗游戏 ▎像素风格的模拟经营的游戏厂商安卓游戏大合集
[游戏合集] 要战便战 v0.9.107 免安装绿色中文版
[电影] 【珍藏版】20世纪电影合集从1922年到1990年代,看看爷爷辈的电影是什么样合集约212G
[书籍] 彭子益医书合集 [PDF/DOC]
[系统]【黑果小兵】macOS Big Sur 11.0.1 20B50 正式版 with Clover 5126 黑苹果系统镜像下载
[美图] 【经典收藏美图集合】1500多张韩国美女高清图片让你的收藏夹更加丰富多彩
[电视剧] 灵魂摆渡(1-3季合集)【未删减】【4K.无水印】【剧情/恐怖/惊悚】【豆瓣8.7】
[书籍资料] 《玉房秘诀》《玉房秘典》《古代房中术》
[剧集] 暴君.2024(全4集)中字,不是《魔女》续作或前传
- 最新评论
-
想看看TWH 评论于:11-30 想看TWH 评论于:11-30 找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢xinge 评论于:11-29 找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢wsz 评论于:11-26 找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢wsz 评论于:11-26 电影很不错谢谢分享贪睡的猫 评论于:11-18 一部不错的经典科幻kelvin 评论于:11-13 找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢285552528 评论于:11-09 找了好久的资源bjzchzch12 评论于:11-07 谢谢分享感谢ppy2016 评论于:11-05
- 热门tag