分析
linux 机器报了以下 kernel 提示:
[6669164.138262] rcu: INFO: rcu_sched self-detected stall on CPU
[6669164.138262] rcu: 3-...!: (1 GPs behind) idle=41e/1/0x4000000000000002 softirq=227012737/227012738 fqs=0
[6669164.138262] rcu: (t=7030 jiffies g=458660025 q=8)
[6669164.138262] rcu: rcu_sched kthread starved for 7030 jiffies! g458660025 f0x0 RCU_GP_WAIT_FQS(5) ->state=0x0 ->cpu=2
[6669164.138262] rcu: RCU grace-period kthread stack dump:
[6669164.138262] rcu_sched R running task 0 10 2 0x80000000
[6669164.138262] Call Trace:
[6669164.138262] __schedule+0x29f/0x840
[6669164.138262] schedule+0x28/0x80
[6669164.138262] schedule_timeout+0x16b/0x3b0
[6669164.138262] ? __next_timer_interrupt+0xc0/0xc0
[6669164.138262] rcu_gp_kthread+0x40d/0x850
[6669164.138262] ? call_rcu_sched+0x20/0x20
[6669164.138262] kthread+0x112/0x130
...
通常三种情况会出现 rcu_bh
相关的提示, 分别为:
1. CPU 循环处理中禁止了中断;
2. CPU 循环处理中禁止了抢占, 并且启用了 ksoftirqd;
3. CPU 循环处理中禁止了下半部;
这几个条件都是和中断或内核抢占相关的, 由此看来应用程序不是引起该警告的原因, 更像是系统层面的.
再来看上面的报错:
rcu: INFO: rcu_sched self-detected stall on CPU
可以译为检测到 cpu
上存在 rcu_bh
处理延迟或超时
从上述的简单分析来看, 该消息只是提示信息, 不会是用户空间的程序来引起, 不过也需要多观察该 kernel 提示是否频繁出现. 可以尝试通过升级内核来解决该问题.
解决
加入backports
deb https://mirrors.ustc.edu.cn/debian/ buster-backports main contrib non-free
更新系统
apt update && apt dist-upgrade
安装新版内核,也就是 apt 源官方支持的内核版本,不是编译安装最新版内核,所以我们得先使用 apt search 查看当前支持的最新内核版本
apt search linux-image
接下来执行
apt install -t buster-backports linux-image-$(dpkg --print-architecture) linux-headers-$(dpkg --print-architecture) --install-recommends -y
接下来更新配置并重启
update-grub
reboot