在很多人看來,似乎嵌入式Linux可以為嵌入式開發(fā)人員做所有的事情。雖然嵌入式Linux可以適用于一些具有數(shù)兆內(nèi)存和強(qiáng)大處理器的應(yīng)用,但越來越多的案例表明,嵌入式Linux和類似操作系統(tǒng)的開銷會(huì)對(duì)確定性和內(nèi)存消耗產(chǎn)生負(fù)面影響。
蜂窩調(diào)制解調(diào)器、高性能視頻處理和復(fù)雜的汽車控制器只是在小尺寸、低功耗多核平臺(tái)的對(duì)稱多處理(SMP)架構(gòu)下運(yùn)行的,高度確定性應(yīng)用的幾個(gè)案例。此類系統(tǒng)需要底層操作系統(tǒng)的核心分配和任務(wù)調(diào)度能力,以滿足硬實(shí)時(shí)要求,同時(shí)又不影響資源使用。
在資源受限的平臺(tái)上,嵌入式Linux不是SMP的可行選擇,支持SMP的實(shí)時(shí)操作系統(tǒng)(RTOS)也寥寥無幾。因此,開發(fā)人員必須創(chuàng)建自己的方法來跨越多個(gè)內(nèi)核進(jìn)行調(diào)度和管理任務(wù)。隨著越來越多的嵌入式設(shè)備需要跨多個(gè)內(nèi)核部署確定性工作負(fù)載,RTOS層的動(dòng)態(tài)負(fù)載均衡需求只會(huì)不斷增長(zhǎng)。
對(duì)稱多處理與非對(duì)稱多處理
SMP和非對(duì)稱多處理(AMP)是兩種多個(gè)處理器協(xié)同工作來調(diào)度和運(yùn)行工作負(fù)載的架構(gòu)模式。SMP系統(tǒng)的處理器內(nèi)核是完全相同,可以運(yùn)行分配給它們的任何任務(wù),而AMP系統(tǒng)通常依賴于單個(gè)主內(nèi)核,根據(jù)可用性和優(yōu)先級(jí)來調(diào)度和分配任務(wù)。在AMP系統(tǒng)中,核心本身不需要是相同的類型或架構(gòu)(例如,MPU可以與GPU協(xié)同工作),并且任務(wù)通常是針對(duì)內(nèi)核類型的。
當(dāng)開發(fā)人員可以依賴于一個(gè)穩(wěn)定且可預(yù)測(cè)的環(huán)境時(shí),AMP模式效果最佳,因?yàn)椴僮飨到y(tǒng)可以有效地分配工作負(fù)載,而不會(huì)產(chǎn)生大量開銷。相比之下,對(duì)于在事件不斷變化的環(huán)境中運(yùn)行的應(yīng)用,需要在不同內(nèi)核之間動(dòng)態(tài)轉(zhuǎn)移工作負(fù)載時(shí),SMP模式通常效果最佳。例如,許多手機(jī)都使用SMP,像是在Arm Cortex-A53平臺(tái)上實(shí)現(xiàn)蜂窩調(diào)制解調(diào)器功能的手機(jī)。
為了有效地跨多個(gè)內(nèi)核分配應(yīng)用線程,嵌入式軟件開發(fā)人員使用了動(dòng)態(tài)負(fù)載均衡技術(shù)。其主要目標(biāo)是確保應(yīng)用在運(yùn)行時(shí)在內(nèi)核之間均勻分配計(jì)算工作負(fù)載,并保證優(yōu)先級(jí)最高的線程不會(huì)被優(yōu)先級(jí)較低的線程搶占。
動(dòng)態(tài)負(fù)載均衡的原理
動(dòng)態(tài)負(fù)載均衡中的“動(dòng)態(tài)”是指運(yùn)行時(shí)對(duì)線程調(diào)度進(jìn)行持續(xù)評(píng)估,使應(yīng)用能夠適應(yīng)不斷變化的任務(wù)需求和系統(tǒng)條件。動(dòng)態(tài)負(fù)載均衡對(duì)于以下方面至關(guān)重要:
* 提高利用率:通過將任務(wù)分配到多個(gè)核心,開發(fā)人員可以充分利用每個(gè)核心的計(jì)算能力,提高系統(tǒng)整體利用率。
* 縮短響應(yīng)時(shí)間:適當(dāng)?shù)呢?fù)載均衡可確保將關(guān)鍵任務(wù)分配給占用最少的核心,從而縮短響應(yīng)時(shí)間并增強(qiáng)任務(wù)執(zhí)行的可預(yù)測(cè)性。
* 容錯(cuò):通過將任務(wù)重新分配給未出現(xiàn)故障的核心,負(fù)載均衡可以幫助減輕軟件故障和硬件故障的影響,從而確保系統(tǒng)功能的持續(xù)運(yùn)行。
* 可擴(kuò)展性:隨著系統(tǒng)需求的增長(zhǎng)和更多內(nèi)核的增加,均勻地分配任務(wù)對(duì)于在不引入瓶頸的情況下擴(kuò)展容量至關(guān)重要。
嵌入式Linux自帶負(fù)載均衡機(jī)制,但也有缺點(diǎn):操作系統(tǒng)會(huì)產(chǎn)生高昂的開銷,這可能會(huì)嚴(yán)重影響確定性。由于大多數(shù)硬實(shí)時(shí)RTOS不支持SMP架構(gòu)上的負(fù)載均衡,因此開發(fā)人員通常會(huì)自行構(gòu)建支持機(jī)制。這項(xiàng)工作本身也存在挑戰(zhàn):
* 資源使用:由于每個(gè)核心都有自己的緩存、寄存器和其他功能,開發(fā)人員必須花時(shí)間了解平臺(tái),以便在不影響性能或不造成資源爭(zhēng)搶的情況下有效地分配任務(wù)。
* 內(nèi)存訪問:如果開發(fā)人員將具有公共內(nèi)存池的任務(wù)分配給不同的內(nèi)核,并且沒有充分考慮應(yīng)用的控制和數(shù)據(jù)流,則可能會(huì)出現(xiàn)內(nèi)存訪問問題。
* 任務(wù)優(yōu)先級(jí):開發(fā)人員必須了解所有任務(wù)優(yōu)先級(jí)和截止時(shí)間,以確保為高優(yōu)先級(jí)任務(wù)分配足夠的資源和時(shí)間,避免延遲。
* 動(dòng)態(tài)適應(yīng):由于負(fù)載均衡是一個(gè)適應(yīng)不斷變化的系統(tǒng)條件的過程,因此開發(fā)人員必須實(shí)現(xiàn)某種反饋回路或控制機(jī)制,以便在運(yùn)行期間不斷重新評(píng)估線程分配并調(diào)整策略。
* 同步開銷:開發(fā)人員必須最大限度地減少內(nèi)核之間任務(wù)切換所需的開銷,以減少延遲并保持系統(tǒng)的實(shí)時(shí)響應(yīng)能力。
RTOS層的負(fù)載均衡
像是PX5 RTOS這類專為基于多核MPU的應(yīng)用而設(shè)計(jì)的RTOS可以提供內(nèi)置負(fù)載均衡功能,能夠滿足硬實(shí)時(shí)確定性的要求,且開銷遠(yuǎn)遠(yuǎn)低于嵌入式Linux和其他操作系統(tǒng)。PX5 RTOS采用原生POSIX pthreads API,運(yùn)行所需的內(nèi)存不到10KB,具有極高的可移植性和資源效率,使開發(fā)人員無需構(gòu)建自己的負(fù)載均衡器。
這種RTOS原生負(fù)載均衡器的運(yùn)行方式與許多流行的負(fù)載均衡技術(shù)相同:
1、給定任意數(shù)量的核心,RTOS會(huì)跟蹤每個(gè)核心上運(yùn)行的線程。當(dāng)核心空閑并且線程可用于調(diào)度時(shí),RTOS會(huì)調(diào)度該線程在該核心上運(yùn)行。
2、如果沒有空閑核心并且新線程已就緒,則RTOS會(huì)使用該線程的優(yōu)先級(jí)進(jìn)行調(diào)度:如果其優(yōu)先級(jí)高于當(dāng)前運(yùn)行的任何其他線程的優(yōu)先級(jí),則RTOS會(huì)調(diào)度新線程以搶占正在運(yùn)行的線程。如果其優(yōu)先級(jí)低于當(dāng)前運(yùn)行的任何線程的優(yōu)先級(jí),則RTOS會(huì)等待下一個(gè)可用核心運(yùn)行。
這種方法使用與嵌入式Linux相同的處理器關(guān)聯(lián)API,使開發(fā)人員可以輕松地將線程分配給特定內(nèi)核并依賴RTOS來強(qiáng)制執(zhí)行此類分配。與大多數(shù)RTOS一樣,開發(fā)人員必須確保共享資源的恰當(dāng)管理,以避免出現(xiàn)爭(zhēng)用問題。
并非所有線程都是平等的
在典型的單核、基于優(yōu)先級(jí)的搶占式調(diào)度環(huán)境中,開發(fā)人員一次只能依賴一個(gè)運(yùn)行的線程。在SMP環(huán)境中,由于多個(gè)線程可以在任意數(shù)量的內(nèi)核上并行運(yùn)行,因此這一條件無法保證。為了避免這種行為對(duì)系統(tǒng)的潛在負(fù)面影響,即要求在給定時(shí)間內(nèi)只運(yùn)行優(yōu)先級(jí)最高的線程,PX5 RTOS讓開發(fā)人員能夠配置調(diào)度,僅允許相同優(yōu)先級(jí)的線程在所有內(nèi)核上并行運(yùn)行。這種方法強(qiáng)制執(zhí)行更嚴(yán)格程度的并行,使開發(fā)人員對(duì)其系統(tǒng)的可預(yù)測(cè)性更有信心。
結(jié)論
開發(fā)人員要在小尺寸、低功耗的多核平臺(tái)上實(shí)現(xiàn)極高的實(shí)時(shí)性能和響應(yīng)速度,就必須實(shí)現(xiàn)動(dòng)態(tài)負(fù)載均衡。像是PX5 RTOS負(fù)載均衡功能這樣的機(jī)制支持將就緒的應(yīng)用線程與可用內(nèi)核動(dòng)態(tài)配對(duì),所有這些都在一個(gè)超小(小于10KB)、超便攜(具有完全兼容的pthreads API),并且經(jīng)過嚴(yán)格測(cè)試(每個(gè)版本的C語句和分支決策覆蓋率都達(dá)到100%)的封裝內(nèi)實(shí)現(xiàn)的。
RTOS原生負(fù)載均衡使開發(fā)人員能夠?qū)W⒂趹?yīng)用和測(cè)試,而不必自己構(gòu)建在多個(gè)處理器之間分配工作負(fù)載的方法。
審核編輯:劉清
-
處理器
+關(guān)注
關(guān)注
68文章
18927瀏覽量
227243 -
調(diào)制解調(diào)器
+關(guān)注
關(guān)注
3文章
836瀏覽量
38600 -
SMP
+關(guān)注
關(guān)注
0文章
70瀏覽量
19557 -
MPU
+關(guān)注
關(guān)注
0文章
333瀏覽量
48607 -
嵌入式開發(fā)
+關(guān)注
關(guān)注
18文章
1006瀏覽量
47355
原文標(biāo)題:在資源受限的MPU上使用SMP的新方法
文章出處:【微信號(hào):麥克泰技術(shù),微信公眾號(hào):麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論