概述
标准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核心进行隔离。