收起左侧

软中断占用cpu0 100%

4
回复
150
查看
[ 复制链接 ]

2

主题

6

回帖

0

牛值

江湖小虾

2025-7-9 02:04:03 显示全部楼层 阅读模式

设备环境:物理机、反代、系统为0.9.13

BUG现象:每次开机都会有一个cpu核心被占用满,无法解决。具体内容见下文。

出现频率:必现

联系方式:17681068325

日志文件:123网盘链接https://www.123912.com/s/wSKejv-z0ssH?提取码:S8FW。多次尝试均无法上传任何文件,如不能下载日志,请及时电话联系。

bug排查进度

目前可以确定是软中断导致的。证明如下:

  1. 使用1Panel发现cpu0占用率为100%,进入进程发现是ksoftirqd/0和看worker/0导致。

屏幕截图2025-07-06222837.png
屏幕截图2025-07-06222927.png

  1. 进入SSH,查看软中断类型,经过两次对比发现是HI类型和TASKLET类型
  • 这是cpu0被占用满的图:

屏幕截图2025-07-06222854.png

  • 这是cpu2被占用满的图:

屏幕截图2025-07-09005128.png

  1. 此外发现还有可能是NMI类型的中断进程导致,对比两图,最大变化的就是NMI类型:
  • 这是CPU0的图
    屏幕截图2025-07-06222948.png
  • 这是CPU2的图
    屏幕截图2025-07-09005516.png

下一步计划

准备使用perf工具诊断,但是安装失败。采用docker安装,也失败。所以前来上报这个bug。

收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

55

主题

9167

回帖

0

牛值

管理员

2025-7-15 19:37:00 显示全部楼层
已收到反馈 我们先记录一下这个情况
感谢您,如果有需求可以随时联系我  详情 回复
2025-7-21 17:39

2

主题

6

回帖

0

牛值

江湖小虾

2025-7-21 17:39:36 楼主 显示全部楼层
飞牛技术同学 发表于 2025-7-15 19:37
已收到反馈 我们先记录一下这个情况

感谢您,如果有需求可以随时联系我

2

主题

6

回帖

0

牛值

江湖小虾

2025-8-4 03:22:41 楼主 显示全部楼层

sched_flamegraph.svg

补一个火焰图吧,我也看不懂

2

主题

6

回帖

0

牛值

江湖小虾

2025-8-10 16:38:52 楼主 显示全部楼层

OK,谢谢官方大大查验,问题已经解决了。

问题是由USB 电源管理引发的中断风暴,我写一下我的方法,供大家参考。

排查过程:

第一步:进入SSH,查看 top 显示 kworker/0:1+pm(内核电源管理线程)和 ksoftirqd/0(CPU0 软中断线程) 长期占满 CPU0,导致性能下降。

第二步:用 火焰图 和 perf 分析:火焰图中 xhci_hub_controlpm_runtime_suspend 等函数占比极高,结合 perf 采样,定位到 USB 设备频繁电源状态切换(挂起/唤醒) 触发内核任务。
屏幕截图2025-08-10144500.png

第三步:设备电源配置检查bash # 查看 USB 设备电源策略(默认多为 auto,即自动休眠/唤醒) cat /sys/bus/usb/devices/usb1/power/control发现 USB 设备处于自动电源管理(auto,导致高频中断和内核任务。

第四步:临时修复:禁用 USB 自动电源管理 bash # 遍历所有 USB 根集线器,强制禁用自动电源管理(立即生效,重启失效) for usb_dev in /sys/bus/usb/devices/usb*; do echo "on" > "$usb_dev/power/control" done。修复以后,cpu占用瞬间正常了,可以确定就是它的问题。
屏幕截图2025-08-10162836.png

第五步,永久固化,设置一个 crontab 开机自动执行 bash sudo crontab -e # 进入 crontab 编辑界面(默认编辑器为 nano) 。添加开机触发任务 在文件末尾添加以下内容(@reboot 表示系统重启时自动执行):bash @reboot for usb_dev in /sys/bus/usb/devices/usb*; do echo "on" > "$usb_dev/power/control"; done 保存退出。按 Ctrl + X → 提示“Save modified buffer?”,按 Y → 按 Enter 确认保存路径。

最后,重启检验,cpu占用下来了,重启也不会有问题。

唯一的问题是,为了装perf我重新处理了一下内核,导致现在飞牛的升级会失败,提示“文件不完整”。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则