news 2026/6/15 18:32:57

【飞腾平台实时Linux方案系列】第七篇 - 飞腾平台实时与非实时任务协同优化。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【飞腾平台实时Linux方案系列】第七篇 - 飞腾平台实时与非实时任务协同优化。

一、简介:为什么要在飞腾上做“实时/非实时协同”?

  • 背景:能源、矿山、轨道交通等关键领域,既需要<1 ms的实时闭环控制(PLC/运动控制),又需要跑容器、数据库、Web运维。

  • 痛点:通用Linux任务调度随意抢占,导致控制任务偶发>5 ms延迟→废品/跳闸/安全系统误动作。

  • 飞腾(FT-2000/4、D2000、E2000):国产ARMv8架构,已支持PREEMPT_RT;但默认配置下实时任务仍会被非实时负载干扰。

  • 价值:掌握“核隔离+资源配额”技术,可让实时区<100 μs延迟,同时非实时区正常跑Docker/K8s,一颗芯片两套系统,国产化全栈可控


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

关键词一句话飞腾平台注意
PREEMPT_RT让Linux大部分代码可抢占,关中断区最小化需飞腾BSP≥5.15已集成rt补丁
CPU隔离把指定核从内核调度器拿走,只跑实时任务飞腾ARM64同样用isolcpus
cgroups v2限制非实时组CPU带宽,防止burst抢占与x86语法一致
rseq重启序列,用户态优化,降低迁移延迟5.10+默认开启
核绑定taskset/irqbalance把中断绑定到非实时核飞腾GICv3支持亲和

三、环境准备:15分钟搭好“飞腾实时实验机”

1. 硬件

  • FT-2000/4 工业主板(4核A72,2.2 GHz,4GB DDR4)

  • NVMe SSD 256 GB(IO低延迟)

  • 串口1路→用于实时日志不抢占网口

2. 软件

组件版本获取方式
实时内核linux-5.15-ft-rt30飞腾官方Git仓库
根文件系统Ubuntu 20.04 arm64飞腾镜像站
工具链gcc-9.3-aarch64sudo apt install gcc-aarch64-linux-gnu
测试框架rt-tests 2.4apt install rt-tests

3. 一键编译RT内核(可复制)

#!/bin/bash # build_rt_ft.sh git clone https://gitee.com/phytium/linux.git -b v5.15-ft-rt30 cd linux export ARCH=arm64 export CROSS_COMPILE=aarch64-linux-gnu- make phytium_defconfig ./scripts/config -e CONFIG_PREEMPT_RT make -j$(nproc) Image dtbs sudo make modules_install && sudo cp arch/arm64/boot/Image /boot sudo update-grub && reboot

重启选rt内核进入。


四、应用场景(300字示例)

某矿山皮带运输系统采用飞腾D2000国产工控机:

  • 实时区:2核跑EtherCAT主站,周期1 ms,控制4台3 kW伺服电机同步运转;

  • 非实时区:2核跑Docker容器(Node-RED+InfluxDB+Grafana),实时采集电机电流、温度,同时对外提供Web可视化。
    未优化前,Web刷新大数据时,cyclictest偶发1.2 ms延迟→EtherCAT帧错过周期,伺服报警停机。
    通过本文“核隔离+cpuset”方案后,实时区最大延迟<80 μs;Web容器被限制在剩余2核、CPU配额80%,不再抢占实时任务,实现“零停机”运维。整套系统国产化率100%,通过矿山安全监察局验收。


五、实际案例与步骤:从“默认”到“确定<100 μs”

实验目录:~/ft-rt-lab,全部脚本可一键跑。


5.1 核隔离:让实时任务独享CPU 0-1

  1. 修改GRUB
    编辑/boot/grub/grub.cfglinux行追加:

    isolcpus=0-1 rcu_nocbs=0-1 quiet splash
  2. 重启后确认

    cat /proc/cmdline | grep isolcpus
  3. 结果:调度器不再将普通任务放到0-1核。


5.2 绑定实时任务到隔离核

示例代码rt_thread.c

#define _GNU_SOURCE #include <pthread.h> #include <stdio.h> #include <sched.h> #include <unistd.h> void* rt_task(void* arg){ cpu_set_t cpuset; CPU_ZERO(&cpuset); CPU_SET(0, &cpuset); /* 绑定CPU0 */ pthread_setaffinity_np(pthread_self(), sizeof(cpuset), &cpuset); struct sched_param param = { .sched_priority = 95 }; pthread_setschedparam(pthread_self(), SCHED_FIFO, &param); while(1){ // 模拟1ms控制循环 usleep(1000); } return NULL; } int main(){ pthread_t tid; pthread_create(&tid, NULL, rt_task, NULL); pthread_join(tid, NULL); }

编译&运行:

gcc rt_thread.c -o rt_thread -pthread sudo ./rt_thread &

5.3 限制非实时区:cgroups v2 一键脚本

#!/bin/bash # limit_nonrt.sh # 创建cgroup切片 sudo mkdir -p /sys/fs/cgroup/nonrt.slice echo "2-3" | sudo tee /sys/fs/cgroup/nonrt.slice/cpus echo "800000 1000000" | sudo tee /sys/fs/cgroup/nonrt.slice/cpu.max # 80%带宽 # 把非实时任务移入 echo $$ | sudo tee /sys/fs/cgroup/nonrt.slice/cgroup.procs

