1.1 实时性能

1.1.1 测试目的

为了评估基于OEE、OEE-RT 以及 OEE-RT + Jailhouse的系统在某些场景下的性能表现及性能差异。 例如它们的中断响应的实时延迟、周期调度的抖动、以及信号在多个线程间传递的延迟等。

1.1.2 测试条件

  • OEE, OEE+RT以及OEE+RT+Jailhouse

  • RK3568 开发板

  • 在RK3568的开发板上分别部署OEE, OEE-RT 以及OEE+RT+Jailhouse。

1.1.3 中断响应实时延迟

测试工具

  • 信号发生器

  • GD32单片机开发板

测试方案

  • 使用信号发生器作为中断源,产生1kHz方波,接入结果统计平台(本方案使用GD32单片机开发板),记时作为中断触发时间。

  • 同时接入RK3568硬件平台外部中断引脚,触发中断并在OEE-RT的中断处理程序中对RK3568的GPIO引脚进行电平翻转,并将该引脚接入结果统计平台,结果统计平台记时作为中断响应时间。

  • 结果统计平台(GD32单片机开发板)得到中断响应时间与中断触发时间后,计算之间差值即得到中断响应延迟。

  • 本方案使用信号发生器,其可提供稳定且精确的方波信号,便于测试和验证,并且信号发生器能保证每次实验条件一致,有助于获得可靠的测试结果

../../_images/1-1.png

图1-1 硬件连接示意图

测试结果

对两个操作系统平台分别测试五千万次,得到统计结果如下:

表1-1 中断响应延迟结果

测试对象

统计次数

最大时延/us

≥10us占比

备注

OEE

50000000

24.2

0.0090%

≥10us占比十万分之9

OEE-RT

50000000

10

0.000004%

≥10us占比亿分之4

OEE-RT+Jailhouse

50000000

13

0.00000118%

≥10us占比小于百万分之二

测试结果分析

  • OEE在中断响应延迟上最大可达24.2us,并且≥10us占比十万分之9。 OEE-RT在这方面性能提升明显。

  • OEE-RT+Jailhouse平台小于10us的占比99.99978%。

  • 加入Jailhouse虚拟化后,平台的中断响应延迟比不加的时候多3us,但总延迟小于20us。

测试结论

  • 在中断响应延迟上,OEE-RT相较于OEE有很大的性能提升。

  • 加入Jailhouse虚拟化后,中断响应总延迟小于20us,可以满足大部分场景的实时需求。

1.1.4 周期调度抖动

测试工具

  • stress

  • Kit

  • cyclictest

测试方案

本轮测试采用cyclictest套件工具。Jailhouse只有root cell,分配一个核。

执行如下指令运行stress给系统加压:

stress --cpu 4 --io 2 --vm 2 --vm-bytes 512M --hdd 2 --hdd -bytes 512M

执行如下指令运行cyclictest:

taskset -c 2 cyclictest -i 1000 -p 99 -t 1 --policy=fifo -h 100 -D 12h > /dev/console &

测试结果

经过12小时测试,统计结果如下:

表1-2 周期调度抖动结果

测试工具

测试对象

统计次数

最大抖动/us

≥70us占比

cyclictest

OEE-RT+Jailhouse

43199998

105

0.0000833%

OEE-RT

43199992

188

0.0002894%

OEE

43200000

726

9.5059652%

注:cyclictest记录的数据为用户态线程。

测试结果分析

根据表1-2:

  • OEE 在本测试中,抖动≥70us的占比超过9.5%,实时性能较差。OEE-RT相较与OEE,实时性能有很大提升。

  • OEE-RT+Jailhouse平台小于100us的占比均在99.9%范围内。

  • cyclictest测试中,添加Jailhouse后OEE-RT的最大抖动为105us,比不加Jailhouse的时候少了83us,提升44.15%。

测试结论

  • OEE在不加RT的情况下,实时性能较差。相较于OEE, OEE-RT的实时性能提升很大。

  • OEE-RT+Jailhouse平台在添加Jailhouse虚拟化后对OEE-RT的实时性有很大提升,说明Jailhouse的资源隔离对OEE-RT的实时性有很大帮助。

1.1.5 信号在多个线程间传递的延迟

测试工具

  • signaltest

测试方案

使用rt-tests的signaltest工具获取信号发送和接收的时间差值。

设置测试线程优先级为最高的99(多线程的话会依次降低),循环测试一千万次,测试线程数为4,测试指令:

taskset -c 2 signaltest -l 1000000 -p 99 -t 4

指令均在串口终端下执行。

测试结果

统计结果如下:

表1-3 信号在多个线程间传递时延的测试结果

测试工具

测试项

OEE

OEE-RT

OEE-RT+Jailhouse

signaltest

线程1(优先级99)

最小值(us)

75

70

97

平均值(us)

91

74

100

最大值(us)

411

144

146

线程2(优先级99)

最小值(us)

75

70

97

平均值(us)

719

700

727

最大值(us)

10584

10156

10186

线程3(优先级99)

最小值(us)

75

70

96

平均值(us)

719

700

727

最大值(us)

10598

10167

10189

线程4(优先级99)

最小值(us)

74

70

96

平均值(us)

719

700

727

最大值(us)

10610

10179

10192

测试结果分析

根据表1-3:

  • OEE-RT在优先级最高的线程1的最大延迟时间为144us,比OEE的411us有很大提升。

  • OEE-RT+Jailhouse在多个线程对信号的传递延迟上,均大于OEE-RT。

  • 添加Jailhouse的情况下,优先级最高的线程1的最大延迟时间达到146us,与OEE-RT的144us相差很小。

测试结论

  • OEE-RT在多个线程间传递时延上,性能比OEE要好。

  • 添加Jailhouse虚拟化后,OEE-RT上的信号延迟性能虽然变差,但整体都在可接受范围内。

1.1.6 信号在两个线程间传递的延迟

测试工具

  • sigwaittest

测试方案

使用rt-tests的sigwaittest测量在两个线程间传递的时延。

设置测试线程优先级为最高的99(多线程的话会依次降低),循环测试一千万次,测试线程对数为2,测试指令:

taskset -c 2 sigwaittest -l 1000000 -p 99 -t 2

指令均在串口终端下执行。

测试结果

统计结果如下:

表1-4 信号在两个线程间传递延迟的测试结果

测试工具

测试项

OEE

OEE-RT

OEE-RT+Jailhouse

sigwaittest

线程1(优先级99)

最小值(us)

19

18

25

平均值(us)

26

20

27

最大值(us)

172

69

69

线程2(优先级99)

最小值(us)

19

18

25

平均值(us)

28

20

27

最大值(us)

256

103

148

测试结果分析

  1. 从表的数据上看,OEE-RT在最大延迟上相比OEE有非常大的提升,两个线程分别从172us提升到69us和从256us提升到103us。

  2. OEE-RT在添加Jailhouse后,总体上性能变差,在最高优先级的线程1上,只在信号的最大延迟上与OEE-RT保持了性能的持平(69us)。

测试结论

  1. 当信号在两个线程间传递时,在信号的传递延迟上,OEE-RT比OEE各项指标都有提升,特别是在最大延迟上提升明显。

  2. OEE-RT在添加Jailhouse后,总体上性能变差,但在最大延迟上还是要优于OEE。