虛擬化技術的分類主要有服務器虛擬化、存儲虛擬化、網絡虛擬化、應用虛擬化。服務器虛擬化技術按照虛擬對象來分,可分為:CPU虛擬化、內存虛擬化、I/O虛擬化;按照虛擬化程度可分為:全虛擬化、半虛擬化、硬件輔助虛擬化。將不同的虛擬化對象和程度組合,可得出9種不同的服務器虛擬化技術,本文主要介紹服務器虛擬化之CPU虛擬化。
CPU虛擬化
CPU全虛擬化技術
主要采用優先級壓縮技術(Ring Compression)和二進制代碼翻譯技術(BinaryTranslation)。優先級壓縮技術讓VMM和Guest運行在不同的特權級下。對x86架構而言,即VMM運行在最高特權級別Ring 0下,Guest OS運行在Ring 1下,用戶應用運行在Ring 3下。因此,Guest OS的核心指令無法直接下達到計算機系統硬件執行,而是需要經過VMM的捕獲和模擬執行(部分難以虛擬化的指令需要通過Binary Translation技術進行轉換)。
CPU半虛擬化技術
主要采用Hypercall技術。Guest OS的部分代碼被改變,從而使Guest OS會將和特權指令相關的操作都轉換為發給VMM的Hypercall(超級調用),由VMM繼續進行處理。而Hypercall支持的批處理和異步這兩種優化方式,使得通過Hypercall能得到近似于物理機的速度。
CPU硬件輔助虛擬化技術
目前主要有Intel的VT-x和AMD的AMD-V這兩種技術。其核心思想都是通過引入新的指令和運行模式,使VMM和Guest OS分別運行在不同模式(ROOT模式和非ROOT模式)下,且Guest OS運行在Ring 0下。通常情況下,Guest OS的核心指令可以直接下達到計算機系統硬件執行,而不需要經過VMM。當Guest OS執行到特殊指令的時候,系統會切換到VMM,讓VMM來處理特殊指令。
CPU的虛擬化技術可以單CPU模擬多CPU并行,允許一個平臺同時運行多個操作系統,并且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。
GuestOS負責第2級調度,即線程或進程在VCPU上的調度(將核心線程映射到相應的虛擬CPU上)。
VMM(Virtual Machine Monitor)負責第1級調度,即VCPU在物理處理單元上的調度。
兩級調度的調度策略和機制不存在依賴關系。VMM負責物理處理器資源在各個虛擬機之間的分配與調度,本質上即把各個虛擬機中的VCPU按照一定的策略和機制調度在物理處理單元上可以采用任意的策略來分配物理資源,滿足虛擬機的不同需求。