[系统技巧] Linux CPU网卡软中断性能调优
作者:CC下载站 日期:2023-10-12 00:00:41 浏览:33 分类:玩电脑
前言
在工作中当我们使用了性能较差的 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-06 [工具测试] 使用 go-ycsb 对 etcd 进行基准 (benchmark) 性能测试
- 10-12 [软件教程] MobaXterm 安装使用教程【图解】
- 10-12 [软件技巧] 避开SS524V100 GDB的坑
- 10-11 [系统技巧] 如何理解Linux内核IS_ERR、ERR_PTR、PTR_ERR
- 10-11 [系统技巧] Linux内核的 EXPORT_SYMBOL 和 EXPORT_SYMBOL_GPL 的作用
- 10-11 [玩软件] 海思 fw_printenv 和 fw_setenv 工具详解
- 10-11 [系统技巧] Linux top 命令解析及使用
- 10-11 [系统教程] Linux WEXITSTATUS 宏讲解
- 10-11 [Python] python 创建 Telnet 客户端
- 08-16 [嗅探工具] HTTP Debugger Pro 9.11 汉化版
- 08-13 [WordPress / 扩展插件] WordPress缓存插件 WP Rocket v3.11.3 去广告破解版
- 03-15 [福利分享] 免费ftp服务器地址汇总
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[小说] 【飞卢小说】2100+本合集
[PPT模板] 160套收费高质量毕业答辩PPT模板
[小说] 付费小说300+
[文章合集] 知乎盐选付费文章合集,2888部
[书籍] 《高分图书50部》好书共读 休闲 成长 生活一个都不能少[epub]
[游戏娱乐] 《我的梦想卧室》v20240413中文版
[资料] 知识星球 付费课程(精选130篇)[PDF]
[有声读物] 冯唐讲《资治通鉴》(完结)【MP3】
[电影] 2022年国产奇幻片《聊斋新传之画皮人》HD国语中字
[书籍] 国学书籍70本(绝版珍藏)【TXT】
[资料] [大学期末救急课] 猴博士+高斯课堂+斐多课堂,全集视频合集
[云资源] 价值2万元的老男孩Python教程
[书库] 史上最全摄影书推荐(附700本PDF版打包下载)
[云资源] 花了一千多元买的私人健身教程
[下载工具] Internet Download Manager 6.42.7 (IDM)
[影视] 灌篮高手 WEB-DL版下载/Slam Dunk/スラムダンク/灌篮高手:THE FIRST/灌篮高手电影版 2022 The First Slam Dunk 61.35G
[即时通讯] 腾讯QQ PC版9.7.22.29315去广告绿色纯净版
[开发环境] PhpStorm2023中文激活版v2023.3.3 正式版
[资料] 3000 套电影电视剧 LOGO 宣传片常用音效合集包
[安卓软件] 酷我音乐APP_v10.7.6.4 去广告破解豪华VIP版
[云资源] 价值2万元的老男孩Python教程
[影视] 灌篮高手 WEB-DL版下载/Slam Dunk/スラムダンク/灌篮高手:THE FIRST/灌篮高手电影版 2022 The First Slam Dunk 61.35G
[云资源] 花了一千多元买的私人健身教程
[书库] 史上最全摄影书推荐(附700本PDF版打包下载)
[动画] 北斗神拳(1984) [两季合集] [MKV]
[资料] 抗战阵亡将士资料+续编
[电视剧] 三体 (2024) 全8集 网飞版本 中文字幕 合集
[影视] 三大队 WEB-DL版下载/Endless Journey/请转告局长,三大队任务完成了 2023 三大队 6.7G
[纪录片] 河西走廊【10集 国语 中文字幕 1080P 10.8G MP4】
[安卓软件] OfficeSuite中文版APP v14.2.50872.0破解版
- 最新评论
-
好东西阿zfy123123 评论于:04-18 谢谢楼主xiaoqi 评论于:04-12 勿在线解压,勿手机解压,请在电脑上用最新款压缩软件解压!推荐360压缩或者好压CC下载站 评论于:04-10 无法解压啊,客服能不能给个解压教程ravengrey 评论于:04-10 谢谢支持!!CC下载站 评论于:03-26 很棒的资源,感谢分享云体风身 评论于:03-26 感谢分享,好东西云体风身 评论于:03-26 谢谢支持!CC下载站 评论于:03-14 央视精品,感谢付出提供。qwer9009 评论于:03-14 谢谢支持!!!CC下载站 评论于:03-13
- 热门tag