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

为何创建带死循环的RT进程时我的RT Linux系统会出现冻结?

现象本质说明

你遇到的不是内核崩溃,是FULL PREEMPT模式下RT调度机制的正常行为导致的低优先级任务饥饿,表现为系统冻结。

具体原因分析

  • RT-Preempt开启FULL PREEMPT后,SCHED_FIFO调度类的进程优先级高于所有普通CFS调度进程、以及大部分低优先级内核线程。只要该类进程不主动让出CPU(无睡眠、阻塞、系统调用调度点、被更高优先级RT进程抢占),内核会永久让它占用绑定的CPU核心,不会强制调度切走。
  • 你的第一个测试用例中,子进程绑定了CPU1、设置了高优先级SCHED_FIFO策略,纯死循环没有任何让出CPU的逻辑,直接占满CPU1的所有运行时间,所有跑在CPU1上的普通系统服务、桌面进程等低优先级任务完全得不到调度,就会出现系统冻结的表象。
  • 原生Ubuntu内核使用CFS公平调度,无论进程优先级高低,都会分配时间片,时间片用完后会强制调度切走,因此不会出现任务饿死、系统冻结的问题。

修改后恢复正常的原因

你调整后的死循环代码中添加了usleep(100)调用,该系统调用会让进程主动进入睡眠状态,让出CPU执行权,给低优先级任务留出了运行窗口,因此CPU占用率下降,系统不再出现冻结。

相关建议

  • RT系统开发中,非独占CPU核心的高优先级RT进程禁止编写无任何调度点的纯死循环,否则必然导致绑定核心上的低优先级任务饿死。
  • 如果业务需要独占某个CPU核心,可以通过内核启动参数isolcpus隔离对应核心,避免系统默认把普通进程调度到该核心上,从根源避免系统冻结。
  • 可检查内核配置项CONFIG_RT_GROUP_SCHED是否开启,开启后可通过cgroup限制RT进程的CPU使用比例,避免占满整个核心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:12:00