引言
在最近一起有公開報(bào)道的輔助駕駛相關(guān)事故中,由于AEB(自動(dòng)緊急制動(dòng)系統(tǒng))功能被懷疑沒有起作用,又有一家車企的高級(jí)輔助駕駛功能遭到質(zhì)疑。其實(shí),目前大多數(shù)車輛中AEB功能的生效車速區(qū)間在70km/h以下,美國公路安全保險(xiǎn)協(xié)會(huì)IIHS對(duì)新車AEB的最高測(cè)試速度僅為40km/h。
AEB功能之所以跟車輛速度強(qiáng)相關(guān),主要是由于車輛從檢測(cè)到障礙物到采取剎車動(dòng)作需要一定的時(shí)間,而車速越快,留給系統(tǒng)反應(yīng)的時(shí)間就越少。在傳感器探測(cè)能力確定的情況下,系統(tǒng)從評(píng)估傳入的傳感器數(shù)據(jù)到啟動(dòng)剎車必須在毫秒級(jí)(如300ms)的時(shí)間內(nèi)完成,否者就可能為時(shí)已晚,失去了意義。這正是行業(yè)對(duì)于 “高實(shí)時(shí)性”要求的具體體現(xiàn)。
然而,行業(yè)內(nèi)很多人對(duì)于“實(shí)時(shí)性”這一概念實(shí)際上卻存在著很大的誤解,在智能駕駛相關(guān)開發(fā)中也沒有給予足夠的重視,對(duì)于提升系統(tǒng)的“實(shí)時(shí)性”也缺乏系統(tǒng)性思路。比如:
汽車電子領(lǐng)域的“實(shí)時(shí)性”就是指系統(tǒng)跑得快么?
把MCU換成MPU,系統(tǒng)的實(shí)時(shí)性就提升了么?
為什么說AUTOSAR CP的實(shí)時(shí)性要優(yōu)于AUTOSAR AP?
采用實(shí)時(shí)操作系統(tǒng),系統(tǒng)是不是就滿足實(shí)時(shí)性要求了?
以太網(wǎng)、5G為什么也強(qiáng)調(diào)要支持確定性通信?
什么是端到端的系統(tǒng)級(jí)實(shí)時(shí)性?
系統(tǒng)實(shí)時(shí)性的影響因素有哪些?如何優(yōu)化?
希望本文能有助于大家更準(zhǔn)確地理解車輛控制系統(tǒng)中的實(shí)時(shí)性,并能夠?qū)?shí)時(shí)性問題進(jìn)行系統(tǒng)、全面的分析,從而使得開發(fā)出的智能駕駛產(chǎn)品功能更可靠,性能表現(xiàn)更優(yōu),真正降低交通事故的概率和產(chǎn)生的危害。
什么是實(shí)時(shí)系統(tǒng)?
如果我們問一個(gè)軟件開發(fā)人員,尤其是IT行業(yè)的軟件工程師,“實(shí)時(shí)”是什么意思,得到的回答大概率是:“實(shí)時(shí)”就是非常快、或者幾乎感覺不到延遲。對(duì)于常人而言,這么理解倒是也可以;但對(duì)于嵌入式領(lǐng)域,尤其是涉及人身安全的自動(dòng)駕駛、整車控制等系統(tǒng)而言,這個(gè)回答完全沒Get到“實(shí)時(shí)”二字的真諦。
其實(shí),對(duì)于嵌入式領(lǐng)域而言,“實(shí)時(shí)”應(yīng)理解為“及時(shí)”,英文用“in time”表達(dá),即強(qiáng)調(diào)系統(tǒng)應(yīng)在一個(gè)確定的時(shí)間內(nèi)完成特定的任務(wù),追求“確定性”和“可預(yù)期”。
假設(shè)有一個(gè)任務(wù)交給兩個(gè)系統(tǒng)分別處理,A系統(tǒng)處理平均需要10ms,且每次都能確保在12ms內(nèi)處理完畢,而B系統(tǒng)平均處理只需要5ms,但某些情況下可能要花費(fèi)20ms、50ms甚至更久才能完成。由此,我們可以認(rèn)為A系統(tǒng)的實(shí)時(shí)性更好。
可見,在本質(zhì)上,實(shí)時(shí)性跟系統(tǒng)運(yùn)行的“快慢”其實(shí)沒有必然關(guān)系。
實(shí)際應(yīng)用中,不同系統(tǒng)對(duì)于實(shí)時(shí)性的滿足程度并不相同。為此,人們根據(jù)系統(tǒng)對(duì)規(guī)定時(shí)間內(nèi)完成任務(wù)的敏感性不同,將實(shí)時(shí)系統(tǒng)分為“硬實(shí)時(shí)系統(tǒng)”和“軟實(shí)時(shí)系統(tǒng)”。
圖:不同系統(tǒng)對(duì)于實(shí)時(shí)性的要求程度不同(來源:網(wǎng)絡(luò))
?硬實(shí)時(shí)系統(tǒng)(Hard Real-time)嚴(yán)格限定在規(guī)定的時(shí)間內(nèi)完成任務(wù),否則就可能導(dǎo)致系統(tǒng)功能的失效。例如對(duì)于線控轉(zhuǎn)向,如果駕駛員發(fā)出轉(zhuǎn)向操作后100ms內(nèi)車輪沒有執(zhí)行轉(zhuǎn)向,則可能導(dǎo)致碰撞事故,嚴(yán)重的甚至造成車毀人亡。
軟實(shí)時(shí)系統(tǒng)(Soft Real-time)則要求沒有這么嚴(yán)格,允許出現(xiàn)一定的時(shí)間偏差。軟實(shí)時(shí)只能提供統(tǒng)計(jì)意義上的實(shí)時(shí)性,例如有的應(yīng)用要求系統(tǒng)在95%的情況下能夠確保在規(guī)定時(shí)間內(nèi)完成任務(wù)即可。車輛信息娛樂域的系統(tǒng)大多都屬于軟實(shí)時(shí)系統(tǒng)。
總之,實(shí)時(shí)性是一個(gè)相對(duì)的概念,如同功能安全,也分不同等級(jí),需要根據(jù)系統(tǒng)的功能要求,綜合平衡系統(tǒng)升級(jí)的靈活性、成本等不同因素,設(shè)計(jì)“夠用”的實(shí)時(shí)性即可。
車內(nèi)的各種系統(tǒng)對(duì)實(shí)時(shí)性有不同的要求。以AUTOSAR標(biāo)準(zhǔn)為例,CP通常用于硬實(shí)時(shí)系統(tǒng)中,而AP多用于對(duì)實(shí)時(shí)性要求較低、但又比用于車機(jī)的Android實(shí)時(shí)性要求高的系統(tǒng),如下圖所示。
圖:AUTOSAR CP系統(tǒng)、AP系統(tǒng)及信息娛樂系統(tǒng)對(duì)于實(shí)時(shí)性、安全性和計(jì)算能力有著不同的要求(參考文獻(xiàn)7)
如何理解三者在實(shí)時(shí)性方面的差異呢?我們以操作系統(tǒng)理論中經(jīng)常提及的“優(yōu)先級(jí)反轉(zhuǎn)”為例來簡單解釋下。
“優(yōu)先級(jí)反轉(zhuǎn)”是指一個(gè)正在訪問臨界區(qū)資源的低優(yōu)先級(jí)任務(wù)或進(jìn)程,導(dǎo)致其它高優(yōu)先級(jí)任務(wù)或進(jìn)程反而必須等待而被延遲響應(yīng)的情況。在實(shí)時(shí)應(yīng)用中,這是一個(gè)十分嚴(yán)重的問題。在基于最大吞吐量原則進(jìn)行調(diào)度的常規(guī)Linux系統(tǒng)中,如Android系統(tǒng),這個(gè)問題甚至被認(rèn)為是影響系統(tǒng)實(shí)時(shí)性的最重要原因。而Linux的另一個(gè)版本——RT-Linux,則在常規(guī)Linux的基礎(chǔ)上,通過對(duì)“優(yōu)先級(jí)反轉(zhuǎn)”等問題的優(yōu)化,提升了系統(tǒng)的實(shí)時(shí)性。
AUTOSAR AP運(yùn)行所基于的操作系統(tǒng)盡管與Linux一樣都是符合POSIX標(biāo)準(zhǔn)的操作系統(tǒng),如QNX操作系統(tǒng),但可以認(rèn)為是類似于經(jīng)過實(shí)時(shí)性優(yōu)化的RT-Linux,因而其實(shí)時(shí)性是要優(yōu)于車機(jī)中應(yīng)用的Android系統(tǒng)的。
AUTOSAR CP中所定義的OS由于是一個(gè)完全靜態(tài)(任務(wù)數(shù)量、優(yōu)先級(jí)都是確定的,運(yùn)行過程中不會(huì)變)的操作系統(tǒng),因而針對(duì)“優(yōu)先級(jí)反轉(zhuǎn)”問題可以進(jìn)一步優(yōu)化,通過“優(yōu)先級(jí)天花板協(xié)議(Priority Ceiling Protocol)”的方法,從而實(shí)現(xiàn)比RT-Linux更高的實(shí)時(shí)性。因此,AUTOSAR CP的實(shí)時(shí)性定位要高于AUTOSAR AP的實(shí)時(shí)性定位,尤其是能夠滿足硬實(shí)時(shí)系統(tǒng)的要求。
那是不是只要系統(tǒng)使用了AUTOSAR CP,或者某個(gè)宣稱是硬實(shí)時(shí)操作系統(tǒng)的OS,就算是一個(gè)硬實(shí)時(shí)系統(tǒng)了呢?實(shí)際情況遠(yuǎn)遠(yuǎn)沒有這么簡單,影響系統(tǒng)實(shí)時(shí)性的因素非常多。
AUTOSAR標(biāo)準(zhǔn)從R4.x版本開始,專門引入了Timing Analysis這一新方法。在這里,Timing一詞,中文多習(xí)慣譯為“時(shí)序”,可以認(rèn)為等效于“實(shí)時(shí)性”。
什么是系統(tǒng)級(jí)實(shí)時(shí)性
為了說清楚這個(gè)問題,我們首先來看一個(gè)AUTOSAR標(biāo)準(zhǔn)中所舉的主動(dòng)轉(zhuǎn)向的例子。如下圖所示:
圖:主動(dòng)轉(zhuǎn)向系統(tǒng)中的端到端時(shí)序要求(參考文獻(xiàn)1)
整個(gè)系統(tǒng)包含傳感器、兩個(gè)ECU、CAN和Flexray總線以及執(zhí)行器。功能大意是通過對(duì)車輛側(cè)傾角度的持續(xù)監(jiān)測(cè),及時(shí)主動(dòng)調(diào)整轉(zhuǎn)向,避免車輛側(cè)翻。功能開發(fā)人員根據(jù)車輛動(dòng)態(tài)模型和主動(dòng)轉(zhuǎn)向功能的定義,提出了整個(gè)事件鏈(Event chain)的最大響應(yīng)時(shí)間不能超過30ms的要求。顯然,這是一個(gè)典型的硬實(shí)時(shí)要求。
這一實(shí)時(shí)性要求或時(shí)序(Timing)要求可根據(jù)事件鏈上所涉及的事件,分解為T1~T5五個(gè)部分,其中T1、T3、T5為通信傳輸用時(shí),而T2和T4為ECU內(nèi)部處理用時(shí)。
從這個(gè)例子中不難看出,系統(tǒng)的實(shí)時(shí)性分析需要首先明確“系統(tǒng)”一詞所指的范圍。在車輛控制中,尤其是自動(dòng)駕駛,實(shí)時(shí)性應(yīng)該更多指端到端的時(shí)序(End-to-End Timing),而不能只是孤立地看某個(gè)控制器或某條通信總線的實(shí)時(shí)性。因此,要想優(yōu)化系統(tǒng)的實(shí)時(shí)性,則不僅需要從ECU內(nèi)部功能入手,還需要考慮信息傳遞所涉及的各種通信過程。
影響系統(tǒng)實(shí)時(shí)性的三大層面、九個(gè)層級(jí)
總體而言,影響系統(tǒng)實(shí)時(shí)性的因素可以分為通信層面、調(diào)度層面和代碼層面三個(gè)層面,而每個(gè)層面中又有多個(gè)層級(jí),總計(jì)可劃分成九個(gè)主要層級(jí)。
01
通信層面
通信層面的時(shí)間主要指信號(hào)在網(wǎng)絡(luò)總線上的傳輸所消耗的時(shí)間。其中,報(bào)文響應(yīng)時(shí)間、帶寬、利用率(Payload)以及數(shù)據(jù)緩沖區(qū)大小對(duì)該層面的時(shí)間影響重大。
在這一層面上,開發(fā)過程中關(guān)注的重點(diǎn)往往是端到端時(shí)間(如從傳感器到執(zhí)行器)或者軟件中一個(gè)本地事件到服務(wù)器上的另一個(gè)事件的時(shí)間差。具體而言,又可分細(xì)為三個(gè)層級(jí):
(1)V2X層級(jí):即車輛與外界進(jìn)行數(shù)據(jù)通信時(shí)所需的時(shí)間。如V2V場景中,前車在檢測(cè)到危險(xiǎn)時(shí)向跟隨在后方的車輛發(fā)出警示。顯然,警示信息的傳遞不應(yīng)太久。
典型解決方案:
優(yōu)化車輛與外部世界通信實(shí)時(shí)性的一個(gè)典型實(shí)例就是5G確定性網(wǎng)絡(luò)。手機(jī)偶爾有一兩秒沒信號(hào)或許不是什么大問題,但對(duì)于汽車而言,未來要想實(shí)現(xiàn)基于云端的車輛控制,實(shí)時(shí)性是必須解決的問題。
傳統(tǒng)的4G網(wǎng)絡(luò)由于IP網(wǎng)絡(luò)“分組交換”帶來的傳輸路徑不確定,無法提供延遲、丟包和抖動(dòng)的最壞情況界限,就無法提供確定的延遲,難以保證信號(hào)“及時(shí)”地傳送到目的地,而5G確定性網(wǎng)絡(luò)則有可能解決這些問題,從而提高這一層級(jí)的實(shí)時(shí)性。
2019年5月,華為在第三屆未來網(wǎng)絡(luò)大會(huì)上,提出了5G確定性網(wǎng)絡(luò)。對(duì)于這一概念,華為聯(lián)合信通院、三大運(yùn)營商在2020年共同發(fā)布的《5G確定性網(wǎng)絡(luò)產(chǎn)業(yè)白皮書》中做了如下定義:
5G確定性網(wǎng)絡(luò)(5GDN:5G Deterministic Networking),是指利用5G網(wǎng)絡(luò)資源打造可預(yù)期、可規(guī)劃、可驗(yàn)證,有確定性能力的移動(dòng)專網(wǎng),提供差異化的業(yè)務(wù)體驗(yàn)。
(2)車內(nèi)網(wǎng)絡(luò):車內(nèi)不同ECU之間通過網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)交互所需的時(shí)間。如系統(tǒng)通常要求剎車踏板踩下200ms之內(nèi)亮起剎車燈,而剎車信號(hào)檢測(cè)和剎車燈的控制往往不是在同一個(gè)ECU內(nèi)完成,有時(shí)甚至要經(jīng)過一個(gè)網(wǎng)關(guān)。這中間可能涉及同一個(gè)信號(hào)在不同總線上的多次傳輸。這些傳輸過程的實(shí)時(shí)性同樣不容忽視,應(yīng)盡量避免延遲、丟幀等問題。
典型解決方案:
TSN(Time-sensitiveNetworking,時(shí)間敏感網(wǎng)絡(luò))可以說是這一層級(jí)當(dāng)前最熱的話題。針對(duì)車內(nèi)日益增多的以太網(wǎng)通信,由TSN工作組制定的相關(guān)標(biāo)準(zhǔn)的核心目標(biāo)就是提升這一層級(jí)的實(shí)時(shí)性。
傳統(tǒng)的以太網(wǎng)是一種“盡力而為”(Best effort)的傳輸方式。而TSN以太網(wǎng)是一種以時(shí)鐘同步為基礎(chǔ)實(shí)現(xiàn)對(duì)不同流量(時(shí)間敏感流量/非時(shí)間敏感流量,可搶占幀/不可搶占幀)的調(diào)度,兼顧幀的過濾和冗余設(shè)計(jì),從而實(shí)現(xiàn)確定性通信。
順帶說一下,5G確定性網(wǎng)絡(luò)中其實(shí)也包含對(duì)TSN技術(shù)的應(yīng)用。也就是說,某些提高系統(tǒng)實(shí)時(shí)性的技術(shù)解決方案可能應(yīng)用于多個(gè)不同層級(jí),而不一定僅局限于某一個(gè)層級(jí)。
(3)ECU內(nèi)部:在ECU內(nèi)部,多個(gè)通過SPI或I2C等方式連接在一起的芯片之間或異構(gòu)SoC內(nèi)核之間進(jìn)行數(shù)據(jù)交互所需的時(shí)間。如中央域控制器中MCU與MPU之間數(shù)據(jù)的傳輸,異構(gòu)多核SoC內(nèi)部實(shí)時(shí)核與計(jì)算核之間的通信,還有電池管理控制器中MCU和電芯采樣芯片之間的通信,這些通信耗時(shí)對(duì)于系統(tǒng)實(shí)時(shí)性的影響也不容忽視。 ? ?
典型解決方案:
TDA4中的IPC驅(qū)動(dòng)包是這方面的一個(gè)好例子。TI開發(fā)的Jacinto 7 SoC在一個(gè)SoC上有多個(gè)不同的CPU,包括Cortex-R5F、Cortex-A72等。在這些CPU上運(yùn)行的軟件需要相互協(xié)作,也就必然需要相互通信。因此協(xié)作方式通常被稱為處理器間通信或IPC(Intra Processor Communication)。每個(gè)CPU和操作系統(tǒng)上都提供了IPC驅(qū)動(dòng)包,以支持更上層的應(yīng)用程序之間相互通信。
圖:TDA4 IPC消息收發(fā)過程(參考文獻(xiàn)8)
為了提高通信效率,IPC驅(qū)動(dòng)包利用了芯片中提供的硬件郵箱資源,同時(shí)還采用了基于共享內(nèi)存的消息隊(duì)列,從而可以有效減少通信擁堵情況的發(fā)生,為實(shí)現(xiàn)核間通信的確定性提供了良好的基礎(chǔ),有助于提升系統(tǒng)的實(shí)時(shí)性。
02
調(diào)度層面
調(diào)度層面也就是常說的操作系統(tǒng)層面,該層面對(duì)于任務(wù)的響應(yīng)時(shí)間(Response Time)影響重大,而響應(yīng)時(shí)間是調(diào)度理論中最重要的時(shí)間參數(shù),它表征了從需要執(zhí)行任務(wù)到任務(wù)執(zhí)行完畢所經(jīng)過的時(shí)間,是衡量操作系統(tǒng)是否為硬實(shí)時(shí)操作系統(tǒng)的核心因素。考慮到日益普遍的多核處理器,這一層面也可進(jìn)一步細(xì)分為兩個(gè)層級(jí):
(1)SoC層級(jí):對(duì)于多核處理器,任務(wù)在各個(gè)CPU之間的分配與調(diào)度策略會(huì)影響系統(tǒng)所有與時(shí)間有關(guān)的行為。例如,在訪問核間共享的數(shù)據(jù)時(shí),為確保數(shù)據(jù)一致性,不同CPU上運(yùn)行的軟件之間需要同步,進(jìn)而產(chǎn)生額外時(shí)間開銷,延遲響應(yīng)時(shí)間。
典型解決方案:
Amdahl定律給出的啟示。針對(duì)多核引入后的并行計(jì)算,計(jì)算機(jī)專家Gene Amdahl早在半個(gè)世紀(jì)前就發(fā)現(xiàn),系統(tǒng)性能的提升潛力在很大程度上取決于這些軟件中必須按順序處理(沒辦法并行處理)的部分所占的比例。
因此,即使CPU數(shù)量持續(xù)增加也將不再帶來任何實(shí)際計(jì)算能力的提升。即隨著CPU內(nèi)核的增加,處理速度的提升將逐漸接近水平線。打個(gè)通俗點(diǎn)兒的比喻:請(qǐng)兩個(gè)人裝修房子需要花10天完成的話,請(qǐng)十個(gè)人并不能保證2天內(nèi)完成,而極可能是至少需要5天,且增加再多的人也沒用。
圖:Amdahl定律(來源:網(wǎng)絡(luò))
對(duì)于車輛上控制相關(guān)功能而言,通常包含很多難以并行化的因素,要么功能在邏輯上不允許,要么項(xiàng)目需要重用之前基于單核MCU開發(fā)的大部分軟件。
有人可能說,英偉達(dá)的高端GPU不是都已集成數(shù)千個(gè)CUDA內(nèi)核了么?對(duì)此,有必要澄清一點(diǎn):控制類算法、復(fù)雜狀態(tài)機(jī)以及不同通信總線之間傳輸報(bào)文的網(wǎng)關(guān),它們與可以輕松分布在成百上千個(gè)圖形計(jì)算核心上的渲染引擎不具有可比性,即后者可以輕松支持并行處理,而前者則很難。
但是,這也給了我們一個(gè)重要啟示:要想在車輛控制中利用好多核處理器,就必須盡可能地將各種功能進(jìn)行解耦,形成一系列相對(duì)獨(dú)立的Function Cluster(功能簇),以便可以同時(shí)跑在多個(gè)內(nèi)核上。
(2)CPU層級(jí):對(duì)于單核MCU或多核SoC中的單個(gè)CPU,一次只能處理一個(gè)任務(wù),要執(zhí)行另一個(gè)任務(wù)(如中斷)就必須先暫停當(dāng)前的任務(wù)。所以,CPU層級(jí)調(diào)度就是指執(zhí)行單核調(diào)度的層級(jí)。
典型解決方案:
這里我們以支持搶占式調(diào)度的AUTOSAR OS為例。為了保證系統(tǒng)滿足硬實(shí)時(shí)的要求,AUTOSAR標(biāo)準(zhǔn)提出了Timing Protection的概念,通過確保影響任務(wù)響應(yīng)時(shí)間因素的上限或者下限來優(yōu)化系統(tǒng)的實(shí)時(shí)性。具體而言就是:
保證任務(wù)或中斷的執(zhí)行不超出預(yù)設(shè)的最長執(zhí)行時(shí)間;
保證共享資源被鎖的時(shí)間不超出預(yù)設(shè)的最長時(shí)間;
保證中斷被禁止的時(shí)間不超過預(yù)設(shè)的最長時(shí)間;
保證任務(wù)的激活間隔不低于預(yù)設(shè)的時(shí)間;
保證中斷的發(fā)生間隔不低于預(yù)設(shè)的時(shí)間;
其實(shí),這五條可以概括為兩種時(shí)序保護(hù)機(jī)制:
A. 執(zhí)行時(shí)間預(yù)算保護(hù),即防止任務(wù)或中斷超出允許執(zhí)行的最長時(shí)間;
B. 執(zhí)行頻次保護(hù),即防止任務(wù)或中斷的產(chǎn)生頻率超出允許的范圍;
需要說明的是,實(shí)際開發(fā)中,準(zhǔn)確計(jì)算最長執(zhí)行執(zhí)行時(shí)間非常困難,對(duì)于多核MCU,這更加不可能。有關(guān)這部分的討論超出了本文的范圍,感興趣的讀者可以查閱靜態(tài)代碼分析相關(guān)技術(shù),其中德國AbsInt公司開發(fā)的aiT分析軟件是這方面的代表性工具。
03
代碼層面
代碼層面的分析重點(diǎn)是代碼執(zhí)行所需的時(shí)間,即凈運(yùn)行時(shí)間(Core Execution Time),不包括因中斷等原因造成的打斷所增加的時(shí)間(這部分時(shí)間在調(diào)度層面進(jìn)行考慮)。在代碼層面進(jìn)行分析活動(dòng)的最有價(jià)值輸出就是前面提到的任務(wù)或中斷的最長執(zhí)行時(shí)間(Worst Case Execution Time)這一時(shí)間參數(shù)。根據(jù)不同的顆粒度,代碼層面可進(jìn)一步細(xì)分為四個(gè)層級(jí):
(1)函數(shù)層級(jí):這里的“函數(shù)”指所有與函數(shù)(C/C++中function的概念)類似的結(jié)構(gòu),包括AUTOSAR OS任務(wù)和中斷服務(wù)例程,POSIX系統(tǒng)中的Thread等。
以AUTOSAR OS為例,任務(wù)(Task)會(huì)調(diào)用一系列Runnable,而Runnable內(nèi)含有若干子函數(shù)。因此,根據(jù)函數(shù)的不同層次,可進(jìn)一步分為任務(wù)/中斷層級(jí)、Runnable層級(jí)(頂層函數(shù))、一般函數(shù)層級(jí)(子函數(shù))。
這其中,任務(wù)或中斷內(nèi)包含的各種算法,普通函數(shù)內(nèi)部的各種執(zhí)行控制流分支,以及函數(shù)內(nèi)部變量在內(nèi)存中的分配對(duì)于函數(shù)的凈運(yùn)行時(shí)間都有直接的影響,因而對(duì)于系統(tǒng)實(shí)時(shí)性有著最直接的影響,同時(shí)也影響著系統(tǒng)的效率。智能駕駛領(lǐng)域中針對(duì)各類算法的優(yōu)化大多都可以歸入這一層級(jí)。
典型解決方案:
用于ROS2的開源中間件Eclipse Iceoryx。Eclipse Iceoryx是用于自動(dòng)駕駛等高安全性應(yīng)用場景中的一個(gè)“零拷貝”進(jìn)程間通信中間件(Zero-copy IPC Middleware),是處理自動(dòng)駕駛系統(tǒng)中每秒數(shù)GB數(shù)據(jù)在多個(gè)不同ROS系統(tǒng)節(jié)點(diǎn)之間進(jìn)行傳遞的“必由之路”。
圖:Iceoryx提供的“True Zero-copy”進(jìn)程間通信原理(參考文獻(xiàn)5)
對(duì)于用于跑自動(dòng)駕駛功能的POSIX系統(tǒng)而言,分布在不同進(jìn)程上的各項(xiàng)功能無法直接訪問其它進(jìn)程的地址空間,必須通過某種IPC方式進(jìn)行數(shù)據(jù)交互,而這通常意味著需要對(duì)數(shù)據(jù)(如一幅圖片)進(jìn)行多次拷貝。
由于此類應(yīng)用中多為圖像和點(diǎn)云數(shù)據(jù),數(shù)據(jù)量非常大,這些拷貝操作不僅消耗大量的內(nèi)存資源,也占用了很長的執(zhí)行時(shí)間,給系統(tǒng)造成了不可忽視的延遲,嚴(yán)重時(shí)甚至導(dǎo)致系統(tǒng)崩潰。
而Iceoryx通過在數(shù)據(jù)發(fā)布者和訂閱者之間設(shè)立共享內(nèi)存,使得發(fā)布者直接將產(chǎn)生的數(shù)據(jù)寫入共享內(nèi)存,而訂閱者可以從Iceoryx這一中間件中獲得所需數(shù)據(jù)的索引(可理解為指針)即可訪問這些數(shù)據(jù),從而避免了數(shù)據(jù)的頻繁拷貝操作。
(2)基本代碼塊層級(jí):指一系列不會(huì)跳轉(zhuǎn)的連續(xù)執(zhí)行的指令。因此,基本塊中的指令將從第一條開始按順序依次執(zhí)行,一旦CPU運(yùn)行時(shí)鐘確定,其執(zhí)行時(shí)間可以認(rèn)為就是確定的。如需在此層面優(yōu)化,只能對(duì)代碼進(jìn)行修改。在這個(gè)層級(jí)上,通常聚焦針對(duì)系統(tǒng)會(huì)頻繁調(diào)用的代碼進(jìn)行優(yōu)化,從而獲得明顯的整體優(yōu)化效果。特別對(duì)于底層驅(qū)動(dòng)和中斷函數(shù),寫出最優(yōu)的代碼本身就是一種良好編碼習(xí)慣和能力的體現(xiàn)。
典型解決方案:
CRC校驗(yàn)算法的優(yōu)化。CRC校驗(yàn)又稱為循環(huán)冗余校驗(yàn),是數(shù)據(jù)通訊中經(jīng)常采用的算法,在汽車電子中的應(yīng)用也非常廣泛,AUTOSAR標(biāo)準(zhǔn)中對(duì)此也有要求。它可以有效的判別出數(shù)據(jù)在傳輸過程中是否發(fā)生了錯(cuò)誤,從而保障了傳輸數(shù)據(jù)的準(zhǔn)確性。
圖: CRC算法常用生成多項(xiàng)式(來源:網(wǎng)絡(luò))
計(jì)算CRC校驗(yàn)時(shí),最常用的計(jì)算方式有三種:查表、計(jì)算、查表+計(jì)算。一般來說,查表法最快,但是需要較大的空間存放表格;計(jì)算法最慢,但是代碼最簡潔、占用空間最小;而在既要求速度,空間又比較緊張時(shí)常用查表+計(jì)算法。由于CRC校驗(yàn)在軟件運(yùn)行過程中會(huì)被頻繁調(diào)用,因此有必要對(duì)它進(jìn)行優(yōu)化,以縮短執(zhí)行時(shí)間,進(jìn)而獲得明顯的系統(tǒng)運(yùn)行效率提升,有利于系統(tǒng)實(shí)時(shí)性目標(biāo)的達(dá)成。
(3)機(jī)器指令碼層級(jí):指CPU所能處理的單一指令,各種指令的執(zhí)行周期通常是固定的。這些指令是由軟件編譯后生成的,大部分軟件調(diào)試、追蹤、測(cè)量工具的分析精度都止于此。之所以單列這一層級(jí),是因?yàn)椴煌木幾g器或者同一個(gè)編譯器采用不同的編譯配置選項(xiàng),所生成的機(jī)器指令碼是不一樣的,因而將直接影響代碼的執(zhí)行效率,進(jìn)而對(duì)凈執(zhí)行時(shí)間產(chǎn)生影響。
典型解決方案:
編譯器優(yōu)化。從源代碼到機(jī)器指令碼的編譯過程其實(shí)存在無數(shù)種路徑,就像一道數(shù)學(xué)題有多種解法。通常編譯器會(huì)提供兩種優(yōu)化目標(biāo)供用戶選擇:“資源占用大小”和“運(yùn)行時(shí)間長短”。多數(shù)情況下,這兩個(gè)目標(biāo)是沖突的,用戶必須根據(jù)實(shí)際情況進(jìn)行權(quán)衡。
圖:編譯器的作用(來源:網(wǎng)絡(luò))
目前大多數(shù)項(xiàng)目中對(duì)于編譯器優(yōu)化的關(guān)注都極少,行業(yè)內(nèi)的編譯器也主要被國外壟斷,極少有企業(yè)計(jì)劃自研。建議大家先從詳細(xì)研究編譯器用戶手冊(cè)開始,通過優(yōu)化編譯后生成代碼的執(zhí)行效率,來逐漸掌握編譯器優(yōu)化技術(shù)。
(4)操作碼狀態(tài)層級(jí):每個(gè)機(jī)器指令均分為取指、譯碼、執(zhí)行等多個(gè)步驟處理,操作碼的狀態(tài)即指這些步驟。對(duì)于軟件工程師而言,這是隱藏最深的一個(gè)層級(jí)了,因?yàn)檫@一層主要涉及CPU架構(gòu),而這部分主要由ARM及各大芯片廠商設(shè)計(jì)。同時(shí),這也是極其關(guān)鍵的一個(gè)層級(jí),它甚至決定了系統(tǒng)是否能支持硬實(shí)時(shí)特性。
典型解決方案:
?三種不同的處理器架構(gòu)WCET對(duì)比。現(xiàn)代芯片技術(shù)的快速發(fā)展使我們不僅僅在更小的面積上實(shí)現(xiàn)了更高的運(yùn)行頻率,而且形成了越來越強(qiáng)大的指令集,更長的流水線,更復(fù)雜的分支預(yù)測(cè)單元,具有復(fù)雜邏輯的分層緩存,從而提高CPU的處理效率,極大地促進(jìn)了平均計(jì)算能力的永久提升,也就是“更快”。
然而,正是這種芯片架構(gòu)的復(fù)雜性,導(dǎo)致對(duì)于同樣的代碼,最短執(zhí)行時(shí)間和最長執(zhí)行時(shí)間之間的差距也越來越大。
下圖定性(而非定量)展示了在三種不同的處理器架構(gòu)中,某個(gè)特定函數(shù)的執(zhí)行時(shí)間變化。這些架構(gòu)均代表各自年代的最高水平,彼此相差20年左右。
圖:三種不同的處理器架構(gòu)WCET對(duì)比(參考文獻(xiàn)2)
8051是一款經(jīng)典的嵌入式處理器,既無緩存,也無復(fù)雜的流水線。每條指令的執(zhí)行時(shí)間僅取決于系統(tǒng)時(shí)鐘,因此,最短時(shí)間、平均時(shí)間和最長時(shí)間均相同。
PowerPC 5xxx架構(gòu)已在汽車領(lǐng)域應(yīng)用多年,動(dòng)力、底盤等領(lǐng)域均有廣泛應(yīng)用。它提供了緩存和一條重要的流水線。雖然平均執(zhí)行時(shí)間相比8051已經(jīng)大幅縮短,但由于受函數(shù)開始時(shí)流水線的狀態(tài)和緩存狀態(tài)的影響,最短時(shí)間和最長時(shí)間之間也出現(xiàn)了明顯的差異。
總結(jié)
實(shí)時(shí)性不一定要求系統(tǒng)跑得越快越好,但一定要求系統(tǒng)是具有高度的確定性,滿足功能對(duì)于Deadline的要求。對(duì)于智能駕駛控制系統(tǒng),單純依賴采用高實(shí)時(shí)性的操作系統(tǒng)并不能解決問題,實(shí)時(shí)性更應(yīng)該從系統(tǒng)級(jí)進(jìn)行考慮,基于事件鏈進(jìn)行端到端的實(shí)時(shí)性分析。
下表匯總了影響系統(tǒng)實(shí)時(shí)性的九個(gè)主要層級(jí)以及前面介紹的典型優(yōu)化實(shí)例,并列出了常見的分析方法,希望有助于大家采用系統(tǒng)思維綜合優(yōu)化系統(tǒng)的實(shí)時(shí)性。
審核編輯:劉清
評(píng)論
查看更多