加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 1、確定性執(zhí)行的概念
    • 2、確定性執(zhí)行的過(guò)程分析
    • 3、確定性執(zhí)行的優(yōu)點(diǎn)
    • 4、確定性執(zhí)行面對(duì)的現(xiàn)實(shí)
    • 5、總結(jié)
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

一文深扒“確定性執(zhí)行”

2023/09/25
2276
閱讀需 14 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

本文來(lái)源:智車(chē)科技

確定性執(zhí)行是目前汽車(chē)電子市場(chǎng)的技術(shù)熱點(diǎn),但是筆者仍覺(jué)得此項(xiàng)技術(shù)需更多的驗(yàn)證,因?yàn)檫@項(xiàng)技術(shù)是有難度的,對(duì)系統(tǒng)的穩(wěn)定性、魯棒性都有要求。此外,確定性執(zhí)行是否適合所有的域控制器仍然是一個(gè)未知數(shù)。

1、確定性執(zhí)行的概念

確定性執(zhí)行是指在給定輸入的情況下,在有限的時(shí)間內(nèi)產(chǎn)生一致的輸出,也就是輸入到輸出的運(yùn)行過(guò)程是確定的,輸入與輸出有如下關(guān)系:

輸出 =?f(輸入)

這個(gè)概念不是很像可重入函數(shù)嘛,輸入確定的情況下,輸出也是確定的,不管怎么運(yùn)行,什么時(shí)候運(yùn)行,有多少調(diào)用者,輸出就是確定的,輸出只依賴輸入。

相比較于可重入的概念,確定性多了一個(gè)對(duì)運(yùn)行時(shí)間的限制。實(shí)際應(yīng)用過(guò)程中,我們對(duì)確定性還有一個(gè)隱式的需求,要求在確定的時(shí)間點(diǎn)執(zhí)行,并且在確定的時(shí)間點(diǎn)之前結(jié)束。那么確定性執(zhí)行就產(chǎn)生如圖所示的幾個(gè)因素。

實(shí)際操作中,輸出依賴輸入不現(xiàn)實(shí),總會(huì)有狀態(tài)切換,其他依賴項(xiàng)的失效或者硬件失效等等原因?qū)е峦粋€(gè)輸入產(chǎn)生多個(gè)輸出。但是,可以盡可能做到在不同的工況下,輸出依賴于輸入。

因此,對(duì)于確定性執(zhí)行,就產(chǎn)生了如下需求:

1.要求函數(shù)或者任務(wù)是單例或者可重入,正常工況下的,這就保證了輸出和輸出基本處于一一對(duì)應(yīng)的狀態(tài),保證了輸出的可控。

2.運(yùn)行時(shí)長(zhǎng)受限,就需要盡量不存在運(yùn)行時(shí)間不可控的代碼。例如,阻塞型代碼,帶有自旋鎖的代碼。

3.運(yùn)行時(shí)長(zhǎng)受限,隱式的指明,任務(wù)的截止時(shí)間是確定的。

4.運(yùn)行時(shí)間點(diǎn)要求時(shí)間同步是系統(tǒng)必備的需求。

5.運(yùn)行時(shí)間點(diǎn)要求確定性執(zhí)行的任務(wù)應(yīng)在需求指定的時(shí)間點(diǎn)運(yùn)行。

6.確定性執(zhí)行的任務(wù)應(yīng)明確任務(wù)激活源。

對(duì)于確定性執(zhí)行,并沒(méi)有很明確的需求或者在實(shí)踐中需要關(guān)中斷,或者任務(wù)保持原子執(zhí)行。也就是說(shuō),確定性執(zhí)行的過(guò)程中,任務(wù)可能會(huì)被打斷,暫停,搶占。

2、確定性執(zhí)行的過(guò)程分析

