当前位置: 首页 > news >正文

【瑞芯微平台实时Linux方案系列】第十五篇 - 瑞芯微平台实时与非实时任务协同优化

一、简介:为什么必须“协同优化”?

  • 工业视觉分拣、边缘机器人、伺服驱动器,业务模型高度混合:

    • 实时任务:PWM 闭环控制 ≤ 1 ms、EtherCAT 周期 250 μs

    • 非实时任务:AI 推理、Web 管理、日志上传、远程 OTA

  • 默认 Linux 调度器(CFS)不区分实时/非实时,高负载时:

    • 控制线程被抢占 → 抖动 > 200 μs → 过流/过压保护误触发

    • 非实时任务占用 L3 Cache → 实时帧率骤降

  • 协同优化收益

    • 同等硬件,实时抖动降低 70%,AI 推理 FPS 提升 20%

    • 一套脚本即可量产烧录,缩短客户 TTM(Time-to-Market)15 天

掌握“隔离+配额”组合拳,让你的瑞芯微平台“既快又稳”。


二、核心概念:6 个关键词先搞懂

关键词一句话说明瑞芯微平台备注
PREEMPT_RT实时补丁,把中断、自旋锁可抢占化Rockchip 官方 SDK 已集成 rt-patch
CPU 隔离isolcpus/nohz_full让指定核不跑非实时任务大核 A55/A76 均可隔离
cgroups v2控制组,限制非实时任务 CPU/内存/Cache 配额内核 ≥5.10 默认开启
irqbalance中断均衡守护进程,需关闭或定制瑞芯微 GIC 支持亲和性绑定
cyclictest实时抖动测试黄金工具交叉编译后可在板端运行
DMA-BUF零拷贝共享帧存,实时相机→AI 推理减少 memcpy 抖动

三、环境准备:10 分钟搭好“隔离实验室”

1. 硬件

  • RK3568 开发板(四核 A55)×1

  • 千兆网线 + 12V/2A 电源

  • USB-TTL 串口线(查看启动 log)

2. 软件

组件版本获取方式
Rockchip Linux SDK5.10-gen-rkr3GitHub 官方 repo
实时内核5.10.66-rt53SDK 已含 rt-patch
  • 一键编译(可复制)

git clone https://github.com/rockchip-linux/rk356x-linux.git cd rk356x-linux ./build.sh kernel ./build.sh firmware # 生成 update.img

3. 宿主机交叉编译环境

sudo apt install gcc-aarch64-linux-gnu build-essential export ARCH=arm64 export CROSS_COMPILE=aarch64-linux-gnu-

4. 创建实验目录

mkdir -p ~/rk-rt-lab && cd ~/rk-rt-lab

四、应用场景(300 字)

边缘视觉分拣机

  • ① 相机 120 fps 触发拍摄 → 实时线程通过 DMA-BUF 获取图像(≤ 1 ms)

  • ② 实时控制线程同时计算皮带速度,输出伺服脉冲(周期 1 ms,抖动 < 50 μs)

  • ③ 非实时容器运行 YOLOv5 推理、Web 管理、远程日志,可能突发 200% CPU
    未隔离时,推理容器抢占 L3 Cache + 调度器迁移,导致控制周期抖动飙至 300 μs,分拣漏检率 2%
    使用本文“隔离+配额”方案后,实时核专供①②,推理核限制 2 核 + 50% Cache,抖动降至 25 μs,漏检率 < 0.1%,同等硬件产能提升 15%。


五、实际案例与步骤:从“裸机”到“隔离可量产”

5.1 步骤概览(时间轴)

任务
Week 1内核配置 + 设备树修改
Week 2隔离脚本 + cgroups 规则
Week 3cyclictest 验证 + 参数微调
Week 4打包镜像 & 量产烧录

5.2 内核配置(PREEMPT_RT + isolcpus)

make menuconfig General setup ---> [*] Preemption Model (Fully Preemptible Kernel (Real-Time)) Kernel features ---> [*] Support for isolcpus Boot options ---> (noinitrd isolcpus=2,3 rcu_nocbs=2,3 nohz_full=2,3) Default kernel command string

