1. 程式人生 > >Arm虛擬化:效能和構架分析(2)

Arm虛擬化:效能和構架分析(2)

微信公眾號 mindshare思享

 

如下圖所示,Xen和KVM採用不同的方式使用arm的硬體虛擬化支援。

Xen作為type1 hypervisor設計比較容易直接使用arm構架提供的功能,直接將hypervisor運行於EL2,將VM的users pace和kernel運行於EL0/EL1.但是,現有的OS是設計執行在EL1的,所以type2的hypervisor不能很容易地直接使用現有的OS比如Linux執行在arm構架上。EL2是一個獨立的更嚴格的CPU模式,它和EL1有不同的暫存器,所以在EL2執行Linux需要對Linux進行比較多的修改,不太現實。因此KVM實際上是使用split-mode的虛擬化,KVM一部分執行在EL1,一部分執行在EL2,Host OS和VM共同執行在EL1,一小部分的需要arm硬體虛擬化支援的hypervisor功能執行在EL2。當從host切換到VM時,KVM使能EL2的虛擬化功能,當從VM切換到host時,禁止虛擬化功能,這樣允許執行在EL1的Host有完全訪問硬體的能力但同時隔離同樣可以執行在EL1的VM。因此,VM到hypervisor之間的切換需要硬體轉換到EL2,並在EL2執行一部分的KVM程式碼,然後切換到EL1繼續執行其他的在host OS裡的KVM程式碼。但是,因為host OS和VM都執行在EL1,hypervisor必須保護和恢復host和VM執行的暫存器狀態,就像程序切換那樣。

 

往期文章

Armv8-M:為IoT安全而生

Armv8-A虛擬化:效能和構架分析(1)

Scalable Vector Extension (SVE) 介紹

Spectre/Meltdown演義-專業篇(3)

Hacking arm PAN?

用DS-5除錯複雜問題

Spectre/Meltdown演義--專業篇(1)

Spectre/Meltdown演義-專業篇(2)

Armv8上不棄不離的NEON/FPU

Spectre/Meltdown演義-- 通俗篇

[免費]Armv8-A網上研討會資料

築起Linux Kernel 安全堡壘

Arm Linux Young和Dirty Page的過去和現在

Secure Element 介紹

揭祕Arm32 Linux的User和Kernel的頁表對映

Arm32 Linux SMP 啟動流程

C++ atomic memory model和Arm實現方式

Arm64 Linux Kernel KPTI (Meltdown防禦)方案解釋

淺談Trustzone技術