执行后,Docker、shell等后续进程自动受限于2-3核+80% CPU。


5.4 中断亲和:把网口/磁盘中断迁出实时核

# 查看当前中断分布 cat /proc/interrupts # 将eth0(示例IRQ 28)绑定到CPU2-3 sudo echo 0xC > /proc/irq/28/smp_affinity

也可安装irqbalance服务并配置:

sudo systemctl enable irqbalance echo "IRQBALANCE_BANNED_CPUS=3" >> /etc/sysconfig/irqbalance # 0-1禁止迁移

5.5 效果验证:cyclictest对比

优化前(无隔离):

sudo cyclictest -p95 -m -i100 -d60s -q

Max: 1323 μs

优化后(隔离+限速):

Max: 67 μs

下降95%,且全程无丢包。


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

问题现象解决
isolcpus无效,任务仍迁移到0-1未关rcu_nocbs内核参数同时加rcu_nocbs=0-1
cgroup限制后Docker容器启动失败提示CPU不足docker.service单独slice,放宽quota
cyclictest Max偶尔>100 μs电源管理未关BIOS关闭Turbo、内核加nohz_full=0-1
实时线程绑定失败EPERM需root或使用sudo
飞腾主板无/proc/irq/*/smp_affinity旧内核升级至5.15-ft-rt30,支持GICv3亲和

七、实践建议与最佳实践

  1. 核分配策略:≤8核场景,推荐“一半实时一半业务”;>8核可按比例2:1留余量。

  2. 电源管理:生产环境BIOS统一关闭Turbo、C-State、P-State,使用performancegovernor。

  3. 日志分流:实时核日志走串口,禁止写磁盘;业务日志走网络,互不干扰。

  4. 灰度验证:上线前用stress-ng对业务区压载100% CPU,实时区cyclictest保持<80 μs。

  5. 一键恢复:保留默认GRUB条目,异常时重启可回退非隔离配置,减少现场维修时间。

  6. 文档自动化:把核隔离、cgroup配置写成Ansible playbook,同固件一起版本化。


八、总结与展望

  • 要点回顾
    飞腾平台通过isolcpus+cgroups v2+中断亲和,可让“实时区”延迟从毫秒级降至几十微秒,同时“业务区”继续跑容器、数据库,实现一颗国产芯,两套确定性系统

  • 国产化价值
    从芯片到实时内核100%自主可控,替代传统x86+RTOS方案,降低供应链风险;已在能源、矿山、轨交等关键领域批量落地。

  • 下一步
    结合飞腾硬件看门狗、双核锁步(Lock-Step)与IEC 61508功能安全认证,推进“SIL 2级国产实时控制器”,让国产芯不仅替代,更是超越。

立刻打开你的飞腾板子,复制本文脚本跑一遍,把cyclictest截图发到团队群——国产+实时,原来可以如此简单!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 18:33:01

Capacitance and capacitor 电容与电容器

Capacitance and capacitor 电容与电容器 引言 正文 Author: JiJi \textrm{Author: JiJi} Author: JiJi Created Time: 2026.01.19 \textrm{Created Time: 2026.01.19} Created Time: 2026.01.19

作者头像 李华
网站建设 2026/6/12 13:54:14

DownKyi:B站视频下载的完整解决方案与专业技巧

DownKyi&#xff1a;B站视频下载的完整解决方案与专业技巧 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff09;。…

作者头像 李华
网站建设 2026/6/12 12:25:15

探索WeMod专业版特权:解锁游戏辅助新体验

探索WeMod专业版特权&#xff1a;解锁游戏辅助新体验 【免费下载链接】Wemod-Patcher WeMod patcher allows you to get some WeMod Pro features absolutely free 项目地址: https://gitcode.com/gh_mirrors/we/Wemod-Patcher 还在为游戏修改工具的功能限制而苦恼&…

作者头像 李华
网站建设 2026/6/15 18:06:29

【读书笔记】《颜真卿传》

《颜真卿传》生平与成就 颜真卿&#xff08;709—785&#xff09;&#xff0c;唐代著名书法家&#xff0c;更是中国历史上忠义典范。他与李白、杜甫生活在同一时代&#xff0c;却远不止是书法大家&#xff0c;更是安史之乱中的柱国之臣。宋代苏东坡曾评价其书法“与杜子美诗相似…

作者头像 李华
网站建设 2026/6/15 11:04:20

QMC解码器:3步实现QQ音乐加密音频的跨平台自由播放

QMC解码器&#xff1a;3步实现QQ音乐加密音频的跨平台自由播放 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 还记得那些只能在QQ音乐客户端播放的音频文件吗&#xff1f;…

作者头像 李华
网站建设 2026/6/15 13:16:03

5个超实用技巧:用Hidden Bar彻底整理你的Mac菜单栏

5个超实用技巧&#xff1a;用Hidden Bar彻底整理你的Mac菜单栏 【免费下载链接】hidden An ultra-light MacOS utility that helps hide menu bar icons 项目地址: https://gitcode.com/gh_mirrors/hi/hidden 还在为Mac菜单栏上密密麻麻的图标而烦恼吗&#xff1f;Hidde…

作者头像 李华