網(wǎng)站性能檢測(cè)評(píng)分
注:本網(wǎng)站頁(yè)面html檢測(cè)工具掃描網(wǎng)站中存在的基本問(wèn)題,僅供參考。
模擬程序
如何利用虛擬化技術(shù)解決物聯(lián)網(wǎng)開(kāi)發(fā)難題?從了解ACRN開(kāi)始(上 ) 營(yíng)銷視頻課程
物聯(lián)網(wǎng)市場(chǎng)的應(yīng)用場(chǎng)景日益復(fù)雜,越來(lái)越多的上網(wǎng)設(shè)備需要支持更多的硬件資源、操作系統(tǒng)、軟件工具及應(yīng)用程序,現(xiàn)有的解決方案顯然無(wú)法為數(shù)量龐大的物聯(lián)網(wǎng)設(shè)備提供相應(yīng)的靈活性,這使開(kāi)發(fā)者們面臨巨大的設(shè)計(jì)壓力。虛擬化技術(shù)是解決這些問(wèn)題的關(guān)鍵。不過(guò),現(xiàn)有的虛擬化解決方案并不能滿足物聯(lián)網(wǎng)開(kāi)發(fā)的輕量級(jí)和靈活性的特殊要求。為了滿足當(dāng)前物聯(lián)網(wǎng)市場(chǎng)的發(fā)展趨勢(shì),Linux基金會(huì)推出了開(kāi)源項(xiàng)目---ACRN,ACRN到底具有哪些強(qiáng)大的功能,它又是怎么實(shí)現(xiàn)的?今天我們就從架構(gòu)到應(yīng)用對(duì)ACRN進(jìn)行詳細(xì)分析,讓開(kāi)發(fā)者們快速上手使用ACRN進(jìn)行產(chǎn)品設(shè)計(jì)。ACRN是一個(gè)專為嵌入式設(shè)備設(shè)計(jì)的hypervisor,包括如下兩部分:一套hypervisor的參考軟件和架構(gòu),通過(guò)虛擬機(jī)監(jiān)視器(VirtualMachineManager)可以在同一個(gè)物理硬件上安全地同時(shí)運(yùn)行多個(gè)操作系統(tǒng)。另外,它還為設(shè)備虛擬化模擬定義了一套參考設(shè)計(jì)框架,稱為“ACRN設(shè)備模型”。ACRNhypervisor是一個(gè)Type-I的hypervisor,可以直接運(yùn)行在物理硬件上,適用于各種物聯(lián)網(wǎng)和嵌入式設(shè)備解決方案。ACRNhypervisor解決了當(dāng)前數(shù)據(jù)中心hypervisor和partitioninghypervisor之間存在的差距。ACRNhypervisor設(shè)計(jì)時(shí)把系統(tǒng)分為不同的功能域,并為物聯(lián)網(wǎng)和嵌入式設(shè)備精心挑選的用戶操作系統(tǒng)進(jìn)行共享優(yōu)化。汽車應(yīng)用案例ACRNhypervisor的一個(gè)有趣的案例是用于汽車場(chǎng)景。ACRNhypervisor可以用于構(gòu)建軟件定義駕駛艙(SDC)或者車載娛樂(lè)系統(tǒng)(IVE)。作為參考實(shí)現(xiàn),ACRN可以為嵌入式hypervisor廠商的解決方案提供一個(gè)很好的基礎(chǔ),以及一套I/O設(shè)備虛擬化的參考設(shè)計(jì)。在這種場(chǎng)景下,汽車SDC系統(tǒng)由儀表盤(IC)系統(tǒng)、車載信息娛樂(lè)系統(tǒng)(IVI)和一個(gè)或多個(gè)后座娛樂(lè)系統(tǒng)(RSE)組成。為了整體系統(tǒng)安全性考慮,每個(gè)系統(tǒng)都作為獨(dú)立的虛擬機(jī)運(yùn)行。儀表盤系統(tǒng)(IC)用于顯示和駕駛員相關(guān)的車輛的駕駛操作信息,如:?汽車的速度、燃油、行駛里程和其它駕駛信息;?投影在擋風(fēng)玻璃上的抬頭顯示,用以警告缺油或胎壓報(bào)警;?顯示后視攝像頭影像和車身的周邊攝像頭信息,用于輔助停車;車載娛樂(lè)系統(tǒng)(IVI)的功能包括:?導(dǎo)航系統(tǒng)、收音機(jī)和其它娛樂(lè)系統(tǒng);?連接到移動(dòng)設(shè)備,可以打電話,播放音樂(lè)或者通過(guò)語(yǔ)音識(shí)別來(lái)控制應(yīng)用程序;?通過(guò)手勢(shì)識(shí)別或觸控進(jìn)行交互;后座娛樂(lè)系統(tǒng)(RSE)可以運(yùn)行:?娛樂(lè)系統(tǒng);?虛擬辦公;?連接到前排座椅的IVI系統(tǒng)和移動(dòng)設(shè)備(云連接);?連接到移動(dòng)設(shè)備,可以打電話,播放音樂(lè)或者通過(guò)語(yǔ)音識(shí)別來(lái)控制應(yīng)用程序;?通過(guò)手勢(shì)識(shí)別或觸控進(jìn)行交互;ACRNhypervisor可以支持Linux*和Android*虛擬機(jī)作為用戶操作系統(tǒng)(UOS),UOS由ACRNhypervisor進(jìn)行管理。開(kāi)發(fā)者和OEM廠商可以在ACRNhypervisor之上運(yùn)行自己的虛擬機(jī),以及IC、IVI和RSEVM。ServiceOS是作為VM0運(yùn)行(在Xen*hypervisor中被稱為Dom0,在KVM*hypervisor中被稱為HostOS),UserOS用戶操作系統(tǒng)作為VM1運(yùn)行(也被稱為DomU)。注:Android*虛擬機(jī)的支持將在未來(lái)版本發(fā)布。圖1顯示了一個(gè)使用ACRNhypervisor的實(shí)例框圖。圖1:SOS和UOS運(yùn)行在ACRNhypervisor之上從ACRNhypervisor的架構(gòu)圖中可以看到:?ACRNhypervisor直接位于bootloader之上,因而具備快速啟動(dòng)的能力;?部分資源進(jìn)行partitioning,以確保安全關(guān)鍵性應(yīng)用和非安全關(guān)鍵業(yè)務(wù)可以共存在同一平臺(tái)上;?豐富的I/O設(shè)備虛擬化提供在多個(gè)VM之間的I/O設(shè)備共享,從而提供全面的用戶體驗(yàn);?通過(guò)高效的虛擬化,一個(gè)SoC可以支持多個(gè)操作系統(tǒng)同時(shí)運(yùn)行;圖1中的黃色部分是ACRN項(xiàng)目的軟件棧。該架構(gòu)框圖中列出的某些功能還沒(méi)有完全實(shí)現(xiàn),歡迎社區(qū)共同參與開(kāi)發(fā)實(shí)現(xiàn)。另外,圖中的其他模塊來(lái)自于別的開(kāi)源項(xiàng)目,這里僅供參考。例如,ServiceOS和GuestLinux來(lái)源于https://clearlinux.org上的ClearLinux項(xiàng)目,而未來(lái)GuestAndroid的支持將會(huì)來(lái)自https://01.org/android-ia項(xiàng)目。當(dāng)前ACRN所支持的功能列表,請(qǐng)參照發(fā)布說(shuō)明。許可證ACRNhypervisor和ACRNDeviceModel軟件采用的都是自由許可證的BSD-3-Clause,它允許以“源代碼和二進(jìn)制再次發(fā)布和使用,無(wú)論是否進(jìn)行了修改”,許可證中也注明了完整版權(quán)聲明和免責(zé)聲明。ACRNDeviceModel,ServiceOS,andUserOS為了使ACRNhypervisor代碼盡可能精悍且高效,用于實(shí)現(xiàn)I/O設(shè)備共享的devicemodel代碼運(yùn)行在ServiceOS中而非ACRNHypervisor。哪些I/O設(shè)備被共享以及其實(shí)現(xiàn)細(xì)節(jié)將在下面的pass-through章節(jié)具體介紹。ServiceOS在所有虛擬機(jī)里,以最高優(yōu)先權(quán)運(yùn)行,以滿足那些對(duì)時(shí)間響應(yīng)要求很高的需求和系統(tǒng)服務(wù)質(zhì)量的需求(QoS)。具體到ServiceOS中的任務(wù)(task),他們的優(yōu)先級(jí)則有高有低。例如響應(yīng)UserOS請(qǐng)求的回調(diào)函數(shù),其運(yùn)行在ServiceOS的軟件(或者mediator)就會(huì)繼承UserOS的優(yōu)先級(jí)。另外,在ServiceOS中還有一些在后臺(tái)運(yùn)行的任務(wù)也是低優(yōu)先級(jí)。在上述的車載系統(tǒng)示例中,UserOS是駕駛控制和車內(nèi)娛樂(lè)的中心樞紐。它能提供收音機(jī)和各種娛樂(lè)選項(xiàng)、車內(nèi)空調(diào)和通風(fēng)控制、車輛導(dǎo)航顯示等支持。它可以讓第三方設(shè)備使用USB、藍(lán)牙或者WiFi等連接技術(shù)與車載系統(tǒng)進(jìn)行交互,例如:AndroidAuto* 或者 AppleCarPlay*, 還能提供許多其它功能。啟動(dòng)步驟在圖2中,我們展示了在一個(gè)采用英特爾架構(gòu)平臺(tái)的NUC上使用UEFI驗(yàn)證啟動(dòng)的步驟。Figure2ACRNHypervisorBootFlow啟動(dòng)引導(dǎo)順序執(zhí)行如下:1UEFI驗(yàn)證和啟動(dòng)ACRNhypervisor和ServiceOS的引導(dǎo)加載程序;2UFEI(或ServiceOS的引導(dǎo)加載程序)驗(yàn)證并啟動(dòng)ServiceOS內(nèi)核;3ServiceOS的內(nèi)核通過(guò)dm-verity驗(yàn)證并且加載ACRNDeviceModel和虛擬引導(dǎo)加載程序;4 虛擬引導(dǎo)加載程序啟動(dòng)用戶端的驗(yàn)證啟動(dòng)進(jìn)程;ACRNHypervisor架構(gòu)ACRNhypervisor是Type1的虛擬機(jī)管理程序,能夠直接運(yùn)行在硬件系統(tǒng)上。它是一個(gè)混合的VMM架構(gòu),采用一個(gè)運(yùn)行在特權(quán)級(jí)的ServiceOS來(lái)管理和協(xié)調(diào)I/O設(shè)備的使用。它能支持多個(gè)用戶虛擬機(jī),其中每個(gè)虛擬機(jī)都可以運(yùn)行Linux或者安卓操作系統(tǒng)作為用戶操作系統(tǒng)。在虛擬機(jī)內(nèi)運(yùn)行的操作系統(tǒng)是與其它虛擬機(jī)內(nèi)的系統(tǒng)或應(yīng)用程序相互隔離的,從而縮小了潛在的被攻擊可能性,最大限度地減小安全隱患。當(dāng)然由于系統(tǒng)運(yùn)行在虛擬機(jī)內(nèi)也可能會(huì)給其應(yīng)用程序的運(yùn)行帶來(lái)額外的延遲。圖3顯示了ACRNhypervisor、車載系統(tǒng)中的InstrumentalCluster(IC)VM和ServiceVM一起協(xié)同工作的架構(gòu)圖。ServiceOS(SOS)負(fù)責(zé)包括平臺(tái)設(shè)備在內(nèi)的大部分設(shè)備的管理,并提供I/O的協(xié)調(diào)功能。某些PCIe設(shè)備可以通過(guò)VM配置直通給UserOS使用。IC應(yīng)用程序和虛擬機(jī)特定的應(yīng)用程序都運(yùn)行在SOS中,例如:ACRNdevicemodel和ACRNVM管理器。ACRNhypervisor內(nèi)還有ACRN虛機(jī)管理器,用來(lái)收集UserOS的運(yùn)行信息,并控制用戶虛擬機(jī)的開(kāi)始、停止和暫停,還能暫?;蛘呋謴?fù)執(zhí)行單個(gè)虛擬CPU。圖3ACRNHypervisor 架構(gòu)圖ACRNhypervisor采用了英特爾虛擬化技術(shù)(IntelVT),其運(yùn)行在虛擬機(jī)擴(kuò)展模式(VMX)的root模式下,也稱為主機(jī)模式或VMM模式。其他所有的用戶虛擬機(jī)包括UOS和SOS都運(yùn)行在VMXnon-root模式或guest模式下。(以下為了簡(jiǎn)略,我們將繼續(xù)使用術(shù)語(yǔ)VMM模式和guest模式)。VMM模式下有4種權(quán)限的ring模式,但ACRNhypervisor僅在ring0的特權(quán)模式下運(yùn)行,其余ring1-3并未使用。運(yùn)行在guest模式下的用戶系統(tǒng)(包括SOS和UOS)也有自己的4個(gè)ring模式(ring0-3)。用戶系統(tǒng)的內(nèi)核運(yùn)行在guest模式下的ring0,而用戶系統(tǒng)的應(yīng)用程序則在guest模式下運(yùn)行于ring3(ring1和ring2一般不被商業(yè)操作系統(tǒng)所使用)。圖4VMX 簡(jiǎn)介 如圖4所示,VMM模式和guest模式通過(guò)VMExit和VMEntry進(jìn)行切換。當(dāng)引導(dǎo)加載程序?qū)⒖刂茩?quán)交給ACRNhypervisor時(shí),處理器還未啟動(dòng)VMX模式。ACRNhypervisor首先需要通過(guò)VMXON指令啟用VMX模式。啟用VMX后,處理器處于VMM模式,它可以通過(guò)VMresume指令進(jìn)入guest模式(或者通過(guò)第一次VMlaunch指令),然后可以通過(guò)處理器的VMexit事件回到VMM模式。一般處理器會(huì)在響應(yīng)某些指令和事件時(shí)發(fā)生VMexit。在guest模式下,處理器的執(zhí)行是由一個(gè)虛擬機(jī)控制結(jié)構(gòu)(VMCS)所控制的。VMCS包含了虛機(jī)狀態(tài)(在VMEntry時(shí)加載并在VMExit時(shí)保存),主機(jī)狀態(tài)(在VMexit時(shí)加載),以及虛機(jī)的控制執(zhí)行。ACRNhypervisor為每個(gè)虛擬CPU創(chuàng)建了一個(gè)VMCS數(shù)據(jù)結(jié)構(gòu),并使用該VMCS來(lái)控制運(yùn)行在guest模式下處理器的行為。當(dāng)虛機(jī)執(zhí)行到一個(gè)敏感指令時(shí),就會(huì)觸發(fā)一次定義在VMCS配置中的VMexit事件。當(dāng)VMexit發(fā)生后,系統(tǒng)的控制權(quán)就交給了ACRNhypervisor。ACRNhypervisor會(huì)模擬虛機(jī)的指令(如果VMexit的原因是由于指令權(quán)限問(wèn)題),然后恢復(fù)虛機(jī)繼續(xù)執(zhí)行它的下一條指令,或者根據(jù)VMexit的原因進(jìn)行相關(guān)處理(例如,一個(gè)虛機(jī)的存儲(chǔ)頁(yè)面需要建立映射關(guān)系),然后恢復(fù)虛機(jī)重新執(zhí)行該條指令。需要注意的是用于VMM模式的地址空間和用于guest模式的地址空間是不同的。guest模式和VMM模式下使用不同的內(nèi)存映射表,因此虛機(jī)是無(wú)法訪問(wèn)ACRNhypervisor的。ACRNhypervisor使用EPT來(lái)映射虛機(jī)地址,虛機(jī)頁(yè)表會(huì)將虛機(jī)的線性地址映射到虛機(jī)的物理地址, EPT表則將虛機(jī)的物理地址映射到機(jī)器物理地址或主機(jī)物理地址(HPA)。ACRNDeviceModelArchitecture因?yàn)橄到y(tǒng)設(shè)備可能需要在不同的虛機(jī)之間被共享,虛機(jī)內(nèi)應(yīng)用程序(和操作系統(tǒng))要對(duì)這些共享設(shè)備進(jìn)行訪問(wèn)就需要借助設(shè)備模擬。一般來(lái)說(shuō),設(shè)備模擬有三種架構(gòu):·第一種架構(gòu)被稱為hypervisor中的設(shè)備模擬,這是在VMware*工作站產(chǎn)品(一個(gè)基于操作系統(tǒng)的hypervisor)中實(shí)現(xiàn)的設(shè)備模擬方式。在這種方式中,hypervisor負(fù)責(zé)模擬需要在各個(gè)虛機(jī)操作系統(tǒng)之間共享的常見(jiàn)設(shè)備,其中包括:虛擬磁盤、虛擬網(wǎng)絡(luò)適配器和其它必要的平臺(tái)資源。·第二種架構(gòu)稱為用戶空間的設(shè)備模擬。顧名思義,不是將設(shè)備模擬的實(shí)現(xiàn)嵌入到hypervisor中,而是將其放在一個(gè)用戶空間的應(yīng)用程序中實(shí)現(xiàn)。比如被各種獨(dú)立的hypervisor所使用的QEMU就提供了此類的設(shè)備模擬方式。這種架構(gòu)的優(yōu)勢(shì)在于設(shè)備模擬的實(shí)現(xiàn)不依賴于hypervisor,所以其它hypervisor可以重用改實(shí)現(xiàn)。甚至它還可以做任意設(shè)備的模擬,而不必?fù)?dān)心其功能的實(shí)現(xiàn)會(huì)影響hypervisor(其在特權(quán)模式下運(yùn)行)。·第三種架構(gòu)則是從基于hypervisor的設(shè)備模擬改變而來(lái)的半虛擬化驅(qū)動(dòng)程序。該架構(gòu)一開(kāi)始是在XEN項(xiàng)目中引入的,其中hypervisor提供物理設(shè)備驅(qū)動(dòng),每個(gè)虛機(jī)操作系統(tǒng)則需要安裝一個(gè)與能與物理驅(qū)動(dòng)配合使用的hypervisor感知的驅(qū)動(dòng)程序。在以上討論的設(shè)備模擬架構(gòu)中,共享設(shè)備都需要付出代價(jià)。因?yàn)椴还茉O(shè)備模擬是在hypervisor中,還是在每個(gè)虛機(jī)內(nèi)的用戶空間中,都存在相應(yīng)的系統(tǒng)開(kāi)銷。不過(guò)只要系統(tǒng)設(shè)備需要被多個(gè)虛機(jī)操作系統(tǒng)共享,這種開(kāi)銷就是值得的。反之如果設(shè)備不需要被共享,那么就可以使用更有效的方法來(lái)訪問(wèn)設(shè)備,例如使用“直通”。看完以上的分析,你是否對(duì)ACRN有了更深入的了解?也是否有更多問(wèn)題急需解答?不用著急,我們將在下期中繼續(xù)講解各種技術(shù)細(xì)節(jié),例如ACRN設(shè)備模塊架構(gòu)、設(shè)備passthrough, ACRNI/Omediator,Virtio框架結(jié)構(gòu)等一一為你展示。