確定性執(zhí)行是有它自身應(yīng)用的場(chǎng)景的,它需要整個(gè)系統(tǒng)處于穩(wěn)定并且存在一定的運(yùn)行規(guī)律。在自動(dòng)駕駛領(lǐng)域,對(duì)確定性執(zhí)行有著極高的需求,它需要傳感器數(shù)據(jù),特殊的任務(wù)在規(guī)定的時(shí)間點(diǎn)執(zhí)行,并在規(guī)定的時(shí)間內(nèi)結(jié)束。此外,確定性執(zhí)行對(duì)數(shù)據(jù)處理的延遲性有很好的抑制作用,可以滿足自動(dòng)駕駛對(duì)實(shí)時(shí)性的需求。

確定性執(zhí)行經(jīng)常和確定性通信綁定在一起使用,正常的帶有數(shù)據(jù)轉(zhuǎn)發(fā)的確定性執(zhí)行流程如下圖所示:

1.應(yīng)用層在1000us時(shí)間點(diǎn)請(qǐng)求中間件發(fā)送數(shù)據(jù)

2.中間件任務(wù)在3000us時(shí)間點(diǎn)執(zhí)行并發(fā)送數(shù)據(jù)

3.經(jīng)過(guò)協(xié)議棧處理,并物理傳輸,在3300us時(shí)到達(dá)對(duì)方的協(xié)議棧

4.對(duì)端中間件任務(wù)在3500us時(shí)間點(diǎn)運(yùn)行接收數(shù)據(jù),并轉(zhuǎn)發(fā)給應(yīng)用

5.應(yīng)用在5000us時(shí)間點(diǎn)運(yùn)行并處理

當(dāng)然,此處還有一個(gè)優(yōu)化點(diǎn),將中間件的數(shù)據(jù)接收或者發(fā)送 與 應(yīng)用綁定到同一個(gè)確定性執(zhí)行的任務(wù)中。

我們假定底層的協(xié)議棧,硬件配置,參數(shù)配置均保持一致,也就是假定了硬件平臺(tái)的傳輸范疇的運(yùn)行時(shí)間是穩(wěn)定的,波動(dòng)較小的。其實(shí)這邊拋開(kāi)了TSN、傳輸負(fù)載等相關(guān)因素的影響。我們假定關(guān)鍵數(shù)據(jù)幀的傳輸最大時(shí)間,從請(qǐng)求協(xié)議棧發(fā)送接口調(diào)用開(kāi)始計(jì)算,到達(dá)對(duì)端協(xié)議棧并且協(xié)議棧把數(shù)據(jù)準(zhǔn)備好給中間件處理為計(jì)算的終點(diǎn),整個(gè)的傳輸最大時(shí)間為500us。

非確定性執(zhí)行關(guān)鍵點(diǎn)在于執(zhí)行時(shí)間點(diǎn)一直在波動(dòng),可能在應(yīng)用運(yùn)行之前,也可能會(huì)在應(yīng)用執(zhí)行之后準(zhǔn)備好數(shù)據(jù)。這就導(dǎo)致了應(yīng)用層獲取的數(shù)據(jù)一直在抖動(dòng),可能某些時(shí)刻數(shù)據(jù)已經(jīng)失去了時(shí)效性。

而確定性執(zhí)行恰恰相反,數(shù)據(jù)總是在應(yīng)用執(zhí)行之前就會(huì)準(zhǔn)備好,應(yīng)用層每次運(yùn)行都不會(huì)空跑一輪代碼然后讓渡CPU的運(yùn)行時(shí)間。

對(duì)于CPU負(fù)載而言,非確定性執(zhí)行的CPU負(fù)載是雜亂無(wú)章的,但是確定性執(zhí)行的CPU負(fù)載就是波浪形的。

簡(jiǎn)單說(shuō)來(lái),確定性執(zhí)行的負(fù)載是均勻的分布在該有的時(shí)間點(diǎn)范圍內(nèi),而非確定性執(zhí)行的時(shí)間點(diǎn)和截止點(diǎn)都是未知的,有可能非確定性執(zhí)行的任務(wù)在本次時(shí)間片內(nèi)處理了三個(gè)數(shù)據(jù),下一個(gè)時(shí)間片處理1個(gè)數(shù)據(jù)。確定性執(zhí)行的任務(wù)每一個(gè)時(shí)間片都處理2個(gè)數(shù)據(jù),運(yùn)行時(shí)長(zhǎng)也是比較穩(wěn)定的。

