news 2026/4/3 7:36:36

【飞腾平台实时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/3/31 0:38:05

避坑必看!Validrive,U 盘真实容量检测神器

避坑必看&#xff01;Validrive&#xff0c;U 盘真实容量检测神器 谁懂啊&#xff01;买 U 盘踩坑的痛真的太窒息了 —— 明明标着 1T、2T 的大容量&#xff0c;实际用起来才发现只有 32G、64G&#xff0c;存点大文件直接提示空间不足&#xff0c;纯纯花钱买教训。 下载地址&…

作者头像 李华
网站建设 2026/3/31 7:57:27

SGMICRO圣邦微 SGM8478-1CXS8G/TR SOIC-8 运算放大器

特性 .低失调电压:16pV(最大值) .输入信号范围: (-Vs)至0.1V,或(Vs)至1V(适用于双电源供电)接地:单电源时为-0.1V至(Vs)1V 增益:50V/V .PSRR:0.05uV/V(典型值) 共模抑制比:106dB(典型值) 0.1Hz至10Hz噪声:0.75VRMS 输入电压噪声密度:在1kHz时为39nV/Hz -3dB带宽:230kHz 轨到轨输…

作者头像 李华
网站建设 2026/3/23 0:19:41

RG_PovX第一人称视角插件完整使用指南:10分钟掌握沉浸式游戏体验

RG_PovX第一人称视角插件完整使用指南&#xff1a;10分钟掌握沉浸式游戏体验 【免费下载链接】RG_PovX 项目地址: https://gitcode.com/gh_mirrors/rg/RG_PovX 你是否曾经渴望在游戏中获得真正的身临其境感受&#xff1f;RG_PovX第一人称视角插件正是为此而生&#xff…

作者头像 李华
网站建设 2026/4/2 3:14:26

FreeMove:告别C盘爆满!智能迁移程序文件的终极解决方案

FreeMove&#xff1a;告别C盘爆满&#xff01;智能迁移程序文件的终极解决方案 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove 你是否经常面对C盘亮红的尴尬局面&…

作者头像 李华
网站建设 2026/3/27 14:00:13

HoRain云--JavaScript表单验证终极指南

&#x1f3ac; HoRain云小助手&#xff1a;个人主页 &#x1f525; 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;…

作者头像 李华
网站建设 2026/3/29 0:34:10

Windows平台ADB驱动高效安装完整指南:告别设备连接困扰

Windows平台ADB驱动高效安装完整指南&#xff1a;告别设备连接困扰 【免费下载链接】Latest-adb-fastboot-installer-for-windows A Simple Android Driver installer tool for windows (Always installs the latest version) 项目地址: https://gitcode.com/gh_mirrors/la/L…

作者头像 李华