[系统技巧] Linux CPU网卡软中断性能调优
作者:CC下载站日期:2023-10-12 00:00:41浏览:14分类:玩电脑
前言
在工作中当我们使用了性能较差的 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
猜你还喜欢
- 10-12 [软件教程] (海思)内核添加串口方法
- 10-12 [软件教程] MobaXterm 安装使用教程【图解】
- 10-12 [软件教程] SS524V100 SDK安装编译osdrv问题汇总
- 10-12 [软件技巧] 避开SS524V100 GDB的坑
- 10-11 [系统技巧] ubuntu摄像头打开失败的解决方法
- 10-11 [系统技巧] 如何理解Linux内核IS_ERR、ERR_PTR、PTR_ERR
- 10-11 [系统技巧] Linux内核的 EXPORT_SYMBOL 和 EXPORT_SYMBOL_GPL 的作用
- 10-11 [系统技巧] Linux 内核 container_of 宏详解
- 10-11 [玩软件] 海思 fw_printenv 和 fw_setenv 工具详解
- 10-11 [玩软件] 海思ntfs-3g移植、挂载ntfs格式的U盘
- 10-11 [系统技巧] Linux top 命令解析及使用
- 10-11 [玩电脑] SS524V100 RTL8152B(USB转网卡)驱动移植
取消回复欢迎 你 发表评论:
-
- 最新文章
- 热门文章
- 热评文章
[安卓软件] 剪映APP(视频剪辑软件)v12.0.0.0 剪映破解版
[网文] 最舒适的“猫冬”,藏在贵州这12000家宝藏民宿里!
[古籍] 修真功法《道源寶卷》
[影视] 杀手 WEB-DL版下载 2023 The Killer 4.65G
[书籍] PUA 把妹书籍
[视频处理] 会声会影2023 v26.0.0.147 雨糖科技的特别版
[文件编辑] IceCream PDF Editor PRO v3.15中文破解版
[安卓软件] 扫描全能王APP v6.53.0.2311090000 破解版
[思维导图] XMind 2023中文破解版v23.11.04336特别版
[视频编辑] 会声会影2021 v24.1.0.299r101胡桃的特别版
[课程] [石国鹏讲历史][140集全集合集][公开课][MP4][共32G]
[音乐合集] 打包69G流行车载音乐1100曲和MV高清视频500个劲爆舞曲
[精品资源] 绝无仅有!kindle mobi 漫画电子书打包
[有声小说]【明朝败家子】【紫禁】版全集
[系统辅助] FastCopy汉化破解版(文件快速复制工具)5.4.1
[即时聊天] 腾讯QQ PC版9.7.19.29259去广告绿色纯净版
[Windows10] Windows 10 LTSC_2021 Build 19044.3636
[浏览器] 360极速浏览器X64 v22.1.1019.0 绿色便携版
[激活辅助] Office 2013-2021 C2R Install中文版7.7.6.0
[硬件检测] GPU-Z中文版(显卡检测工具)V2.55.00 汉化版
[动画] 灌篮高手 The First Slam Dunk 大电影(2023)国语 mp4
[电影] 2023年国产6.4分悬疑犯罪片《消失的她》HD国语中英双字
[激活辅助] Office 2013-2021 C2R Install中文版7.7.6.0
[动画] [我是格鲁特 I Am Groot 第一、二季][共10集][英语中字][打包]
[电影]【稀有,一个你没看过的完美版本】异形前传:普罗米修斯 [155 分钟粉丝剪辑版 / 公映国配 5.1 / 原声中英 国配中英字幕] 加长完美版
[影视] 鬼玩人崛起 4KWEB_DL下载/鬼玩人:复活(台) / 鬼玩人5 2023 Evil Dead Rise 17.16G
[即时聊天] 腾讯QQ PC版9.7.19.29259去广告绿色纯净版
[美食] 湖南宵夜第一城,不是长沙,不是常德
[福利线报] 淘宝天降福利1元撸实物包邮
[安卓软件] 扫描全能王APP v6.53.0.2311090000 破解版
- 最新评论
-
购买后刷新一下页面即可出现内容CC下载站 评论于:11-18 怎么看到资源啊yvettefan 评论于:11-18 好东西瞅一瞅ccmoon 评论于:10-23 非常好的电影,使我头脑旋转。1234134513 评论于:09-26 很棒的资源,支持一下avex 评论于:09-23 很棒的资源,支持一下gyc 评论于:09-23 谢谢分享,看看raffa 评论于:09-22 很棒的资源,支持一下arethusaxd 评论于:09-14 我来看看他bajie 评论于:09-12 很棒的资源,支持一下mdfatt86 评论于:09-12
- 热门tag
暂无评论,来添加一个吧。