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