硬件和軟件對虛擬化的支持

構建虛擬機的體系結構要求 – 定理

嚴格虛擬化的Popek和Golberg準則
1、平等
虛擬機上的應用程序應該跟直接運行在計算機硬件上相同

2、安全
vmm必須是由硬件所控制的,不可以被運行的虛擬機所中斷,虛擬機和計算機硬件是隔離的,並像是和在不同機器上運行一樣。另外,虛擬機之間是隔離的,

3、效率
虛擬化環境下最壞的情況要比直接運行在硬件上差一點點。

未有體系結構支持的虛擬化

VMware

在1999年的時候,VMware就推出了第一代VMware Workstation,它也是第一個運行在32位x86上的vmm。VMware工作站將虛擬機的Popek和Goldberg的三個核心屬性改編爲基於x86的目標平臺,如下所示:
1、平等性
x86-32架構有17條虛擬化敏感的非特權指令,這違反了嚴格虛擬化的Popek和Golberg標準。這就排除 了 傳統陷入模擬虛擬化.的方法。事實上,英特爾公司的工程師們確信他們的處理器在任何實際意義上都不可能被虛擬化。VMware的解決方案將直接執行(在可能的情況下使用,特別是在運行應用程序時)與動態二進制轉換(在需要的情況下,特別是在運行客戶操作時)結合在一起。

虛擬化技術

半虛擬化 – guest os can perceive itself as a virtual machine
全虛擬化 – guest os

VT-X 下的cpu虛擬化 – 硬件支持全虛擬化

VT-X的設計要求

Intel虛擬化技術的一個核心設計目標是消除對CPU半虛擬化和二進制轉換技術的需求,從而支持VMMs的實現,使其能夠支持廣泛的未修改的來賓操作系統,同時保持高水平的性能。
在設計vr -x時,英特爾的核心設計目標是完全滿足Popek和Goldberg定理的要求,明確的目標是運行在基於vr -x的虛擬機監控程序上的虛擬機滿足以下三個核心屬性:等價性、安全性和性能。
等價性:Intel的架構師將VT-x設計爲在虛擬硬件和底層硬件之間提供絕對的架構兼容性,進而與傳統的x86-32和x86-64 ISA向後兼容。這比VMware Workstation雄心勃勃得多,VMware工作站實際上專注於一組定義良好的客戶操作系統,以及Xen等半虛擬化方法,後者需要對內核進行修改,實際上只應用於開源操作系統。
安全性:基於動態二進制轉換或半虛擬化的前虛擬機監控程序提供了安全性和隔離,但其推理涉及必須在軟件中維護的複雜不變量,例如正確使用分段進行保護。通過專門爲虛擬化設計的體系結構支持,一個簡化得多的虛擬機監控程序可以提供相同的特性,但代碼基數要小得多。這減少了虛擬機監控程序上的潛在攻擊面和軟件漏洞風險。
性能:具有諷刺意味的是,在現有的最先進的虛擬化技術之上提高性能並不是第一代虛擬化硬件支持的發佈目標。
相反,一開始的目標僅僅是建立適當的體系結構,以及在體系結構和微觀體系結構級別進行改進的路線圖。實際上,具有虛擬化硬件支持的第一代處理器無法與使用DBT[3]的先進解決方案競爭。

VT-X 爲了解決什麼問題?
VT-X 引入的新的運行模式
VT-X 下虛擬機退出和切換的過程

vm 切換過程
1、將vcpu的所有狀態保存在內存中
2、然後KVM基於虛擬機執行一級分派。exit_reason,對每個退出原因使用不同的處理程序(arch/x86/kvm/vmx.c中的handler_)。大多數處理程序都很簡單
3、接下來進行通用處理或是依據VMCS字段來確定要執行的必要模擬步驟
通用的處理步驟:
①從客戶虛擬內存(%cs:%eip)獲取指令。首先,虛擬地址必須轉換爲線性地址,然後轉換爲客人物理地址,最後從內存中提取
②解碼指令,提取其操作符和操作數。CISC的性質和x86-64指令的可變長度使得這個過程非常重要
③驗證指令是否可以執行給定的虛擬CPU的當前狀態,例如,特權指令只能在虛擬CPU爲cpl0時執行
④從內存中讀取任何內存讀操作數,就像x86 CISC體系結構中的常見情況一樣,使用與指令提取相同的虛擬到線性到客戶物理的重定位步驟
⑤模擬解碼指令,可以是x86體系結構中定義的任何指令。每個指令操作碼都是通過它自己專用的仿真例程(源文件中的em_
)來模擬的。
⑥將任何內存寫操作數寫回客戶虛擬機;和
⑦根據需要更新客戶註冊表和指令指針

顯然,這些步驟是複雜的、昂貴的,並且充滿了極端情況和可能的異常條件。圖4.3進一步展示了複雜性,因爲每個階段都包含一個可能的異常情況,其中trap-and-仿真邏輯推斷客戶指令不能成功執行,而應該在客戶虛擬CPU中生成一個錯誤,例如一個虛擬的#GP、#PF或#UD。此外,在一些罕見的情況下,指令模擬步驟可能導致實際硬件出現故障,比如除以0時。是否在圖中以紅色顯示,導致了額外的複雜性

vm退出的原因
kvm中處理一個vmexit

kvm如何處理一個vmexit

kvm – 一個VT-X下的管理程序

具有擴展頁表的MMU虛擬化。

在內存管理單元中沒有任何體系結構支持的情況下,管理程序依賴影子分頁來虛擬化內存。在影子分頁中,hypervisor管理一組將虛擬內存映射到主機物理內存的頁表(有關VMware實現的描述,請參閱3.2.5)。在軟件中實現的影子分頁可以說是管理程序中最複雜的子系統。它依賴內存跟蹤來跟蹤內存中頁表結構的變化。影子分頁還嚴重依賴啓發式來確定應該跟蹤哪些頁面,因爲頁表可以位於物理內存中的任何位置,並且可以由客戶操作系統自行分配和重新分配。此外,VT-x的引入對陰影分頁的性能有負面影響(參見4.2.3)。
擴展頁表爲MMU虛擬化提供了體系結構支持。
擴展頁表,也稱爲嵌套頁表,消除了基於軟件的影子分頁的需要。該設計由Bhargava等人在2008年[35]發表,並在大約同一時間由AMD和英特爾的硅可用。
擴展頁表在硬件上結合了x86的經典的硬件定義的頁表結構(由來賓操作系統維護)和另一個頁表結構(由hypervisor維護,它指定來賓物理到主機物理的映射)。這兩種結構都類似地組織成樹。

虛擬I/O

IO插入的好處

總之,經典的I/O虛擬化是通過I/O插入實現的,它提供了許多優點,比如添加了支持遷移的特性和狀態封裝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章