介紹
ACRN(發音同‘acorn’)是一款靈活的輕量級開源hypervisor參考軟體 ,由Linux基金會於2018年3月發布 。ACRN的管理模式以開放的社區為核心,以代碼貢獻作為主要目標,實現開源的管理,ACRN遵循Linux基金會的行為守則 。
軟體主要由兩大部分組成:hypervisor軟體和設備模型, ACRN支持眾多的I/O設備共享。
滿足汽車產品套用場景,其中英特爾為該項目提供了大部分的設計及代碼,ACRN具備實時性和嚴格的安全性特點,並能通過開源平台不斷最佳化功能設計。
軟體服務
ACRN以實時性和關鍵安全性為設計出發點 ,特別為精簡嵌入式開發進行最佳化。
軟體在各行業提供了一個參考設計框架,可以用來構建一個開源的嵌入式hypervisor,適用於物聯網領域 。
系統功能
輕量級/小型化
•針對資源受限設備進行最佳化;
•較少代碼(LOC):僅有大約 25K,而適用於數據中心的hypervisor通常有156K
實時性
•低延遲;
•加速的啟動時間;
•通過硬體通信提高整體回響速度;
專為嵌入式物聯網而設計
•虛擬化功能:括CPU, I/O,存儲,網路等。更多功能將在隨後發布。
•嵌入式物聯網設備支持:例如顯示卡,攝像頭,音效卡等。
•跨多個VM的豐富的I/O共享設備;豐富的I/O設備虛擬化功能,支持多個虛擬機同時訪問
可適應性
•多作業系統支持: 包括Linux 和Android等客戶機作業系統;
•適用於多個套用場景;
開源性
•可擴展的支持;
•研發和開發成本顯著節約;
•代碼透明;
•與行業領導者合作開發軟體;
•BSD自由授權;寬鬆的BSD授權許可
關鍵安全性
•關鍵業務的安全性具有優先權;
•為關鍵業務提供安全性隔離;
•項目以關鍵安全性為設計出發點;
系統版本
v0.1版本
功能更新包括:硬體支持、GVT-g、Virtio標準、設備直通、Hypervisor 配置和ACRN新工具。
硬體支持:除了Apollo LakeNUC,ACRN還支持Apollo LakeUPSquared (UP2)開發板;
GVT-g(a.k.a AcrnGT):增加了GPU共享功能,ServiceOS和User OS可以同時運行GPU工作負載。AcnrGT支持直接顯示,ServiceOS和User OS可以被分配給不同的顯示器,同時顯示輸出,顯示連線埠支持eDP和HDMI;
Virtio標準:Virtio是一個針對網卡和磁碟設備的虛擬化標準,也可以用於其他設備的虛擬化,只有Guest的設備驅動“知道”它運行在虛擬環境中,並且與hypervisor協作,SOS和UOS能共享用一個物理網卡和物理eMMC存儲設備。
設備直通:
USB控制器(包括USB2.0和3.0磁碟、鍵盤、滑鼠);
SD卡(直接在UOS中安裝、讀取和寫入);
融合安全引擎(CSE)。
Hypervisor 配置:開發者可以通過Kconfig參數配置hypervisor。
ACRN新工具:包括acrnctl、acrntrace、acrnlog、acrn-crashlog和acrnprobe。
版本還對Issue 663、Issue 667和Issue 676做了說明 。
v0.2 版本
ACRN v0.2版本功能包含:
VT-x, VT-d
基於英特爾VT-x虛擬化技術,ACRN模擬了虛擬CPU,CPU core是隔離的,簡單調度。VT-d提供硬體支持,以隔離和限制設備訪問管理設備分區的所有者。它允許將I/O設備分配給VM,並且為I/O操作提供VM的保護和隔離屬性。
PIC/IOAPIC/MSI/MSI-X/PCI/LAPIC
ACRN hypervisor支持虛擬化APIC-V/EPT/IOAPIC/LAPIC功能。
乙太網
ACRN hypervisor支持虛擬化乙太網功能。乙太網Mediator在Service OS中執行,並提供物理網路設備(乙太網、Wi-Fi等)和在Guest VM中的虛擬設備(也稱為“User OS”)中的虛擬設備之間的數據包轉發。Linux、Android和Service OS可以為常規流量(如:非AVB)共享虛擬乙太網設備。所有hypervisor的半虛擬化I/O都是使用VirtIO 規範。
存儲(eMMC)
ACRN hypervisor為Service OS和Guest OS實例支持虛擬化非易失R/W存儲,支持在Guest OS實例之間共享VM專用存儲與/或存儲。
USB (xDCI)
ACRN hypervisor支持從平台向Guest OS分配所有的USB xHCI 與/或xDCI 控制器。
USB Mediator (xHCI 和 DRD)
ACRN hypervisor支持虛擬化USB Mediator。
CSME (Intel® Converged Security and Management Engine)
在虛擬化環境中,ACRN hypervisor支持單個Linux、Android,或者 RTOS guest OS或者Service OS的CSME 。
WiFi
ACRN hypervisor支持將WiFi子系統直接分配給IVI,開啟控制WiFi作為第三方設備的車載熱點,提供第三方設備應用程式訪問車輛,並提供第三方設備對TCU訪問提供連線。
IPU (MIPI-CS2, HDMI-in)
ACRN hypervisor支持直接為Service OS或者guest OS分配IPU,而不用共享。
藍牙
ACRN hypervisor支持藍牙控制器直通到單一Guest OS(IVI)。
GPU – Preemption
GPU 搶占是一種典型的汽車套用案例,它需要系統搶占被低優先權工作負載占用的GPU資源。這樣做是為了確保實現最關鍵工作負載的性能。涉及GPU的三種不同調度程式:i915調度程式、介質GVT調度程式和i915 SOS調度程式。
GPU –通過Hyper DMA進行跨VM的顯示
界面UI共享是一種典型的汽車套用案例,它要求SOS從UOS訪問單個界面或一組界面,而不必訪問UOS的整個框架緩衝區。Hyper DMA Buffer共享擴展了Linux DMA緩衝區共享機制,從而其中一個驅動程式可以訪問另一個虛機里的另一個驅動程式的共享記憶體塊。
S3
ACRN hypervisor 支持S3功能,部分在LaaG中啟用。
VT-x, VT-d
基於英特爾VT-x虛擬化技術,ACRN模擬了虛擬CPU,CPU core是隔離的,簡單調度。VT-d提供硬體支持,以隔離和限制設備訪問管理設備分區的所有者。它允許將I/O設備分配給VM,並且為I/O操作提供VM的保護和隔離屬性。
PIC/IOAPIC/MSI/MSI-X/PCI/LAPIC
ACRN hypervisor支持虛擬化APIC-V/EPT/IOAPIC/LAPIC功能。
乙太網
ACRN hypervisor支持虛擬化乙太網功能。乙太網Mediator在Service OS中執行,並提供物理網路設備(乙太網、Wi-Fi等)和在Guest VM中的虛擬設備(也稱為“User OS”)中的虛擬設備之間的數據包轉發。Linux、Android和Service OS可以為常規流量(如:非AVB)共享虛擬乙太網設備。所有hypervisor的半虛擬化I/O都是使用VirtIO 規範。
存儲(eMMC)
ACRN hypervisor為Service OS和Guest OS實例支持虛擬化非易失R/W存儲,支持在Guest OS實例之間共享VM專用存儲與/或存儲。
USB (xDCI)
ACRN hypervisor支持從平台向Guest OS分配所有的USB xHCI 與/或xDCI 控制器。
USB Mediator (xHCI 和 DRD)
ACRN hypervisor支持虛擬化USB Mediator。
CSME (Intel® Converged Security and Management Engine)
在虛擬化環境中,ACRN hypervisor支持單個Linux、Android,或者 RTOS guest OS或者Service OS的CSME 。
WiFi
ACRN hypervisor支持將WiFi子系統直接分配給IVI,開啟控制WiFi作為第三方設備的車載熱點,提供第三方設備應用程式訪問車輛,並提供第三方設備對TCU訪問提供連線。
IPU (MIPI-CS2, HDMI-in)
ACRN hypervisor支持直接為Service OS或者guest OS分配IPU,而不用共享。
藍牙
ACRN hypervisor支持藍牙控制器直通到單一Guest OS(IVI)。
GPU – Preemption
GPU 搶占是一種典型的汽車套用案例,它需要系統搶占被低優先權工作負載占用的GPU資源。這樣做是為了確保實現最關鍵工作負載的性能。涉及GPU的三種不同調度程式:i915調度程式、介質GVT調度程式和i915 SOS調度程式。
GPU –通過Hyper DMA進行跨VM的顯示
界面UI共享是一種典型的汽車套用案例,它要求SOS從UOS訪問單個界面或一組界面,而不必訪問UOS的整個框架緩衝區。Hyper DMA Buffer共享擴展了Linux DMA緩衝區共享機制,從而其中一個驅動程式可以訪問另一個虛機里的另一個驅動程式的共享記憶體塊。
S3
ACRN hypervisor 支持S3功能,部分在LaaG中啟用。
v0.3 版本
ACRN v0.3版本功能包含:
概要 設計文檔
概要設計文檔更新了如下內容:CPU虛擬化,GPU虛擬化,記憶體管理,虛擬機管理,物理中斷,定時器管理,CPU性能狀態及電源狀態管理,S3 / S5(休眠/關機)管理,hypervisor電源管理,靜態CPU核心分區,VT-d設計,設備直接分配,設備模型,I / O仿真,Virtio支持設備,USB虛擬化,隨機設備虛擬化,ACRN跟蹤,ACRN日誌,hypervisor控制台。
CSME共享支持:Intel® Converged Security and Management Engine (Intel®融合安全和管理引擎,Intel®CSME)被用於提昇平台、作業系統和套用安全性。 ACRN提供了CSME共享能力,因此同時運行的多個guest OS映像(Linux、Android或Clear Linux作為服務作業系統)可以同時訪問在同一物理平台上的CSME及其所有組成子組件。
vHost和vHost-Net支持
為了實現upstream和性能改進,已啟用vHost框架和vHost網路,可以通過virtio_net加速guest網路連線。
vSBL增強
vSBL模組進行了多處更新,例如,在vSBL調試版本中支持Guest OS崩潰模式,以及支持ACPI定製。vSBL可以通過超級調用獲取RPMB密鑰並傳遞給boot loader。
xD支持
該平台支持所有虛擬化作業系統的執行禁用(xD)。
中斷風暴緩解
此特性是為了降低設備中斷風暴的風險。
ACRN編譯器和連結器增強
已在編譯器和連結器中啟用設定和標記以硬化ACRN軟體,包括堆疊執行保護、數據重定位和保護(RELRO)、基於堆疊的緩衝區溢出檢測、位置無關執行(PIE)、fortify源、格式化字元串漏洞。
命名 約定
MISRA-C規定了標識符命名要求,ISO 26262強烈建議對任何安全級別的產品都採用命名約定。此版本致力於滿足這些要求。
代碼 重組
幾個模組的代碼已被清理並重組,以實現upstream友好。例如,更新了VM loader,以避免在將信息從設備模型傳遞至guest時涉及hypervisor;通過引用x86 SDM修改了記憶體管理單元(MMU)代碼;通過用strsep函式取代strtok函式及檢查snprintf返回值重組了控制反轉(IOC)中介;以及通過刪除virtio_console中未使用的virtio_console_cfgwrite更新了Virtio代碼 。
v0.4 版本
ACRN v0.4版本功能包含:
文檔更新
ACRN v0.4安裝使用的指南做出了更新,操作過程中可避免“黑屏”等問題;在“如何使用Ubuntu作為SOS”的教程也做出更新 。
新功能特性
ACRN v0.4還增加“wbinvd”模擬,腳本“launch_uos.sh”默認指向是最新的iot-lts2018核心,安裝操作得到簡化 。
v0.5 版本
ACRN v0.5版本功能包含:
支持OVMF功能的部分代碼已合併到ACRN:v0.5版本為了是ACRN能夠支持Windows作業系統作為虛擬機,ACRN必須能夠先支持開源虛擬機固件(OVMF)。v0.5版本 ACRN代碼里加入了能支持OVMF的代碼從而來支持Windows啟動。註:完整的OVMF功能支持還在開發中,未來還會有更多的相關代碼被加入ACRN和OVMF模組。
UP2 開發板串口的支持:本次發布可以支持在UP2開發板上通過串口調試SOS和UOS的啟動過程。
一個端對端的 image 可以支持所有UEFI平台:ANRN支持ApolloLake(APL)和Kaby Lake (KBL)NUC系列。與其為APLNUC和KBL NUC提供兩個獨立的image,v0.5版本統一了image,即一個端到端image就可以支持所有的UEFI平台。因此ACRN的啟動過程增加了一個引導參數可以進行平台選擇。詳情請參考ACRNGSG手冊。
APL UP2開發板上SBL固件的支持:V0.5版本發布之後,ACRN現已開放使用SlimBootloader(SBL)固件支持APL UP2開發板。SlimBootloader是一款輕型的開源引導裝載程式,其關鍵優點是速度快、占用空間小、可定製、安全性強。v0.5版本的ACRN端到端版本包含ACRN,Clear Linux(SOS)和Clear Linux(UOS),已在UP2/SBL的開發板上被檢驗過。具體步驟可參考UP2開發板的使用手冊。
文檔更新:Skylake NUC上的GPU直通方案的實現;設備模型參數介紹。
v0.6 版本
ACRN v0.6版本功能包含:
ACRN開始支持實時作業系統作為Guest OS:初期版本的patch已經加入ACRN的代碼庫,使ACRN有能力開始支持實時作業系統。
另外以PREEMPT_RT Linux作為參考RT Guest OS,還發布了一個使用手冊, 更多的patch將在隨後版本中發布。
文檔更新
•Automotive Grade Linux做為VM運行
•實時UOS中採用PREEMPT_RT-Linux
•常見問題
•ACRN中的Trusty和安全服務介紹
•一篇關於移植ClearLinux/ACRN到支持Yocto/ACRN的wiki文章
•ACRN宣傳頁(英文及中文)
v0.7版本
•ACRN v0.7版本功能包含:
•使用CAT啟用快取QOS
•
•在Apollo Lake(APL)平台上可以運行快取分配技術(CAT),虛擬機之間的快取隔離主要用於實時性能服務質量(QoS)。特定虛擬機的CAT通常在啟動時,根據構建時確定的虛擬機配置進行設定。對於調試和性能調整,還可以在運行時,通過ACRN shell使用wrmsr命令將適當的值寫入某些MSR來啟用和配置CAT。
•支持ACPI電源鍵虛擬化
•
•ACRN支持IntelAPL和KBL NUC平台上的ACPI 電源鍵,按照ACPI標準來觸發S3或S5流程。
•文檔更新
•
•此版本中添加了一些新內容,包括:
•ACRN藍圖:展望2019;
•VBS-k框架的性能分析;
•IOC虛擬化的HLD設計文檔;
•其它項目編碼指南;