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

Yocto Linux中Preempt RT与Docker冲突致实时任务无法运行问题排查

问题排查思路:Docker启动后Preempt RT主机实时任务失效

核心现象

在打了Preempt RT补丁的Yocto Linux系统上,主机原本可正常运行FIFO、RR实时调度任务,但启动Docker服务后,这类任务提示不支持FIFO调度;停止并禁用Docker后恢复正常。已尝试更换Docker版本、验证内核Docker配置、确认CONFIG_RT_GROUP_SCHED开启、对比ARM64内核配置无差异,但问题仍存在。

排查步骤

1. 检查cgroup实时调度组的资源限制

Docker启动后会创建cgroup层级,可能限制了根cgroup的实时调度配额:

  • 查看根cgroup的实时调度参数:
    cat /sys/fs/cgroup/cpu,cpuacct/cpu.rt_runtime_us
    cat /sys/fs/cgroup/cpu,cpuacct/cpu.rt_period_us
    
    如果cpu.rt_runtime_us被设置为0,会导致主机无法分配实时调度时间。可尝试手动调整:
    echo 950000 > /sys/fs/cgroup/cpu,cpuacct/cpu.rt_runtime_us
    
    调整后重新测试实时任务是否正常。

2. 验证Docker的cgroup驱动配置

Docker使用的cgroup驱动(cgroupfs或systemd)可能影响实时调度组的继承:

  • 查看当前Docker的cgroup驱动:
    docker info | grep Cgroup
    
    • 若使用cgroupfs:检查Docker是否修改了根cgroup的实时参数;可尝试切换为systemd驱动,修改/etc/docker/daemon.json:
      {
        "exec-opts": ["native.cgroupdriver=systemd"]
      }
      
      重启Docker后测试。
    • 若使用systemd:检查systemd切片配置,确认system.slice或docker.service的实时资源限制是否被压低。

3. 检查内核cgroup v2的兼容性

如果系统使用cgroup v2,Docker对实时调度的处理可能和v1不同:

  • 查看当前cgroup版本:
    mount | grep cgroup
    
    若为cgroup v2,检查根cgroup的实时参数:
    cat /sys/fs/cgroup/cpu.max
    cat /sys/fs/cgroup/cpu.rt_max_us
    
    确保cpu.rt_max_us不为0,且有足够配额分配给主机任务。

4. 排查Docker启动时的内核参数修改

Docker启动可能加载模块或调整sysctl参数,影响实时调度:

  • 对比Docker启动前后的sysctl参数差异:
    # 启动前保存参数
    sysctl -a > pre_docker_sysctl.txt
    # 启动Docker后保存
    sysctl -a > post_docker_sysctl.txt
    # 对比差异
    diff pre_docker_sysctl.txt post_docker_sysctl.txt
    
    重点关注kernel.sched_rt_runtime_us、kernel.sched_rt_period_us这类实时调度相关参数。

5. 检查实时任务的权限与优先级范围

Docker启动后可能修改了系统的实时优先级限制:

  • 查看当前用户的实时优先级限制:
    ulimit -r
    
    如果值为0,调整/etc/security/limits.conf:
    *                soft    rtprio          99
    *                hard    rtprio          99
    
    重新登录后测试。

6. 验证内核CONFIG_CGROUP_RT与CONFIG_RT_GROUP_SCHED的联动

虽然已确认CONFIG_RT_GROUP_SCHED开启,但需确保CONFIG_CGROUP_RT也已开启(部分内核版本中两者联动):

  • 查看内核配置:
    zcat /proc/config.gz | grep CONFIG_CGROUP_RT
    
    若未开启,需重新编译内核开启该选项。

内容的提问来源于stack exchange,提问作者Lee qun zhao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:22:23