3、確定性執(zhí)行的優(yōu)點(diǎn)

確定性執(zhí)行對(duì)于運(yùn)行截止時(shí)間,降低延時(shí)是非常有效的。此外,設(shè)計(jì)得當(dāng)?shù)脑挘?strong>確定性執(zhí)行可以降低內(nèi)存消耗。如下表格所示,非確定性執(zhí)行因?yàn)閿?shù)據(jù)申請(qǐng)和數(shù)據(jù)釋放的速度不一致,為了保證數(shù)據(jù)不丟失,必然需要緩存多次數(shù)據(jù)。而確定性執(zhí)行在一個(gè)任務(wù)周期內(nèi),可以完成數(shù)據(jù)申請(qǐng)和數(shù)據(jù)釋放,因此只需要緩存一個(gè)數(shù)據(jù)。這個(gè)作用對(duì)MCU這種資源緊缺型的芯片而言,真是天大的福音。

實(shí)踐過(guò)程中,意外的發(fā)現(xiàn),確定性執(zhí)行對(duì)我們的軟件設(shè)計(jì)比較友好。以下是幾個(gè)可以快速提高效率的點(diǎn),不需要考慮太多其他副作用。

第一點(diǎn):無(wú)鎖的中間件設(shè)計(jì)。第二點(diǎn):零拷貝的內(nèi)存模型軟件設(shè)計(jì)。這兩點(diǎn)本質(zhì)上是一點(diǎn),但此處還是拆開(kāi)來(lái)講,因?yàn)檫@里面的側(cè)重點(diǎn)不一樣。

第一點(diǎn),無(wú)鎖的中間件設(shè)計(jì)。

首先,有一點(diǎn)需要澄清,當(dāng)我們談到中間件,第一印象就是Linux,QNX,域控制器,但是MCU側(cè)也就是CP側(cè)也需要中間件設(shè)計(jì)。其次,對(duì)于無(wú)鎖我們第一印象是Lock-Free,但它真的是Free并且沒(méi)有代價(jià)的嗎?這種無(wú)鎖需要代價(jià),各種編譯器提供的各種原子操作以及內(nèi)存序的需求對(duì)程序的運(yùn)行是有影響的。此處講的無(wú)鎖是指不用原子操作,也不用鎖!當(dāng)然,cache同步的問(wèn)題還是需要解決的。我們將其抽象成一個(gè)單讀單寫(xiě)問(wèn)題,以便于舉例說(shuō)明。

讀和寫(xiě)都在同一款芯片內(nèi),如果不用原子操作,當(dāng)核0寫(xiě)數(shù)據(jù)之后,核1讀數(shù)據(jù)需要在硬件MESI機(jī)制起作用并完全核間同步之后讀取數(shù)據(jù),那么此時(shí)數(shù)據(jù)就不是Dirty Data。確定性執(zhí)行可以保證核0寫(xiě)內(nèi)存和核1讀內(nèi)存的時(shí)間差大于MESI的同步耗時(shí),那么,我們寫(xiě)內(nèi)存完全不需要考慮各種鎖,以及內(nèi)存同步的機(jī)制對(duì)運(yùn)行效率的影響,因此局部運(yùn)行效率將大大提高。

對(duì)于MCU而言,一般不存在cache同步的問(wèn)題,但是核間數(shù)據(jù)訪問(wèn)需要做互斥,確定性執(zhí)行保證兩個(gè)任務(wù)不在同一個(gè)時(shí)間點(diǎn)執(zhí)行,那么就不存在互斥(鎖)的問(wèn)題。

第二點(diǎn),零拷貝的內(nèi)存模型軟件設(shè)計(jì)。

