在電子電氣系統(tǒng)架構(gòu)從分布式向域集中式演進(jìn)的大背景下,,各種功能模塊都集中到少數(shù)幾個(gè)域控制器中,,以前需要N個(gè)ECU(Electronic Control Unit,電子控制單元)實(shí)現(xiàn)各種功能,,現(xiàn)在只需要一個(gè)DCU(Domain Control Unit,,域控制器),節(jié)省了大量的線束和接插件,,減輕了車身整體重量,。 但是,在汽車電子電氣系統(tǒng)中,,不同的ECU提供不同的服務(wù),,具有不同的優(yōu)先級(jí),對(duì)底層操作系統(tǒng)的要求也不一樣,。例如,,根據(jù)ISO 26262標(biāo)準(zhǔn),汽車儀表系統(tǒng)與娛樂(lè)信息系統(tǒng)屬于不同的安全等級(jí),,具有不同的處理優(yōu)先級(jí),。汽車儀表系統(tǒng)與動(dòng)力系統(tǒng)密切相關(guān),要求具有高實(shí)時(shí)性,、高可靠性和強(qiáng)安全性,,以QNX操作系統(tǒng)為主,而信息娛樂(lè)系統(tǒng)主要為車內(nèi)人機(jī)交互提供控制平臺(tái),,追求多樣化的應(yīng)用與服務(wù),,以Linux和Android為主。 要使不同類型的操作系統(tǒng)運(yùn)行在同一個(gè)計(jì)算平臺(tái),,最直接的技術(shù)路徑就是虛擬化,。虛擬化作為一項(xiàng)底層IT核心技術(shù)一直被廣泛應(yīng)用于云計(jì)算領(lǐng)域,,它的作用是通過(guò)Hypervisor軟件模擬出一個(gè)具有完整硬件系統(tǒng)功能、運(yùn)行在一個(gè)完全隔離環(huán)境中的計(jì)算機(jī)系統(tǒng),。 虛擬化的概念被引入到車載操作系統(tǒng)之后,,供應(yīng)商不再需要設(shè)計(jì)多個(gè)硬件來(lái)實(shí)現(xiàn)不同的功能需求,而只需要在車載主芯片上進(jìn)行虛擬化的軟件配置,,形成多個(gè)虛擬機(jī),,在每個(gè)虛擬機(jī)上運(yùn)行相應(yīng)的軟件即可滿足需求。 虛擬化(Hypervisor)解決方案提供了在同一硬件平臺(tái)上承載異構(gòu)操作系統(tǒng)的靈活性,,同時(shí)實(shí)現(xiàn)了良好的高可靠性和故障控制機(jī)制, 以保證關(guān)鍵任務(wù),、硬實(shí)時(shí)應(yīng)用程序和一般用途、不受信任的應(yīng)用程序之間的安全隔離,,實(shí)現(xiàn)了車載計(jì)算單元整合與算力共享,。 云虛擬化 vs 物虛擬化如果說(shuō)“云“虛擬化是過(guò)去20年的技術(shù)風(fēng)口,那么”物“虛擬化將會(huì)是下一個(gè)20年不容錯(cuò)過(guò)的技術(shù)風(fēng)口,。雖然兩種技術(shù)同根同源,,但是,基于嵌入式的物虛擬化與傳統(tǒng)的云計(jì)算虛擬化還是有其不同的地方,。
車載虛擬化的技術(shù)要求車載虛擬化操作系統(tǒng)首先是一個(gè)穩(wěn)定可靠、性能良好,、具備實(shí)時(shí)響應(yīng)能力的微內(nèi)核,,承載在虛擬機(jī)上的應(yīng)用程序按照預(yù)先設(shè)定的優(yōu)先級(jí)運(yùn)行,確保在高優(yōu)先級(jí)虛擬機(jī)中運(yùn)行的實(shí)時(shí)進(jìn)程能夠及時(shí)獲得對(duì)計(jì)算資源的必要訪問(wèn),,無(wú)論低優(yōu)先級(jí)虛擬機(jī)執(zhí)行的繁忙程度如何,,同時(shí),強(qiáng)制性地將關(guān)鍵應(yīng)用程序和實(shí)時(shí)操作系統(tǒng)與非關(guān)鍵應(yīng)用程序和普通操作系統(tǒng)安全隔離,。 小知識(shí) 所謂微內(nèi)核(Microkernel),,是指內(nèi)核進(jìn)程僅提供最基本的服務(wù),,例如進(jìn)程調(diào)度、進(jìn)程間通信,、信號(hào),、時(shí)鐘、中斷等,,而其它的服務(wù)(例如文件系統(tǒng),、內(nèi)存管理、設(shè)備驅(qū)動(dòng),、網(wǎng)絡(luò)協(xié)議棧等)都獨(dú)立于內(nèi)核以單獨(dú)的進(jìn)程運(yùn)行,,它們與內(nèi)核進(jìn)程和其它進(jìn)程之間通過(guò)內(nèi)核提供的消息傳遞機(jī)制進(jìn)行通信。 微內(nèi)核是相對(duì)于宏內(nèi)核而言的,,Linux是典型的宏內(nèi)核,,除了時(shí)鐘、中斷,、進(jìn)程調(diào)度,、進(jìn)程間通信外,文件系統(tǒng),、內(nèi)存管理,、設(shè)備驅(qū)動(dòng)管理等都由內(nèi)核完成。 一般而言,,車載虛擬化操作系統(tǒng)要求具備三點(diǎn)技術(shù)要求:
1、資源分區(qū)
2,、任務(wù)調(diào)度機(jī)制 常見的操作系統(tǒng)任務(wù)調(diào)度機(jī)制有兩種:
車載虛擬化系統(tǒng)同時(shí)承載實(shí)時(shí)車控系統(tǒng)和非實(shí)時(shí)娛樂(lè)系統(tǒng),,這兩種系統(tǒng)對(duì)于任務(wù)的時(shí)間響應(yīng)要求有著本質(zhì)的不同:
車載虛擬化內(nèi)核應(yīng)該具備靈活的時(shí)間調(diào)度機(jī)制,既支持基于優(yōu)先級(jí)的任務(wù)調(diào)度方式,,又支持基于時(shí)間片的任務(wù)調(diào)度方式,。
Hypervisor在對(duì)虛擬機(jī)進(jìn)行嚴(yán)格安全隔離的同時(shí),,也需要支持不同虛擬機(jī)進(jìn)程之間以受控方式相互通信,。最基本的進(jìn)程間通信包括同步消息傳遞和共享內(nèi)存兩種方式,。
在車載虛擬化領(lǐng)域,主流的虛擬機(jī)技術(shù)提供商包括BlackBerry QNX Hypervisor(閉源)及Intel與Linux基金會(huì)主導(dǎo)的ACRN(開源),。但截至目前,,只有QNX Hypervisor應(yīng)用到量產(chǎn)車型,它也是目前市場(chǎng)上唯一被認(rèn)可功能安全等級(jí)達(dá)到ASIL D級(jí)的虛擬化操作系統(tǒng),。 BlackBerry:QNX HypervisorQNX是由加拿大QSSL公司(QNX Software System Ltd.)開發(fā)的實(shí)時(shí)操作系統(tǒng),,既能運(yùn)行于以Intel x86、Pentium等CPU為核心的硬件環(huán)境,,也能運(yùn)行于以PowerPC,、MIPS等CPU為核心的硬件環(huán)境。 小知識(shí) 2004年,,全球領(lǐng)先的音響產(chǎn)品制造商哈曼國(guó)際工業(yè)集團(tuán)(Harman International Industries)收購(gòu)QNX,,2010年4月,BlackBerry母公司RIM以2億美元從哈曼國(guó)際手中收購(gòu)QNX,。 QNX操作系統(tǒng)的應(yīng)用范圍極廣,,包括控制保時(shí)捷跑車的音樂(lè)和媒體功能、核電站,、美國(guó)陸軍無(wú)人駕駛坦克的控制系統(tǒng),、BlackBerry PlayBook平板電腦等。 2021年2月,,BlackBerry正式發(fā)布QNX Hypervisor 2.2版本,,該版本基于QNX Neutrino實(shí)時(shí)操作系統(tǒng)(RTOS)7.1。 QNX Hypervisor是基于Type-1(直接運(yùn)行于裸機(jī)),、實(shí)時(shí)優(yōu)先級(jí)的微內(nèi)核管理程序,,符合IEC 61508 SIL-3(用于工業(yè)安全),IEC 62304(用于醫(yī)療設(shè)備軟件)和ISO 26262 ASIL-D(用于汽車安全)等標(biāo)準(zhǔn),。 整個(gè)QNX操作系統(tǒng)是由微內(nèi)核調(diào)度管理的一組進(jìn)程的集合,,與硬件總線結(jié)構(gòu)非常相似,稱之為“軟件總線”,。 QNX是一個(gè)基于優(yōu)先級(jí)搶占的操作系統(tǒng),,線程優(yōu)先級(jí)用0\~255的數(shù)字表示,數(shù)字越大,,優(yōu)先級(jí)越高,。優(yōu)先級(jí)0是內(nèi)核中的IDLE線程。同時(shí),,優(yōu)先級(jí)64是一個(gè)分界嶺,,優(yōu)先級(jí)1\~63是非特權(quán)優(yōu)先級(jí),,一般用戶都可以用,而64\~255必須是有Root權(quán)限的線程才可以設(shè)置,。調(diào)度程序在選擇下一個(gè)運(yùn)行的線程時(shí),,將檢查每個(gè)處于就緒狀態(tài)的線程的優(yōu)先級(jí),具有高優(yōu)先級(jí)的線程將被優(yōu)先執(zhí)行,。 QNX基本的任務(wù)調(diào)度算法使用的是按優(yōu)先級(jí)搶占的調(diào)度方法,。這種方法保證在任何時(shí)刻都是優(yōu)先級(jí)最高的任務(wù)占用CPU時(shí)間。優(yōu)先級(jí)最高的任務(wù)可以中斷當(dāng)前運(yùn)行的任務(wù),。這種方法適用于工業(yè)實(shí)時(shí)性要求較高的場(chǎng)合,。 在基本調(diào)度算法的基礎(chǔ)上,當(dāng)兩個(gè)或更多具有相同優(yōu)先級(jí)的線程同時(shí)處于就緒狀態(tài),,并且都是當(dāng)前就緒隊(duì)列中最高優(yōu)先級(jí)的任務(wù)時(shí),,QNX提供了四種調(diào)度方法來(lái)解決問(wèn)題:
當(dāng)線程的優(yōu)先級(jí)降低到Low Priority時(shí),,它可能會(huì)被執(zhí)行,也可能不被執(zhí)行,,取決于系統(tǒng)當(dāng)時(shí)其它線程的優(yōu)先級(jí),。一旦一個(gè)Replenishment Period(T)到來(lái),該線程的優(yōu)先級(jí)立即升至Normal Priority,,這樣,,只要適當(dāng)配置系統(tǒng)中各線程的C和T,就可以使每個(gè)線程都可以在每個(gè)T內(nèi)被執(zhí)行C時(shí)間值,。 零星調(diào)度將一個(gè)線程需要執(zhí)行的時(shí)間分拆成若干段進(jìn)行執(zhí)行(這也是“零星調(diào)度”名稱的由來(lái)),,這種算法適用于一個(gè)周期內(nèi)具有執(zhí)行時(shí)間上限的線程,可以使一個(gè)線程對(duì)非周期事件進(jìn)行服務(wù),,而不用擔(dān)心影響其它硬實(shí)時(shí)線程的執(zhí)行期限,。 Intel & Linux基金會(huì):ACRNACRN由Linux基金會(huì)于2018年3月在“Linux嵌入式大會(huì)”上發(fā)布,是一款靈活,、開源的(BSD-3-Clause License),、輕量級(jí)Hypervisor參考軟件。Intel開源技術(shù)中心為ACRN項(xiàng)目的發(fā)布貢獻(xiàn)了源代碼,,早期支持者包括Intel,、ADLink(凌華科技)、Aptiv,、LG和東軟等,。 2020年6月,ACRN v2.0正式發(fā)布,,采用**“Partition Mode”+“Sharing Mode”的“**Hybrid Mode”架構(gòu)設(shè)計(jì),。
Hybrid Mode架構(gòu)具有兩個(gè)特點(diǎn):
為了保持ACRN Hypervisor代碼庫(kù)盡可能精簡(jiǎn)且高效,,大部分設(shè)備模塊的實(shí)現(xiàn)都駐留在Service VM,Service VM可以運(yùn)行Clear Linux(Intel基于GPL協(xié)議的開源項(xiàng)目),,也支持其它Linux發(fā)行版或者專有RTOS作為Service OS,。如果沒(méi)有Partition Mode中的Pre-launched VM,Service VM是ACRN Hypervisor創(chuàng)建的第一個(gè)虛擬環(huán)境,,以系統(tǒng)最高優(yōu)先級(jí)的虛擬機(jī)形式存在,,通過(guò)Device Model模塊向Guest OS提供I/O模擬操作。 ACRN Hypervisor基于Intel IA-32處理器的硬件輔助虛擬化技術(shù)(Intel VT-x),。 Intel VT-x引入了一種新的CPU操作,,稱為VMX(Virtual Machine eXtensions),以及兩種新的CPU工作模式和10條新的虛擬專用指令(VMPTRLD,、VMPTRST,、VMCLEAR、VMREAD,、VMWRITE,、VMCALL、VMLAUNCH,、VMRESUME,、VMXOFF和VMXON),。兩種工作模式分別為VMX root operation(根虛擬化操作)和VMX non-root operation(非根虛擬化操作),其中,,VMX root operation被設(shè)計(jì)用于給Hypervisor使用,,VMX non-root operation則由Guest OS使用。兩種工作模式都支持Ring 0~Ring 3,,因此,,Hypervisor和Guest OS可以自由選擇它們所期望的運(yùn)行級(jí)別。 硬件輔助虛擬化技術(shù)就是通過(guò)在VMX root operation和VMX non-root operation兩種工作模式之間相互切換實(shí)現(xiàn)的,。 運(yùn)行在VMX root operation模式下的Hypervisor通過(guò)顯式調(diào)用VMLAUNCH或VMRESUME指令切換到VMX non-root operation模式,,硬件自動(dòng)加載Guest OS的上下文,,于是Guest OS獲得運(yùn)行,,這種轉(zhuǎn)換稱為VM entry。Guest OS運(yùn)行過(guò)程中遇到需要Hypervisor處理的事件,,例如外部中斷或缺頁(yè)異常,,或者主動(dòng)調(diào)用VMCALL指令請(qǐng)求Hypervisor的服務(wù)的時(shí)候(與系統(tǒng)調(diào)用類似),硬件自動(dòng)掛起Guest OS,,切換到VMX root operation模式,,恢復(fù)Hypervisor的運(yùn)行,這種轉(zhuǎn)換稱為VM exit,。VMX root operation模式下,,軟件的行為與在沒(méi)有VT-x技術(shù)的處理器上的行為基本一致;而VMX non-root operation模式則有很大不同,,最主要的區(qū)別是此時(shí)運(yùn)行某些指令或遇到某些事件時(shí),,發(fā)生VM exit。 ACRN Device Model是一個(gè)類似QEMU的硬件設(shè)備模擬軟件,,依賴以下三個(gè)子系統(tǒng)協(xié)同工作: 1,、設(shè)備仿真(Device Emulation) Device Model為User VM中的設(shè)備驅(qū)動(dòng)提供設(shè)備仿真例程(Routines),用來(lái)模擬各種不同種類的硬件設(shè)備,,這些設(shè)備仿真例程將各自的I/O處理程序注冊(cè)到I/O調(diào)度器(Dispatcher),。當(dāng)User VM產(chǎn)生I/O設(shè)備訪問(wèn)請(qǐng)求時(shí),I/O調(diào)度器將這些請(qǐng)求分發(fā)到相應(yīng)的設(shè)備仿真例程,,實(shí)現(xiàn)硬件模擬,。 2、VHM(Virtio and Hypervisor Service Module) 以Service OS的內(nèi)核模塊形式存在,,作為ACRN Hypervisor與Device Model之間的橋梁,,為設(shè)備模擬提供必要的服務(wù),具體的服務(wù)流程如下:
3、I/O請(qǐng)求(I/O Path) 下圖展示了ACRN中訪問(wèn)一個(gè)虛擬I/O的流程,。
VirtIO標(biāo)準(zhǔn)Hypervisor介乎于底層DCU硬件和上層OS軟件之間,與標(biāo)準(zhǔn)化服務(wù)器(x86)+標(biāo)準(zhǔn)化OS(Windows和Linux)的云虛擬化應(yīng)用場(chǎng)景不同,,汽車嵌入式環(huán)境中的虛擬化技術(shù)面臨的挑戰(zhàn)是Hypervisor往往需要定制適配底層DCU硬件和上層OS軟件,,這一點(diǎn)對(duì)于Hypervisor的大規(guī)模商用與普及是一個(gè)非常大的技術(shù)障礙。 2016年3月,,OASIS(Organization for the Advancement of Structured Information Standards,,結(jié)構(gòu)化信息標(biāo)準(zhǔn)促進(jìn)組織)正式標(biāo)準(zhǔn)化VirtIO項(xiàng)目,旨在提供一種通用的框架和標(biāo)準(zhǔn)接口,,減少Hypervisor對(duì)底層不同硬件和上層不同軟件的適配開發(fā)工作量,。 目前,,VirtIO標(biāo)準(zhǔn)得到了眾多科技巨頭的支持,,包括Apple、Google,、ARM,、Intel、Red Hat,、華為等,。Google也計(jì)劃在Android Automotive OS中集成對(duì)VirtIO的支持。 VirtIO是一套易維護(hù)和易擴(kuò)展的通用設(shè)備仿真接口,,由前端驅(qū)動(dòng)程序(Front-End Driver),、后端驅(qū)動(dòng)程序(Back-End Driver)和VirtIO虛擬隊(duì)列(Virtual Queue)構(gòu)成。 前端驅(qū)動(dòng)程序由Guest OS實(shí)現(xiàn),,后端驅(qū)動(dòng)程序由Hypervisor實(shí)現(xiàn),,虛擬隊(duì)列通常使用環(huán)形緩沖,在Hypervisor和Guest OS之間傳輸數(shù)據(jù),,每個(gè)驅(qū)動(dòng)可以有0個(gè)或多個(gè)隊(duì)列,,取決于實(shí)際需要。例如,,網(wǎng)絡(luò)驅(qū)動(dòng)(virtio-net)可能使用了兩個(gè)虛擬隊(duì)列(分別用于接收和發(fā)送),,而塊存儲(chǔ)驅(qū)動(dòng)(virtio-blk)可能只需要一個(gè)。 除了網(wǎng)卡,、PCI,、塊存儲(chǔ),、控制臺(tái)、輸入等常用設(shè)備之外,,傳感器,、CAN網(wǎng)絡(luò)、媒體編解碼設(shè)備等汽車領(lǐng)域的一些特殊類型硬件,,可能是未來(lái)VirtIO標(biāo)準(zhǔn)完善的方向,。 結(jié)束語(yǔ)汽車電子電氣架構(gòu)從分布式向域集中式發(fā)展的趨勢(shì)已成定局,越來(lái)越多的功能被整合到少數(shù)幾個(gè)域控制器中,,從而出現(xiàn)了多種不同的功能復(fù)用同一個(gè)硬件平臺(tái)的需求,。 Hypervisor虛擬化為同一個(gè)硬件平臺(tái)承載多種不同類型的操作系統(tǒng)、不同時(shí)間響應(yīng)要求的業(yè)務(wù)應(yīng)用提供了關(guān)鍵的技術(shù)支撐,。借助Hypervisor虛擬化技術(shù),,既消除了硬件冗余,簡(jiǎn)化了總體設(shè)計(jì),,降低了整車重量,,又滿足了資源復(fù)用、算力共享,、安全隔離的需求,。 當(dāng)前,大多數(shù)的Hypervisor都需要與指定的底層硬件和上層Guest OS配合使用,,隨著越來(lái)越多的Hypervisor提供商和Guest OS供應(yīng)商遵循VirtIO標(biāo)準(zhǔn),,以及VirtIO標(biāo)準(zhǔn)對(duì)特定汽車硬件的虛擬化支持,Hypervisor將進(jìn)一步解耦車載軟硬件,,車載系統(tǒng)供應(yīng)商將更容易在不同的DCU硬件平臺(tái)上支撐不同的Guest OS和應(yīng)用程序,,從而真正實(shí)現(xiàn)軟件定義汽車。 作者:歐珊瑚 |
|
來(lái)自: Read_He > 《Hypervisor》