You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何关闭CPU核心50上的kworker进程以避免上下文切换

解决核心50上kworker进程抢占的问题

1. 添加workqueue隔离内核启动参数

Linux内核4.15及以上版本支持通过启动参数限制unbound workqueue的运行核心,直接修改/etc/default/grub中的内核启动项:

  • 找到GRUB_CMDLINE_LINUX字段,在现有参数后追加workqueue.wq_unbound_cpumask=0xBFFFFFFFFFFFFF(该掩码对应关闭第50位核心,适配64核系统;若核心数不同,需计算对应掩码:将~(1 << 50)转换为十六进制即可)
  • 示例配置:
    GRUB_CMDLINE_LINUX="isolcpus=50 nohz_full=50 rcu_nocbs=50 workqueue.wq_unbound_cpumask=0xBFFFFFFFFFFFFF"
    
  • 更新grub并重启系统:
    sudo update-grub
    sudo reboot
    

2. 逐个调整workqueue的CPU掩码(适配低版本内核)

若内核版本低于4.15,需手动修改每个workqueue的cpumask:

  • 列出所有系统workqueue:
    ls /sys/devices/virtual/workqueue/
    
  • 对每个workqueue(如events、events_power_efficient),设置排除核心50的cpumask:
    echo 0xBFFFFFFFFFFFFF | sudo tee /sys/devices/virtual/workqueue/<workqueue_name>/cpumask
    
    替换<workqueue_name>为实际的workqueue名称,重复此操作覆盖所有相关队列。

3. 优化隔离参数配置

确保现有隔离参数生效并补充中断隔离:

  • 检查当前内核启动参数:
    cat /proc/cmdline
    
    确认isolcpus=50 nohz_full=50 rcu_nocbs=50存在
  • 若系统支持,将isolcpus参数改为isolcpus=managed_irq,50,可进一步隔离硬件中断,减少中断触发的kworker

4. 迁移核心50上的硬件中断

若仍有kworker因硬件中断触发,可将对应中断迁移至其他核心:

  • 查看核心50关联的中断:
    cat /proc/interrupts | grep 50
    
  • 对目标中断号(如123),设置其CPU亲和掩码为排除核心50:
    echo 0xBFFFFFFFFFFFFF | sudo tee /proc/irq/123/smp_affinity
    

验证效果

重启后执行以下命令确认核心50的进程状态:

ps -eLo psr,comm | grep '50'

或使用perf工具验证上下文切换情况:

sudo perf record -e sched:sched_switch -T -p <testprogram_PID>
sudo perf report

内容的提问来源于stack exchange,提问作者user22468931

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 05:12:28