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執行的暫存器狀態,就像程序切換那樣。
往期文章
Scalable Vector Extension (SVE) 介紹
Arm Linux Young和Dirty Page的過去和現在
揭祕Arm32 Linux的User和Kernel的頁表對映
C++ atomic memory model和Arm實現方式