news 2026/4/18 13:19:39

【飞腾平台实时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/4/17 13:30:51

快速搭建MediaCrawler:完整的社交数据采集解决方案

快速搭建MediaCrawler&#xff1a;完整的社交数据采集解决方案 【免费下载链接】MediaCrawler 项目地址: https://gitcode.com/GitHub_Trending/mediacr/MediaCrawler MediaCrawler是一个功能强大的开源爬虫项目&#xff0c;专门针对小红书、抖音、快手、B站、微博等主…

作者头像 李华
网站建设 2026/4/18 8:37:48

SGMICRO圣邦微 SGM8291AYN5G/TR SOT23 运算放大器

特性 .低功耗:每放大器150pA .低失调电压:1.5mV(最大值) .宽输入共模电压范围 .低输入偏置和失调电流 .输出短路保护 *.轨到轨输出 .高输入阻抗 .高斜率:7V/us.小型封装: SGM8291可提供绿色封装:SOT-23-5、MSOP-8和SOIC-8 SGM8292有绿色MSOP-8和SOIC-8封装可选SGM8294有绿色TSS…

作者头像 李华
网站建设 2026/4/17 19:15:21

AIClient-2-API技术解析:零成本AI模型接入的架构设计与实现

AIClient-2-API技术解析&#xff1a;零成本AI模型接入的架构设计与实现 【免费下载链接】AIClient-2-API Simulates Gemini CLI, Qwen Code, and Kiro client requests, compatible with the OpenAI API. It supports thousands of Gemini model requests per day and offers f…

作者头像 李华
网站建设 2026/4/18 8:35:28

Habitat-Sim 3D模拟器实用配置教程:从入门到精通

Habitat-Sim 3D模拟器实用配置教程&#xff1a;从入门到精通 【免费下载链接】habitat-sim A flexible, high-performance 3D simulator for Embodied AI research. 项目地址: https://gitcode.com/GitHub_Trending/ha/habitat-sim Habitat-Sim作为专为具身AI研究设计的…

作者头像 李华
网站建设 2026/4/18 7:42:48

终极免费风扇控制神器:3步打造智能散热系统

终极免费风扇控制神器&#xff1a;3步打造智能散热系统 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanContro…

作者头像 李华
网站建设 2026/4/18 12:54:55

LxgwWenKai移动端字体美化:三步打造个性化手机界面

LxgwWenKai移动端字体美化&#xff1a;三步打造个性化手机界面 【免费下载链接】LxgwWenKai LxgwWenKai: 这是一个开源的中文字体项目&#xff0c;提供了多种版本的字体文件&#xff0c;适用于不同的使用场景&#xff0c;包括屏幕阅读、轻便版、GB规范字形和TC旧字形版。 项目…

作者头像 李华