我們經(jīng)常碰到一個(gè)很苦惱的問(wèn)題,同一塊內(nèi)存如何給其他程序訪問(wèn)。我們將這個(gè)問(wèn)題簡(jiǎn)化成一個(gè)單寫(xiě)2讀的模型,這其實(shí)在汽車(chē)電子中很常見(jiàn),同一個(gè)topic的數(shù)據(jù),其實(shí)也就那么兩個(gè)或者3個(gè)程序需要用。我們?cè)倜鞔_一下場(chǎng)景,假設(shè)一個(gè)溫度傳感器的數(shù)據(jù)需要被2個(gè)程序獲取,為了軟硬解耦,我們?cè)谠O(shè)計(jì)時(shí)可能會(huì)有一個(gè)任務(wù)周期性的獲取溫度數(shù)據(jù),然后傳遞給其他2個(gè)程序。整個(gè)流程如下圖所示,讀取數(shù)據(jù)時(shí),如果是Linux系統(tǒng),直接將溫度數(shù)據(jù)內(nèi)存首地址傳遞給內(nèi)核,內(nèi)核直接將數(shù)據(jù)拷貝到此內(nèi)存中,不需要借助臨時(shí)變量,然后再拷貝到溫度數(shù)據(jù)內(nèi)存中。不同的程序在不同的時(shí)間點(diǎn)讀取使用數(shù)據(jù),也就是說(shuō),不同程序只是拿到這個(gè)內(nèi)存地址,然后用這個(gè)數(shù)據(jù),不需要任何拷貝。當(dāng)然,這邊有個(gè)前提,最后一個(gè)需要使用數(shù)據(jù)的程序必須在溫度數(shù)據(jù)下一次獲取之前結(jié)束使用。

4、確定性執(zhí)行面對(duì)的現(xiàn)實(shí)

然而,確定性執(zhí)行并沒(méi)有那么美好,很多因素制約著確定性執(zhí)行的發(fā)揮,確定性執(zhí)行的穩(wěn)定性和可靠性也有待考量。

就整車(chē)層級(jí)而言,確定性面臨的現(xiàn)實(shí):

1.確定性執(zhí)行在整車(chē)層級(jí)實(shí)現(xiàn)是有一定的困難的,并不是所有控制器均可以實(shí)現(xiàn)確定性執(zhí)行的。

2.面臨的第一個(gè)挑戰(zhàn)是時(shí)間同步!確定性執(zhí)行的基礎(chǔ)是時(shí)間同步必須要精準(zhǔn),抖動(dòng)要小。不是所有的控制器能做到。尤其是某些同步時(shí)刻,時(shí)間會(huì)有一些奇奇怪怪的跳變或者抖動(dòng)。當(dāng)然,時(shí)間回滾是必須要避免的。

3.小周期運(yùn)行的任務(wù),比如說(shuō)2.5毫秒周期運(yùn)行的任務(wù),確定性執(zhí)行實(shí)施起來(lái)非常困難。

4.由于時(shí)間同步需要時(shí)間,這就影響車(chē)輛啟動(dòng)了。確定性執(zhí)行的任務(wù)啟動(dòng)可能會(huì)存在啟動(dòng)延遲,過(guò)大的延遲對(duì)于整車(chē)來(lái)說(shuō)可能無(wú)法接受。

從單個(gè)域控制器的角度來(lái)說(shuō),面臨的現(xiàn)實(shí)挑戰(zhàn)更大:

1.必須要正視操作系統(tǒng)的實(shí)時(shí)性,Linux打個(gè)實(shí)時(shí)patch真不算什么真實(shí)時(shí)性,確定性執(zhí)行對(duì)觸發(fā)到程序響應(yīng)是有要求的,響應(yīng)太慢或者響應(yīng)的時(shí)間忽長(zhǎng)忽短,必然影響確定性執(zhí)行的配合。

2.就同樣的操作系統(tǒng)而言,不是所有任務(wù)都可以上確定性執(zhí)行,必然面對(duì)確定性執(zhí)行任務(wù)和非確定性執(zhí)行任務(wù)混合運(yùn)行的情況。綁核可以解決一部分問(wèn)題,讓所有確定性任務(wù)都運(yùn)行在同一個(gè)核上,非確定性任務(wù)運(yùn)行在其他核上,解決部分問(wèn)題。然而,確定性任務(wù)和非確定性任務(wù)之間的數(shù)據(jù)交互,仍然需要去解決。

