虛擬化與容器

硬體輔助虛擬化(hardware-assisted virtualization)

硬體輔助虛擬化(hardware-assisted virtualization)是對老舊 x86 問題的現代解答,這次靠的是改變 CPU 本身,而非軟體的把戲。回想那個頭痛之處:老舊 x86 無法被捕捉並模擬乾淨地虛擬化,所以人們只好訴諸二進位轉譯或半虛擬化。更乾淨的解法,是晶片廠商加入一個專為客體設計的全新執行模式。Intel 把它的版本叫 VT-x,AMD 叫 AMD-V,兩者合力把原本棘手的 x86 變成一個能在硬體中正確虛擬化的架構。

其機制加入一個獨立的客體模式(guest mode),位於一般特權模式之下,再加上一個給超管理器用的主機模式(host mode)。客體的核心現在能在這個客體模式裡,以它自己視角中的完整特權執行,連敏感指令都直接執行——而 CPU 被設定成:恰好是超管理器在意的那些操作,會造成一次乾淨、受控的退出(VM exit)回到主機模式。超管理器處理該事件,再以一次 VM entry 讓客體繼續。記憶體中的一個控制結構讓超管理器精確指定哪些客體事件該陷入。這使每一道敏感指令在設計上都可被捕捉,這正是老舊 x86 所欠缺的性質。

回報是超管理器能以接近原生的 CPU 速度執行一套未經修改的客體作業系統,且軟體把戲少得多——CPU 不再需要二進位轉譯。剩下的代價是 VM exit 本身:每一次客體與主機之間的切換都不是免費的,所以技術重心轉向「讓退出變稀少」(再加上記憶體用的巢狀分頁表、輸入輸出用的半虛擬化 virtio 驅動程式來助攻)。硬體輔助虛擬化正是讓今日密集又快速的雲端切實可行的關鍵。

一份未經修改的 Windows 以客體身分執行。它的核心在客體模式裡自由地關閉中斷、重新載入控制暫存器——沒有二進位轉譯、沒有原始碼變更。只有當它做了超管理器必須監督的事,CPU 才執行一次 VM exit,把控制權交給超管理器片刻,然後再恢復。

專用的客體 CPU 模式讓未修改的作業系統跑得快,只有在超管理器必須介入時才陷入。

硬體輔助虛擬化消除了 CPU 上對二進位轉譯的需要,但它並未讓虛擬化變免費:頻繁的 VM exit 代價高昂,這正是為何巢狀分頁表與半虛擬化輸入輸出驅動程式至今仍用來減少退出次數。

又称
HVMIntel VT-xAMD-V硬體虛擬化