G8701 RK3576 RealTime Linux 测试报告

概述

标准Linux系统目的是构建一个完整、稳定的开源操作系统,尽量缩短系统的平均响应时间,提高吞吐量,注重操作系统的整体功能需求,达到更好地平均性能,所以标准Linux并不提供硬实时性。

芯片 内核版本 系统
RK3576 6.1.99 buildroot

测试设备

改进方法:PREEMPT_RT Patch

直接修改Linux内核源代码。

对Linux内核代码进行细微修改并不对内核作大规模的变动,在遵循 GPL协议的情况下,直接修改内核源代码将Linux改造成一个完全可抢占的实时系统。

其缺点是: 通过修改Linux内核,难以保证实时进程的执行不会遭到非实时进程所进行的不可预测活动的干扰。该方法的代表是RT-patch(Real Preemption Patch)。

改进后的系统:

复制代码
root@hw3576-core:/# uname -a
Linux hw3576-core 6.1.99-rt36-rk3576 #4 SMP PREEMPT_RT Fri Feb  6 11:51:05 CST 2026 aarch64 GNU/Linux
root@hw3576-core:/#

不带桌面的系统实时性能比带桌面的系统要好,推荐使用buildroot系统。

实时性能测试

空载测试

命令:cyclictest -c 0 -m -t 8 -p 99

说明:

-t 8 表示8个线程进行测试,每个线程将创建一个周期性负载。

-p 99 表示 线程优先级为99,这是最高的实时优先级。使用最高优先级可以更好地测试系统的实时性能。

-m 运行测试前锁定内存。

-c 0 使用单调递增的时钟,不受系统时间调整影响。

复制代码
root@hw3576-core:/# cyclictest -c 0 -m -t 8 -p 99
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 1.07 1.26 1.25 3/291 1157
​
T: 0 ( 1126) P:99 I:1000 C:2871693 Min:      0 Act:    0 Avg:    0 Max:       3
T: 1 ( 1127) P:99 I:1500 C:1914458 Min:      0 Act:    0 Avg:    0 Max:       4
T: 2 ( 1128) P:99 I:2000 C:1435841 Min:      0 Act:    0 Avg:    0 Max:       3
T: 3 ( 1129) P:99 I:2500 C:1148671 Min:      0 Act:    0 Avg:    0 Max:       4
T: 4 ( 1130) P:99 I:3000 C: 957224 Min:      0 Act:    0 Avg:    0 Max:       3
T: 5 ( 1131) P:99 I:3500 C: 820477 Min:      0 Act:    0 Avg:    0 Max:       3
T: 6 ( 1132) P:99 I:4000 C: 717916 Min:      0 Act:    0 Avg:    0 Max:       3
T: 7 ( 1133) P:99 I:4500 C: 638146 Min:      0 Act:    0 Avg:    0 Max:       3
(测试1小时)

输出结果中关键字段的含义是:

  • T:线程序号。

  • P :该线程的实时优先级。请注意,从第二个线程开始,优先级会逐级递减(如99, 98, 97...),这是cyclictest的默认行为。

  • I:线程的唤醒间隔,单位是微秒(µs),默认通常是1000µs(1毫秒)。

  • C:循环计数器,表示该线程已经完成的测试周期数。

  • Min:当前测到的最小延迟。

  • Act:最近一次测量到的延迟。

  • Avg:平均延迟。

  • Max :当前测到的最大延迟。这是评估系统实时性能的一个关键指标,需要重点关注其数值和稳定性

压力测试

命令:stress-ng压力测试的同时测试实时性。

stress-ng -c 4 --io 2 --vm 1 --vm-bytes 1024M --timeout 1000000s

cyclictest -c 0 -m -n -t 8 -p 99

复制代码
root@hw3576-core:/# stress-ng -c 4 --io 2 --vm 1 --vm-bytes 1024M --timeout 1000
[1] 1116
 stress-ng: info:  [1116] setting to a 1000000 second (11 days, 13 hours, 46 mins, 40.00 secs) run per stressor
stress-ng: info:  [1116] dispatching hogs: 4 cpu, 2 io, 1 vm
stress-ng: info:  [1122] io: this is a legacy I/O sync stressor, consider using iomix instead
# 
root@hw3576-core:/# cyclictest -c 0 -m -t 8 -p 99
/dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 9.40 9.34 8.59 8/305 1187
​
T: 0 ( 1129) P:99 I:1000 C:2315187 Min:      0 Act:    1 Avg:    1 Max:      11
T: 1 ( 1130) P:99 I:1500 C:1543454 Min:      0 Act:    0 Avg:    1 Max:       9
T: 2 ( 1131) P:99 I:2000 C:1157587 Min:      0 Act:    1 Avg:    1 Max:      10
T: 3 ( 1132) P:99 I:2500 C: 927313 Min:      0 Act:    1 Avg:    1 Max:       8
T: 4 ( 1133) P:99 I:3000 C: 772759 Min:      0 Act:    1 Avg:    2 Max:       8
T: 5 ( 1134) P:99 I:3500 C: 662363 Min:      0 Act:    1 Avg:    1 Max:       8
T: 6 ( 1135) P:99 I:4000 C: 579566 Min:      0 Act:    1 Avg:    1 Max:       9
T: 7 ( 1136) P:99 I:4500 C: 515168 Min:      0 Act:    3 Avg:    2 Max:      15
root@hw3576-core:/#
(测试1小时)

隔离核心

bootargs添加 isolcpus=2,3 ,将核心cpu2,cpu3隔离出来,不参与系统任务调度,并作为实时核心。

修改/boot/uEnv/uEnv.txt ,在cmdline中添加isolcpus=2,3,保存,并重启设备。

查看CPU核心是否被隔离

复制代码
#查看指定进程pid绑定到哪些CPU核心上
root@hw3576-core:/# taskset -cp 1
​
#信息输出如下
pid 1's current affinity list: 0,1,4-7

从输出信息可见,pid 1进程运行在0,1,4-7核上,没有运行在2、3核,也就是成功对CPU核心进行隔离。

相关推荐
linyanRPA16 小时前
影刀RPA店群自动化实战:多店铺活动自动报名与促销管理架构设计
运维·自动化·办公自动化·rpa·python脚本·爬虫自动化·店群自动化
mounter62516 小时前
现代 Linux 内存管理的演进与变革:从传统 LRU 到多代架构 MGLRU
linux·服务器·kernel
会Tk矩阵群控的小木16 小时前
安卓群控系统对于游戏工作室实战教程
android·运维·游戏·adb·开源软件·个人开发
赵渝强老师16 小时前
【赵渝强老师】Kubernetes(K8s)中的金丝雀升级
linux·docker·云原生·容器·kubernetes
佛山个人技术开发17 小时前
GitCode SSH连接配置教程
运维·ssh·gitcode
Qt程序员17 小时前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu
The Sheep 202317 小时前
Vue复习
linux·服务器·数据库
兄台の请冷静17 小时前
Linux 安装es
linux·elasticsearch·jenkins
fengyehongWorld17 小时前
Linux rg命令
linux
pride.li18 小时前
海思视觉Hi3516CV610--开机自动设置ip
linux·网络·网络协议·tcp/ip