談談軟件的任務調度策略
2021年4月19日 11:07 瀏覽:2177
任務調度設計是系統的骨架,
它是決定系統能否最大化利用硬件性能的因素之一。
函數到任務的映射是任務調度設計的第一步,用于確定在哪個任務中執行哪些軟件功能。作為調度和執行單元,函數的執行是通過任務的調度來實現的,每個任務都是由一系列函數組成, 函數的運行順序通常依賴信號處理流的數據依賴關系。
ECU軟件集成工程師必須首先決定在給定的ECU上分配多少任務,以及這些任務的調度方式,例如中斷調用、初始化調用或者是周期調用,通常來說,任務調用通常采用周期調度。在使用基于AUTOSAR的OS的ECU中,任務是作為OS靜態分配的一部分。
在單核系統中,任務的設計通常是靜態的設置一組具有不同周期任務,并且相同周期下只有一個任務,例如集成工程師可以10ms、20ms、40ms和80ms的周期分配任務,每個周期僅有一個任務。這種情況下函數到任務的映射完全是由算法工程師基于控制函數所需的循環周期來決定,盡管這種映射方式相對簡單,但是每個任務中函數的排序還是相對比較復雜的,以為它必須理解函數之間數據的依賴關系。
在多核系統中,任務的設計有些許改變,因為任務可以在不同核上進行調度。功能到任務的映射、任務的運行周期、任務到執行核的映射是一個非常復雜的設計問題,必須考慮任務間的信息交換,不同核間的信息交換、同步以及并發等問題。與單核相比,需要更加全面的分析來更好的理解并行執行產生的行為,例如在不同核上執行的任務可能導致數據的競爭和同步。
多核系統另一個復雜性維度是混合IP或混合ASIL集成。如果軟件功能是由不同IP源開發或不同的ASIL等級組成,混合IP或混合ASIL軟件功能應該有意將其分離,因為如果一個任務在內存訪問或執行時間行為方面出現非預期行為時,該任務可能會被終止,同時允許其他獨立的任務繼續運行。如果被終止的任務中包含混合IP或者混合ASIL的軟件功能。那么相當大的功能可能出現丟失。
一旦任務的功能確定好了,就必須將任務分配到核上,對于單核來說,就無需多言,因為它僅有一個核,如圖1a所示。在多核系統中,需要提前明確任務在哪個核上運行,以及之間的數據交互,如圖1b所示。
如果需要基于混合IP或者是混合ASIL的任務設計,如圖1c所示,任務到核上的分配更加靈活。在圖1c中,有16個任務需要分配,在四核的情況下,將所有OEM_hi任務分配給core1,所有OEM_ low任務分配給core2,所有Tier1_hi任務分配給core3,所有Tier1_low任務分配給core4。通過這種IP和ASIL任務分配到不同核上,保證調度的物理隔離,減少不同IP的相互影響。
除了來自共享核帶來干擾,任務之間也可能通過內存相互干擾。使用相同的分區方案也可以防止內存干擾。每個ASIL或IP都放置在自己的內存分區,并且這些分區受OS-Application保護,那么任務無效的內存訪問都將會被阻隔。例如假設Task_Tier1_low行為不當,試圖寫入屬于OEM_hi、OEM_low或Tier1_hi分區的內存地址。這個無效的內存引用將被內存保護方案阻止。
未來的ECU將越來越多地采用混合關鍵系統,主要有兩個原因:
1、將獨立的ECU集成為集中式多功能ECU,如域控單元(降低硬件成本)。
2、ASIL分解,最小化需要按照更高的ASIL開發的軟件數量(降低軟件開發成本)。
讓我們使用圖2所示的單核多功能ECU,這是一個說明混合關系系統集成的例子。
1、Task T1 功能安全等級為ASIL-C,運行周期為25ms;
2、Task T2 功能安全等級為ASIL-B,運行周期為10ms;
3、Task T3 功能安全等級為ASIL-A,運行周期為1ms;
4、Task T4 功能安全等級為QM,運行周期為10ms;
我們應該如何分配任務優先級來調度這四個任務呢?在不考慮安全要求的情況下,一種典型的設計周期最短的任務優先級最高,如圖3所示。
可以看出,如果低安全等級的任務執行出錯(例如進入死循環),高安全等級的任務會被阻塞,不能正常運行,這種方案是不能滿足ISO26262要求的。
那如果根據基于CAPA 分配優先級呢?如圖4所示。
圖4 基于CAPA (Criticality Aware Priority Assignment) 分配優先級的任務調度
可以看出,這種方案下,T3任務經常出現不能執行的現象,雖然滿足ISO26262的要求,但是這種行為是不可接受的。
那這種方案可以怎么改進呢?其思路是在應用CAPA中找到那些導致效率低下的地方,并適當地調整它們。致CAPA抵消的原因是具有高ASIL等級同時執行時間長的任務導致的。
如果我們可以在更短的運行時間內將T1分配到更多的執行中,這將顯著改善調度。因此有更多的計算時間留給較低的優先級,當然這些還需要進行數據的依賴性和數據一致性分析,以確定不同的可功能如何在多個任務執行中分布。
我們假設T1中包含10個運行實體,并且將T1的周期從25ms縮短至5ms,每個周期分配2個可運行實體,這樣,整體的運行周期沒有變化,都是在25ms內調度一次,這種調整方案稱之為周期轉換,如圖5所示。
從圖5可以看出,相較于原先的CAPA調度方式,T3的調度明顯改善。
技術鄰APP
工程師必備