《軟硬件融合:超大規模雲計算架構創新之路》之二:CPU虛擬化--從軟件模擬到完全硬件

CPU虛擬化是計算機虛擬化的核心,CPU虛擬化有很多種方式,概括的分爲三類:軟件虛擬化、類虛擬化以及完全硬件虛擬化,依次性能越來越好。

1.CPU的軟件虛擬化

操作系統設計的目標就是直接在裸機硬件上運行,因此自然會假定自己完全“擁有”所有的計算機硬件。x86架構爲操作系統和應用程序提供了四個級別的特權,分別稱爲Ring 0/1/2/3,以此管理對計算機硬件資源的訪問。

 

    圖 3.28 CPU虛擬化

如圖 3.28(a)所示,無虛擬化的場景。用戶級應用程序通常在Ring 3中運行,操作系統要想直接訪問內存和硬件,就必須在Ring 0中執行其特權指令。

CPU的軟件虛擬化大概有三類:

  1. 解釋執行。也稱全軟件模擬,即取出一條指令,模擬出這條指令執行的效果,再繼續下一條指令。由於每條指令都要模擬,也相當於虛擬機的每條指令都會“陷入”Hypervisor,因此解釋執行的性能非常差。
  2. 掃描與修補。讓大多數的指令在物理CPU直接運行,而把操作系統敏感指令替換成跳轉指令或會陷入Hypervisor的指令,執行到系統敏感指令的時候,就會進入Hypervisor,由Hypervisor代爲模擬執行。掃描和修補技術的實現相對簡單,大部分客戶機操作系統和應用代碼可以在物理CPU執行,性能損失相對較小。掃描與修補也會帶來一些問題:特權和敏感指令被模擬執行,因此有的指令模擬時間會較短有的會非常長;特權和敏感指令引入的額外的跳轉,降低了代碼的局部性;需要維護兩套代碼,之後還需要將代碼恢復原狀。
  3. 二進制翻譯。在Hypervisor開闢一塊代碼緩存,將代碼翻譯好放在其中,這樣客戶機操作系統代碼並不會直接被物理CPU執行,所有要被執行的代碼都在代碼緩存中。相比較的,二進制翻譯技術最爲複雜,其在性能上同掃描和修補技術各有長短。

如圖 3.28(b)所示,VMware在1998年開發了二進制轉換技術,該技術允許Hypervisor在Ring 0中運行以實現隔離和性能,同時將操作系統遷移到用戶級別的Ring1,其權限要高於Ring 3中的應用程序,但比虛擬機要低。VMware可以使用二進制轉換和直接執行技術的組合來虛擬化x86操作系統,這種方法翻譯內核代碼,以對虛擬硬件產生預期影響的新指令序列替換不可虛擬化的指令。同時,用戶級代碼直接在處理器上執行以實現高性能虛擬化。

2.CPU的類虛擬化

類虛擬化(Para-Virtualization)技術需要修改現有的操作系統,把不可虛擬化的指令替換成hypercall,通過協調客戶機操作系統和虛擬化管理層的的通信。以此來提升虛擬化效率,打破了傳統的虛擬化的同質性要求。

如圖 3.28(c),通過修改源代碼使得操作系統內核完全避免難以虛擬化的指令,這樣操作系統就不必在Ring0特權級別運行,可以運行在次一級的特權級別。當操作系統試圖執行特權指令時,保護異常就會觸發,從而讓Hypervisor來截獲處理。

傳統的完全軟件虛擬化,客戶機操作系統是不知道自己運行在虛擬環境之上的。但在類虛擬化方式下,上層操作系統知道自己運行在一個虛擬環境之上,這樣可以更好的配合Hypervisor的工作。類虛擬化大概有如下優點:

  1. 相比傳統的軟件虛擬化,類虛擬化可以提供最大限度的性能優化,主要包括減少冗餘代碼、減少地址空間借還和跨特權等級切換、減少內存複製等。
  2. 類虛擬化在一定程度上消除了虛擬化層和上層操作系統之間的語義鴻溝,使得系統的管理更加有效。
  3. 類虛擬化技術還可以在不同的抽象高度提供硬件抽象,甚至提供功能更強大的硬件抽象接口,來優化性能和提供新的功能。

類虛擬化最大的問題是需要對操作系統源代碼進行修改,這樣會增加操作系統開發和調試的工作量,同時也會降低系統運行的穩定性。

3.CPU的硬件虛擬化

以Intel爲例,2005年Intel推出了VT-x技術,爲處理器的虛擬化技術提供了硬件支持。主要體現在:

  1. 引入了兩種操作模式:根模式(Root Mode),Hypervisor運行的模式;非根模式(Non-Root Mode),客戶機運行的模式。如圖 3.28(d),我們知道,指令的虛擬化是通過陷入再模擬的方式實現的,最直觀的解決辦法是讓敏感指令能夠觸發異常,可是這樣會導致跟原有軟件不兼容,因此不可取。在非根模式下,對一些敏感指令的行爲重新定義,觸發陷入來進行處理;而在根模式下這些指令的行爲沒有改變。
  2. VM-Exit和VM-Entry。非根模式下敏感指令引起的陷入稱爲VM-Exit,發生VM-Exit時候,處理器從非根模式切換到根模式。另外,VT-x技術定義了新的指令VMLAUCH和VMRESUME來觸發VM-Entry,使得處理器從根模式切換到非根模式。
  3. VT-x技術還引入了VMCS(Virtual-Machine Control Structure,虛擬機控制結構)。VM保存虛擬CPU的相關狀態。類似中斷,中斷在進入時需要保存當前進程上下文環境(Context),在返回時需要重載此進程上下文環境一樣。在VM-Exit和VM-Entry的時候,我們需要進行虛擬機的上下文環境的操作。爲了提高虛擬機上下文的效率,纔有了硬件支持的VMCS,VMCS本質上是用來硬件加速VM上下文環境切換。

通過VT-x技術的CPU硬件虛擬化,幾乎可以完全消除虛擬化的代價。通過硬件虛擬化技術的支持,可以讓虛擬機獲得跟物理機幾乎一致的性能。

雲計算的軟件和硬件如何融合更高效?

未來的數據中心如何搭建?一起來學習《軟硬件融合》吧。

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