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单片机开发板)得到中断响应时间与中断触发时间后,计算之间差值即得到中断响应延迟。
本方案使用信号发生器,其可提供稳定且精确的方波信号,便于测试和验证,并且信号发生器能保证每次实验条件一致,有助于获得可靠的测试结果
测试结果¶
对两个操作系统平台分别测试五千万次,得到统计结果如下:
测试对象 |
统计次数 |
最大时延/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小时测试,统计结果如下:
测试工具 |
测试对象 |
统计次数 |
最大抖动/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
指令均在串口终端下执行。
测试结果¶
统计结果如下:
测试工具 |
测试项 |
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
指令均在串口终端下执行。
测试结果¶
统计结果如下:
测试工具 |
测试项 |
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 |
测试结果分析¶
从表的数据上看,OEE-RT在最大延迟上相比OEE有非常大的提升,两个线程分别从172us提升到69us和从256us提升到103us。
OEE-RT在添加Jailhouse后,总体上性能变差,在最高优先级的线程1上,只在信号的最大延迟上与OEE-RT保持了性能的持平(69us)。
测试结论¶
当信号在两个线程间传递时,在信号的传递延迟上,OEE-RT比OEE各项指标都有提升,特别是在最大延迟上提升明显。
OEE-RT在添加Jailhouse后,总体上性能变差,但在最大延迟上还是要优于OEE。