我正在开发一个在 ARM 处理器上运行 debian Buster 的定制无头 Linux 系统。
Linux 内核 5.10.72
但最近我在查看 CPU 使用情况时看到了这一点:
我相信 brcmf 与正在使用的 Wi-Fi 驱动程序/芯片有关(扩展模块是嵌入式艺术家的 1DX M.2 模块。
我尝试过让系统在系统上工作,但我就是做不到。
另外 2 个高使用率的 kworker 只会时不时地出现,我认为它们是无关的,但它们似乎确实强化了有问题的 kworker 的一些 CPU。
图像的第三部分是大多数时候的样子。
有什么建议吗?
应 Artem 的要求进行编辑
编辑:
运行后
echo l > /proc/sysrq-trigger
dmesg
新的输出是:
[ 875.933977] sysrq: Show backtrace of all active CPUs
[ 875.939010] sysrq: CPU0:
[ 875.939017] Call trace:
[ 875.939031] dump_backtrace+0x0/0x1d0
[ 875.939038] show_stack+0x18/0x24
[ 875.939047] showacpu+0x64/0x80
[ 875.939056] flush_smp_call_function_queue+0xd8/0x250
[ 875.939063] generic_smp_call_function_single_interrupt+0x14/0x20
[ 875.939070] ipi_handler+0xa0/0xd0
[ 875.939078] handle_percpu_devid_fasteoi_ipi+0x98/0xb0
[ 875.939084] __handle_domain_irq+0xb0/0x130
[ 875.939092] gic_handle_irq+0xc0/0x140
[ 875.939098] el1_irq+0xcc/0x180
[ 875.939105] _raw_spin_unlock_irqrestore+0x18/0x50
[ 875.939113] sdhci_request+0xac/0xcc
[ 875.939121] __mmc_start_request+0x68/0x140
[ 875.939127] mmc_start_request+0x94/0xc0
[ 875.939133] mmc_wait_for_req+0x70/0x100
[ 875.939140] mmc_io_rw_extended+0x1d4/0x2d0
[ 875.939147] sdio_io_rw_ext_helper+0x194/0x240
[ 875.939153] sdio_readl+0x30/0x60
[ 875.939191] brcmf_sdiod_readl+0x8c/0x9c [brcmfmac]
[ 875.939217] brcmf_sdio_intr_rstatus+0x44/0xec [brcmfmac]
[ 875.939243] brcmf_sdio_dataworker+0x114/0x2430 [brcmfmac]
[ 875.939252] process_one_work+0x1bc/0x340
[ 875.939258] worker_thread+0x70/0x434
[ 875.939265] kthread+0x13c/0x150
[ 875.939271] ret_from_fork+0x10/0x30
答案1
我加入 unix stack 只是为了回答这个问题!
这对我来说真是一场噩梦,因为我因为这个问题而离开了 Linux。每次我安装新的linux(每个发行版)第一次启动时都是正常的,但是在10次或更多次重新启动后,我遇到了同样的问题,woker吃掉了100%的CPU资源,是的,这确实给我带来了压力,因为我的笔记本变得如此迟缓且无法使用。不是所有时间,而是每 5 分钟随机一次。
我认为这是因为我的 GPU 或 CPU 问题。
经过超长的时间和全力的努力摆脱这个噩梦终于我知道为什么会出现这个问题:
我的笔记本上的 WIFI/WLAN 坏了!
执行此命令关闭我的 WIFI/WLAN 设备后:
完全启用/禁用网络
nmcli networking off
只用于无线网络
nmcli radio wifi off
在这两种情况下都需要重新启用。
一切都恢复正常,没有 WOrker 高 CPU 使用率了!
我敢打赌不仅WIFI坏了,HDD、USB、Pendrive、蓝牙也坏了。
对不起,我的英语不好 :(
答案2
我删除了 dts 中的 cap-sdio-irq 并将 CPU 使用率从 20% 修复到 0.5%
答案3
我终于找到了一个修复程序,它与 mengxp 的修复程序相同,但我会更好地解释它。
事实证明,broadcom 驱动程序工作得不太好或者什么的,主要问题是主机唤醒中断。它会生成数百万个中断,但是此 dts 参数是可选的。
所以通过删除
// interrupt-parent = <&gpio1>;
// interrupts = <13 IRQ_TYPE_LEVEL_LOW>; /* WL HOST WAKE COM pin 36*/
// interrupt-names = "host-wake";
这些字段从设备树中的CPU负载消失。之后 Wi-Fi 似乎工作正常。