3.就不同的操作系統(tǒng)而言,確定性任務(wù)和非確定性任務(wù)的配合也十分困難。不同的操作系統(tǒng)必然面對(duì)著以太網(wǎng),CAN,SPI或者異構(gòu)核間的mailbox等類(lèi)似硬件機(jī)制主導(dǎo)的數(shù)據(jù)傳輸機(jī)制??紤]跨芯片,跨操作系統(tǒng),數(shù)據(jù)傳輸延時(shí)等各方面因素。眾多因素考量下,需要合理排布好確定性執(zhí)行任務(wù),保證確定性執(zhí)行任務(wù)間的低延時(shí)。

4.系統(tǒng)的卡滯,偶發(fā)的系統(tǒng)卡滯。直接導(dǎo)致確定性執(zhí)行的任務(wù)執(zhí)行錯(cuò)亂。是否會(huì)引發(fā)級(jí)聯(lián)失效,仍待更多的驗(yàn)證。

5.系統(tǒng)調(diào)用的風(fēng)險(xiǎn)。有些系統(tǒng)調(diào)度會(huì)阻塞,有些系統(tǒng)調(diào)用有自旋鎖,這些系統(tǒng)調(diào)用又不可能不用,但是用了,確定性執(zhí)行還確定嗎?

6.軟件模塊設(shè)計(jì)的挑戰(zhàn),確定性執(zhí)行必然要求軟件接口必須是非阻塞的,很多第三方庫(kù)或者其他軟件庫(kù)存在阻塞行為,確定性執(zhí)行與其配合,必然需要一番思考。

7.硬件的品控的挑戰(zhàn)。最簡(jiǎn)單的體現(xiàn)是EOL下線時(shí)各種測(cè)試沒(méi)問(wèn)題,一跑量產(chǎn)代碼就會(huì)有問(wèn)題。有時(shí)候,由于各種原因,某次硬件操作耗時(shí)不一樣,這可能會(huì)直接或者間隔影響確定性執(zhí)行的時(shí)間。

8.確定性執(zhí)行的效率相對(duì)來(lái)說(shuō)是比較低的,對(duì)于Linux系統(tǒng)而言,需要自己設(shè)計(jì)適配調(diào)度器。

9.高負(fù)載尤其是偶發(fā)高負(fù)載下的確定性執(zhí)行的搶占與穩(wěn)定性保證。

10.確定性執(zhí)行偶發(fā)運(yùn)行耗時(shí)過(guò)長(zhǎng)。某些情況下,由于確定性程序也會(huì)被內(nèi)核任務(wù)搶占,如何保證確定性執(zhí)行的截止時(shí)間仍在設(shè)計(jì)的范圍內(nèi),或者在超時(shí)時(shí)間之后,確定性執(zhí)行仍然可靠,也是需要特殊考慮的。

11.功能安全對(duì)確定性執(zhí)行的影響。確定性執(zhí)行可能會(huì)失效,那么它的失效模式是什么?失效之后后處理的策略是什么?ASIL-B控制器的確定性執(zhí)行失效是否會(huì)引發(fā)ASIL-D控制器的確定性執(zhí)行?

12.功能安全島無(wú)法完全保證確定性執(zhí)行的功能安全。

13.以上都考慮之后,開(kāi)始調(diào)度器的特殊設(shè)計(jì)挑戰(zhàn)!?跨核,跨進(jìn)程,跨芯片,跨操作系統(tǒng)的考量設(shè)計(jì)。如果還要其他公司配合,那么恭喜你,加倍難度。

5、總結(jié)

確定性執(zhí)行仍面臨著很多挑戰(zhàn),需要操作系統(tǒng)的配合,各個(gè)控制器供應(yīng)商的配合。功能安全也挑戰(zhàn)著確定性執(zhí)行的實(shí)現(xiàn)。目前確定性執(zhí)行方案還存在著各種各樣的問(wèn)題,但是歷史總是螺旋式的上升前進(jìn)。技術(shù)發(fā)展的大浪淘沙,確定性執(zhí)行總將在汽車(chē)電子行業(yè)占據(jù)一席。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