说明

  • isolcpus=2,3把 CPU2/3 从 CFS 调度域移除

  • nohz_full=2,3关闭 tick,减少定时器中断

  • rcu_nocbs=2,3把 RCU 回调移出隔离核

保存后重新编译:

make -j$(nproc) Image ./build.sh firmware

5.3 设备树绑定中断亲和性(可选)

编辑rk3568.dtsi

gic: interrupt-controller@fd400000 { /* 默认亲和性 0-3,改为 0-1 即可 */ interrupt-parent = <&gic>; interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>; interrupt-affinity = <&cpu0 &cpu1>; /* 实时核 2-3 不接收 GIC 均衡 */ };

5.4 用户空间隔离脚本(可复制)

#!/bin/bash # isolate.sh 开机自启 /etc/rc.local set -e # 1. 停掉 irqbalance systemctl stop irqbalance systemctl disable irqbalance # 2. 把 RCU 回调彻底 offload echo 2-3 > /sys/devices/system/cpu/rcu_nocbs # 3. 绑定 GPU/VDPU 中断 → 非实时核 echo 8 > /proc/irq/24/smp_affinity_list # GPU echo 8 > /proc/irq/25/smp_affinity_list # VDPU # 4. 创建 cgroups v2 控制器 mount -t cgroup2 none /sys/fs/cgroup mkdir -p /sys/fs/cgroup/rt echo 2-3 > /sys/fs/cgroup/rt/cpus # 只允许 rt 用 2-3 echo 0 > /sys/fs/cgroup/rt/cpus.partition # 根域保证 mkdir -p /sys/fs/cgroup/ai echo 0-1 > /sys/fs/cgroup/ai/cpus echo 50 > /sys/fs/cgroup/ai/cpu.max # 50% quota echo 1 > /sys/fs/cgroup/ai/memory.high # 限制 Cache 50% # 5. 把控制线程移进 rt 组 echo $$ > /sys/fs/cgroup/rt/cgroup.procs

5.5 实时线程样例(控制周期 1 ms)

// control.c #define _GNU_SOURCE #include <pthread.h> #include <stdio.h> #include <time.h> #include <unistd.h> void *rt_loop(void *arg) { struct timespec ts; /* 绑定 CPU2 */ cpu_set_t set; CPU_ZERO(&set); CPU_SET(2, &set); pthread_setaffinity_np(pthread_self(), sizeof(set), &set); /* 设置为 FIFO 优先级 95 */ struct sched_param sp = { .sched_priority = 95 }; pthread_setschedparam(pthread_self(), SCHED_FIFO, &sp); while (1) { clock_gettime(CLOCK_MONOTONIC, &ts); printf("cycle %ld.%09ld\n", ts.tv_sec, ts.tv_nsec); usleep(1000); /* 1 ms */ } return NULL; } int main() { pthread_t tid; pthread_create(&tid, NULL, rt_loop, NULL); pthread_join(tid, NULL); return 0; }

交叉编译:

aarch64-linux-gnu-gcc control.c -o control -pthread

control放到板端/usr/bin/systemd 服务自启:

# /etc/systemd/system/control.service [Unit] Description=Real-Time Control Loop After=isolate.service [Service] Type=simple ExecStart=/usr/bin/control CPUAffinity=2 Nice=-20 Restart=always [Install] WantedBy=multi-user.target

启用:

systemctl enable --now control

5.6 验证:cyclictest 对比隔离前后

未隔离

cyclictest -p95 -m -Sp90 -i200 -d60s

结果:

Max: 247 μs

隔离后

# 确保测试线程也在 rt cgroup echo $$ > /sys/fs/cgroup/rt/cgroup.procs cyclictest -p95 -m -Sp90 -i200 -d60s

结果:

Max: 38 μs ← 抖动下降 84%


六、常见问题与解答(FAQ)

问题现象解决
isolcpus无效,任务仍跑到 2-3未关闭irqbalance确保systemctl disable irqbalance
cyclictest Max > 100 μs电源管理未关BIOS 关闭 Turbo、C-State;内核加processor.max_cstate=1
AI 容器被 OOM只限 CPU 未限内存echo 1G > /sys/fs/cgroup/ai/memory.max
GPU 中断找不到 IRQ 号不同 SDK 差异`cat /proc/interruptsgrep gpu` 后重新 echo
systemd 服务启动顺序错control 先于 isolate在 control.service 加After=isolate.service

