虛擬化介紹

討論的是計算機領域的虛擬化,我們這樣定義虛擬化「虛擬化是將單一物理設備模擬為相互隔離的多個虛擬設備,同時保證這些虛擬設備的高效性」。這個概念的定義裏還包含了對虛擬化的要求,也就是這裡的隔離性(isolated)和有效性(efficient)。我們常說的hypervisor,有些書也把它稱為VMM(virtual machine monitor)則是一個直接運行在物理硬體上的軟體,它的功能就是管理物理硬體,以便在不同的虛擬機之間共享這些物理資源(cpu,內存,外設等等),既然hypervisor直接給物理外設打交道,那它當然需要運行在特權模式了,在過去沒有virtualization extesion的情況下,guest os和guest application只能都運行在de-privileged模式。

虛擬化的種類

Type-0 Hardware virtualization 硬體虛擬化

最複雜的虛擬化實現技術。可以在宿主系統上創建一個硬體VM 來模擬所想要的硬體。每條指令都必須在底層硬體上進行模擬,因此速度會減慢100 倍甚至1000 倍。但優點是可以在一個ARM 處理器主機上運行為模擬系統 設計的操作系統,而不需要任何修改。 主要應用在硬體開發。

完全虛擬化

Pure virtualization(完全虛擬化):完全虛擬化要求硬體架構是可虛擬化的(符合經典可虛擬化模型),當trap進入hypervisor後,由hypervisor去模擬敏感指令的執行,這項技術也被稱為trap-and-emulate。當一個guest os想要去訪問特權資源(物理外設),就會產生一個trap喚醒hypervisor,hypervisor去模擬這個訪問,然後返回到guest os的下一條指令去繼續執行。可以看出,每一條特權指令都需要很多條指令去模擬,對系統性能有些影響。

  • Type-1 hypervisors直接運行在硬體系統之上,控制和管理硬體系統和客戶操作系統。
  • Type-2 hypervisors運行在一個傳統的操作系統之上想計算機的一個程序

Type-1 hypervisors Type-2 hypervisors

Paravirtualization 半虛擬化

半虛擬化。是另外一種流行的虛擬化技術,它與完全虛擬化有一些類似。這種方法使用了一個hypervisor 來實現對底層硬體的共享訪問,還將與虛擬化有關的代碼集成到了操作系統本身中。這種方法不再需要重新編譯或捕獲特權指令,因為操作系統本身在虛擬化進程中會相互緊密協作 。半虛擬化技術需要為hypervisor 修改客戶操作系統,這是它的一個缺點。但是半虛擬化提供了與未經虛擬化的系統相接近的性能,對系統性能和guest os都有影響。

ARM處理器模式和TrustZone

ARM v7包含8種處理器模式(在v8已經變成4種exception level了,從EL0到El3),其中包含1種非特權模式和7種特權模式:

  • 特權模式(privileged):FIQ、IRQ、supervisor、monitor、abort、undefined、system;
  • 非特權模式(de-privileged):user。

顯然,除了應用程序運行在user模式以外,其他全部運行在特權模式。ARM的virtualization extension需要處理器支持TrustZone extension,我們來看一下TrustZone是什麼。TrustZone將處理器的執行狀態分為兩個世界:

· secure world:用於運行可信軟體;

· non-secure world:用於運行不可信軟體。

這裡的兩個世界和處理器模式是重疊的,軟體可以在任何模式、任何世界上運行。那麼secure world和non-secure world的區別在哪呢?這裡的secure又從何而來?是這樣的,secure world有自己獨有的內存和外設,這部分內容只有運行在secure world的軟體可以訪問,運行在non-secure world的軟體是不可以訪問的。這裡引入了一個新的處理器模式,monitor mode,它運行在secure world,被用於做雙系統(secure and non-secure world)之間的切換,如下圖所示。

我們可以基於TrustZone去做虛擬化,因為它能夠隔離內存、中斷並且確保non-secure world的特權軟體也不可能訪問或者修改運行在secure world的軟體的配置信息。然後這樣做的缺陷是,在non-secure world只能運行一個guest os,在secure world運行一個hypervisor。Green Hill的INTEGRITY就是這樣做的,感興趣的讀者可以去Google一下。

標準的ARM架構是不符合可虛擬化模型的,有很多敏感指令在非特權模式下執行卻不會產生trap。比如CPS指令,這條指令的作用是改變處理器狀態,當這條指令在用戶態執行時不會產生trap,甚至沒有任何效果,可以認為是簡單的跳過。即使所有的敏感指令都會產生trap,在ARM架構上用上述的trap-and-emulate技術也是很困難的,因為ARM的敏感指令非常多,只要和特權資源交互的指令都是敏感指令,比如虛擬內存子系統,中斷控制子系統和協處理器,用上述方式的話開銷太大,對系統性能有很大衝擊。比如,arm-v7架構不支持頁表訪問的虛擬化,那麼就需要影子頁表,每次訪問guest pa都需要trap,同樣地,中斷控制器也需要被模擬,當中斷很頻繁的時候(timer tick),這種模擬的開銷也是非常大的,為了克服這種種弊端,ARM推出了virtualization extension就是arm-V8。ARM-v8(當前只有A系列,即ARMv8-A)架構,是ARM公司為滿足新需求而重新設計的一個架構,是近20年來,ARM架構變動最大的一次。它引入的Execution State、Exception Level、Security State等新特性,已經和我們對舊的ARM架構的認知,有很大差距了。

ARM虛擬化和Intel虛擬化技術的對比如下圖所示。

目前市面上主流晶元的介紹

域控制器晶元功率基本都在十幾瓦左右,CPU主要是ARM A53/A72、Intel、高通、Nvidia等自由行的CPU架構,這些GPU在主頻和系統性能上各有千秋,但在GPU領域主要有IMR、TBR以及TBDR等三種主流架構,選IMR等CPU都比較燙,散熱難處理,選TBR都需要對3D建模要優化,不然散熱也比較麻煩,選TBDR對好像會好些。恩智浦i.mx系列、Nvidia Tegra的GPU都是使用 IMR架構,後來Nvidia的Maxwell和pascal將GPU的架構改為TBR架構,能力提升的同時功耗下降。高通820/855使用自己的GPU Adreno外加DSP,瑞薩Rcar-H3使用imagination PowerVR GX6650,GPU使用TBDR架構,Intel Apollo lake 和Nvidia使用自己研究的GPU,恩智浦的I.MX8使用 Vivante GC7000系列,CPU架構是IMR架構類型,下面是目前市面幾款晶元的性能比較。


推薦閱讀:
相關文章