對(duì)于每個(gè)嵌入式軟件開發(fā)人員和團(tuán)隊(duì)來說,性能是關(guān)鍵的指標(biāo)。無論您是開發(fā)資源受限的設(shè)備,高性能模塊還是僅僅是普通的系統(tǒng),浪費(fèi)的時(shí)鐘周期都會(huì)花費(fèi)金錢,時(shí)間和能量。如今,許多嵌入式系統(tǒng)都是由RTO構(gòu)建的,但是根據(jù)我的經(jīng)驗(yàn),團(tuán)隊(duì)通常幾乎不考慮其性能。
團(tuán)隊(duì)不考慮它也就不足為奇了,因?yàn)楸容^不同的RTOSE的數(shù)據(jù)很少。每個(gè)RTO雖然以核心概念和工具為基礎(chǔ),但都提供了廣泛而多樣的功能。使用此類功能集,您如何以提供合理的“蘋果蘋果”比較的方式測(cè)試RTOS性能?
在這篇文章中,我將分享如何測(cè)試三個(gè)流行的開源RTOSE(Zephyr RTOS,F(xiàn)reertos和Eclipse ThreadX)和一個(gè)商業(yè)RTO(PX5 RTOS)的RTOS性能。
識(shí)別RTOS性能測(cè)試
您可能會(huì)懷疑,并非所有的RTOSE都相等。每個(gè)RTO都會(huì)牢記不同的目標(biāo)。這意味著基礎(chǔ)實(shí)施將從一個(gè)RTO到另一個(gè)RTO都不同。每個(gè)RTO都有其優(yōu)勢(shì),劣勢(shì),定制和標(biāo)準(zhǔn)功能。我們?nèi)绾我怨降姆绞奖容^不同的rtoses并為我們提供準(zhǔn)確的結(jié)果?
首先,我們必須認(rèn)識(shí)到我們不能測(cè)試RTO的每個(gè)功能。例如,弗雷托斯(Freertos)具有超酷的功能,可讓您在無滴答模式下以低功率應(yīng)用程序運(yùn)行內(nèi)核。盡管這是一個(gè)很棒的功能,但并非所有RTOSE都具有它,因此很難比較其他RTOSE的功能。
我們必須專注于所有rtoses所共有的功能,而不是專注于差異化者,并且有很多。例如,所有RTOSE都將至少有一個(gè)調(diào)度程序,消息隊(duì)列,信號(hào)量,內(nèi)存管理和其他一些。這些構(gòu)成了今天幾乎所有可用的RTO的基礎(chǔ)。這些功能是應(yīng)該關(guān)注的功能,然后可以使我們對(duì)不同的功能的性能有一種感覺。
RTOS性能基準(zhǔn)
如果要比較RTOS性能,則需要進(jìn)行測(cè)試安全帶。測(cè)試安全帶使您可以創(chuàng)建一組常見的測(cè)試,該測(cè)試可行任何RTO中可用的標(biāo)準(zhǔn)功能。盡管開發(fā)人員可以使用幾種不同的選項(xiàng),但我使用的最多和最熟悉的是Eclipse基礎(chǔ)線程度量基準(zhǔn)套件。
線程度量基準(zhǔn)套件由八個(gè)測(cè)試組成,其中一項(xiàng)是校準(zhǔn)測(cè)試,以確保平臺(tái)的操作相似。例如,如果成功地將RTO帶入測(cè)試線束,并使用類似的設(shè)置并使用GCC進(jìn)行了編譯,則您希望校準(zhǔn)測(cè)試為每個(gè)RTO提供約70,000個(gè)計(jì)數(shù)。如果不是這樣,那么您知道編譯器或其他設(shè)置不是相同的,這意味著您不能信任任何其他測(cè)試的結(jié)果。 (至少不信任任何直接比較)。
在我的實(shí)驗(yàn)中,我選擇了我認(rèn)為每個(gè)RTO的五個(gè)最常見的功能,每個(gè)RTO應(yīng)具有的線程度量基準(zhǔn)套件,其中包括:
· 合作計(jì)劃
· 預(yù)先安排
· 內(nèi)存分配
· 同步處理(信號(hào)量)
· 消息傳遞
每個(gè)測(cè)試的時(shí)間為30秒間隔,結(jié)果提供了計(jì)數(shù)器中累積的值。值越高,該測(cè)試的性能越高。 RTO完全有可能在一個(gè)測(cè)試上粉碎它,只能在另一個(gè)測(cè)試上表現(xiàn)出色。
獲得蘋果與蘋果的比較
您可能會(huì)認(rèn)為,使用基準(zhǔn)套件,您將RTO插入套件,進(jìn)行一些測(cè)試,進(jìn)行一些比較并完成。不幸的是,這并不是那么簡(jiǎn)單。還記得我如何提到?jīng)]有同等的兩個(gè)rtose?為了獲得合理的比較,您需要確保以使其公平的方式配置每個(gè)RTO!
您可以清楚地看到PX5 RTOS優(yōu)于開源RTOSE。實(shí)際上,如果您看開源RTOSE,則Zephyr RTO的表現(xiàn)似乎非常可怕!剪裁干燥吧? Zephyr RTO的表現(xiàn)不佳,還是這樣做?
Zephyr以其默認(rèn)配置進(jìn)行了測(cè)試。那是什么意思?
它的意思是:
· 不啟用速度優(yōu)化
· 啟用了記錄
· 主張檢查已啟用
· 啟用了調(diào)試優(yōu)化
· 運(yùn)行時(shí)錯(cuò)誤檢查已啟用
· 電源管理已啟用
· MPU已啟用并用于堆棧保護(hù)
我們可以爭(zhēng)辯說,默認(rèn)情況下,這些是否是啟用的好東西,但是在任何一種情況下,其他RTOSE是否默認(rèn)啟用了這些東西?
他們不!默認(rèn)情況下,它們是配置的,或者通過我的一些小調(diào)整,以禁用這些功能,以確保每個(gè)RTO的配置足夠接近,以便可以輕松地將它們進(jìn)行比較以進(jìn)行性能!
為了獲得蘋果到蘋果的比較,我必須禁用這些Zephyr RTOS功能。當(dāng)我這樣做時(shí),結(jié)果有所改變。
唯一的變化是Zephyr的表現(xiàn)幾乎增加了兩倍!它的性能仍比PX5 RTOS慢約30%,并且比ThreadX慢20%,但是我們現(xiàn)在可以更自信地比較其性能并得出一些初步結(jié)論。
結(jié)論
比較RTOS之間的RTOS性能并不是微不足道的!每個(gè)RTO都有獨(dú)特的功能和配置,必須考慮到準(zhǔn)確的比較。我發(fā)現(xiàn),一旦您將競(jìng)爭(zhēng)環(huán)境升級(jí),您就可以看到每個(gè)RTO的性能,將它們相互比較,并得出結(jié)論您的RTO可能如何影響您自己的項(xiàng)目。
每個(gè)項(xiàng)目都有其需求和需求,每個(gè)RTO都有其利基市場(chǎng)。作為工程師,擁有數(shù)據(jù)來幫助我們了解性能特征可以幫助我們做出正確的設(shè)計(jì)決策,并確保我們不會(huì)在桌面上留下任何急需的性能。
您已經(jīng)看到錯(cuò)誤配置如何影響比較測(cè)量值。我有一個(gè)動(dòng)作項(xiàng)目供您從今天的帖子中刪除:?jiǎn)栕约海骸拔业腞TO是否正確配置了?”這個(gè)問題可能會(huì)使您的RTOS的性能增加一倍。