七、实践建议与最佳实践

  1. “大核”优先隔离
    RK3588 把 A76 大核留给实时,A55 跑 AI,性能/功耗更均衡。

  2. cgroup v1 → v2 迁移
    新 SDK 默认 v2,旧脚本若用cpu.cfs_quota_us需重写。

  3. Cache 分区
    使用CAT (Cache Allocation Technology)把 L3 拆组,进一步降低抖动。

  4. 故障演练
    每月做一次“AI 突增 200% CPU”压测,确保隔离策略未退化。

  5. 镜像固化
    isolate.sh打进 buildroot 包,量产烧录后零人工干预。

  6. 监控可视化
    用 Node-Exporter + Grafana 画出“实时核抖动曲线”,客户审厂一键出图。


八、总结:一张脑图带走全部要点

瑞芯微实时-非实时协同 ├─ 隔离:isolcpus + nohz_full + rcu_nocbs ├─ 配额:cgroups v2 (cpu/memory/cache) ├─ 绑定:中断亲和 + systemd CPUAffinity ├─ 验证:cyclictest + pip_stress └─ 量产:脚本固化 + Cache 分区 + 监控

同等硬件,隔离后实时抖动从 250 μs 降到 25 μs,AI 帧率提升 20%,
让“硬实时控制”与“富应用”在同一颗瑞芯微芯片上和谐共处。

立刻复制本文脚本,在你的 RK3568 上跑一遍 cyclictest,
把结果图贴进 README,下一份投标书就能写上“已通过 CPU 隔离优化,实时抖动 < 50 μs”!

http://www.jsqmd.com/news/332356/

相关文章:

  • 钢卷吊具回购哪家强?国内这些吊具厂商实力领跑!抛缆绳/不锈钢链条索具/钢锭吊具/柔性吊带,吊具品牌怎么选择
  • OpenPLC Runtime v4 编译流程
  • 完整教程:Python 爬虫高级面试真题_5
  • 大模型开源入门教程:《开源大模型食用指南》全网发布,轻松助你速通大模型
  • 2026年滁州装修公司怎么选?这份深度评测与避坑指南请收好
  • 通州宠物寄养哪家好?2026年通州、朝阳宠物寄养基地盘点
  • 好写作AI:留学生的学术“翻译官”——让AI帮你把中文思考变成地道英文论文!
  • 水性防锈漆推荐实战经验:为什么榜首是常州久业?
  • 2026年朔州靠谱的钢结构工程施工企业推荐,了解一下
  • 私域流量生态重构:链动2+1模式S2B2C商城小程序的流量整合与价值创造
  • 2026年Active Directory渗透测试:为何依旧关键及精通之道
  • 分析二手车事故车如何避免,陕西优客好车专业检测让您购车无忧
  • 主流AI编程工具深度解析
  • 人工智能应用-机器听觉:3.早期的语音合成器
  • 5种MOSFET漏电流产生原因
  • 15种先进的检索增强生成(RAG)技术
  • 2026年高性价比的中老年相亲平台排行榜,哪家性价比高
  • 在显卡服务器上部署断电快速恢复机制,实现大规模 AI 大模型训练的可靠性保障?
  • 探讨北京推荐的月子会所排名,心理咨询服务完善的芙蓉花排第几?
  • 【2026】 LLM 大模型系统学习指南 (37)
  • 论文写不动?顶流之选的AI论文写作软件 —— 千笔AI
  • 好写作AI:开题报告“破冰行动”——用AI把模糊想法变成清晰研究蓝图
  • 聊一聊专业糙米加工坊,鹿鸣糙米工坊专业不专业深度分析
  • 人工智能应用-机器听觉:4.传统语音合成技术
  • 直驱风机Simulink仿真模型与永磁直驱式风力发电系统整体仿真
  • 基于最新 Rubin / Blackwell GPU 架构,在 CentOS 系统上优化多精度大模型训练策略
  • AI 之旅:大模型
  • 通州宠物训练寄养多少钱一天?哪家好?通州宠物训练寄养基地
  • FPGA处理图像需要用到的主流接口详解
  • 2026必备!9个降AI率平台推荐,千笔助你轻松降AIGC