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核心进行隔离。

相关推荐
IMPYLH7 分钟前
Linux 的 dir 命令
linux·运维·服务器·数据库
fanged15 分钟前
操作系统番外1(Linux的测试体系)(TODO)
linux·运维·服务器
成为你的宁宁1 小时前
【Docker 与 Docker-Compose 实战:从零开始容器化部署若依项目,从单容器分步运行到 Compose 一键编排】
运维·docker·容器·docker-compose
123过去2 小时前
pixiewps使用教程
linux·网络·测试工具·算法·哈希算法
H_老邪2 小时前
Linux 与 Docker 常用命令
linux·运维·服务器·docker
博语小屋2 小时前
I/O 多路转接之epoll
运维·服务器·数据库
yewq-cn3 小时前
linux 内核设备号
linux·运维·服务器
新钛云服3 小时前
如何构建一套自动化的阿里云费用报告系统
运维·阿里云·自动化·云计算
allway23 小时前
Debian Regular Expressions
运维·debian·scala
文静小土豆3 小时前
Linux 进程终止指南:理解 kill 与 kill -9 的核心区别与正确用法
linux·运维·服务器