版權聲明:本文為本文為博主原創文章,轉載請注明出處。如有問題,歡迎指正。博客地址:https://www.cnblogs.com/wsg1100/
(下面數據,僅供個人參考)
可能大部分人一直好奇VxWorks與xenomai對比,實時性孰優孰劣,正好筆者最近要做一個這方面的對比,本文以實時系統其中一個重要指標---Jitter來進行簡單對比。
一、環境
簡單介紹一下環境:
硬件平台:雙核cortex-A15處理器,CPU頻率1.5GHZ,內存2GB。
xenomai:Linux-4.19+xenomai 3.1,具體配置:略;
VxWorks:VxWorks 7,具體配置:略;
注:由於VxWorks benchmark測試包含很多測試項,以下數據為其中包含的幾項,每項測試2萬次,整個benchmark才跑了兩個多小時。xenomai則是每項跑了2小時,周期100us,這樣差不多7200萬次;
VxWorks讀取時間戳耗時:
VxWorks | avg | min | max |
---|---|---|---|
bmTimestampRead | 0.249 | 0.162 | 0.487 |
xenomai讀取時間戳耗時:
Xenomai | avg | min | max |
---|---|---|---|
bmTimestampRead | 0.163 | 0.162 | 0.325 |
二、時鍾中斷Jitter對比
1. VxWorks
avg | min | max | |
---|---|---|---|
bmIntJitterNoLoad | 4.066 | 0.000 | 13.338 |
bmIntJitterSemLoad | 4.066 | 0.000 | 13.338 |
bmIntJitterMqLoad | 4.066 | 0.000 | 13.663 |
bmIntJitterDelayLoad | 4.066 | 0.000 | 13.501 |
bmIntJitterNoLoad
空載,無任何壓力。
bmIntJitterSemLoad
semaphore壓力,兩個同等優先級任務對同一semaphore進行PV操作。
bmIntJitterMqLoad
message queue壓力,兩個同等優先級任務使用兩個msgq相互發送接收1byte數據操作。
2.xenomai
測試時間2小時,定時周期100us,次數:7200萬次。單位us。(xenomai測試沒有VxWorks那么全面,后續添加相應壓力測試補充。。。)
avg | min | max | |
---|---|---|---|
NoLoad | 0.516 | 0.287 | 6.198 |
Load | 0.768 | 0.325 | 6.859 |
NoLoad
空載測試,linux普通啟動后狀態。
Load
linux加壓,stress -c 10 -m 4
,xenomai內核沒有壓力。
三、任務Jitter對比
1. VxWorks
avg | min | max | |
---|---|---|---|
bmTaskJitterNoLoad | 4.066 | 0.000 | 15.290 |
bmTaskJitterSemLoad | 4.066 | 0.000 | 15.778 |
bmTaskJitterMqLoad | 4.066 | 0.000 | 15.778 |
bmTaskJitterDelayLoad | 4.066 | 0.000 | 15.290 |
2.xenomai內核態任務Jitter
測試時間2小時,定時周期100us,任務優先級99,單位us。
avg | min | max | |
---|---|---|---|
LinuxLoad | 0.643 | -0.282 | 10.519 |
LinuxLoad
linux加壓,stress -c 10 -m 4
,xenomai內核沒有壓力。
為什么會存在負值?負值表示xenomai內核提前一點點將任務喚醒了。這與xenomai內核的定時處理機制有關,這是可以調整的,可關注本博客后續的xenomai內核解析。
具體數據分布如下:
0 1
0.25 37403654
0.75 5725957
1.25 5300392
1.75 3143282
2.25 2329224
2.75 1360290
3.25 511552
3.75 135384
4.25 37234
4.75 42208
5.25 18950
5.75 4495
6.25 532
6.75 295
7.25 172
7.75 43
8.25 13
8.75 6
9.25 1
9.75 3
10.25 1
10.75 2
11 1
3.xenomai用戶態任務Jitter
測試時間2小時,定時周期100us,任務優先級99,單位us。
avg | min | max | |
---|---|---|---|
Load | 3.605 | 0.422 | 13.328 |
具體數據分布如下:
0 1
0.25 2
0.75 44
1.25 137
1.75 1540
2.25 13471
2.75 1943224
3.25 38106382
3.75 19789463
4.25 6749386
4.75 2940300
5.25 1812680
5.75 549134
6.25 47176
6.75 18063
7.25 16545
7.75 9921
8.25 1391
8.75 389
9.25 132
9.75 97
10.25 104
10.75 46
11.25 18
11.75 21
12.25 6
12.75 4
13.25 2
13.5 1
avg | min | max | |
---|---|---|---|
bmTaskJitterNoLoad | -0.249 | 1.637 | 13.199 |
bmTaskJitterSemLoad | -0.788 | 1.489 | 12.087 |
bmTaskJitterMqLoad | -0.241 | 1.790 | 12.683 |
bmTaskJitterDelayLoad | -0.211 | 1.243 | 12.523 |
VxWorks畢竟是商業軟件,任務及系統的每一個階段都能詳細統計耗時。
xenomai由於其雙核的結構,在linux加壓還是在xenomai加壓都是應該思考的問題。
總的來說,對比VxWorks,xenomai壓力太簡單,並沒有對實時核加壓,根據VxWorks測試套件的具體測試方式,來對xenomai進行同樣的測試,才更具對比價值。