1. 程式人生 > >Intel VT-d(1)- 簡介

Intel VT-d(1)- 簡介

Intel VT-d的全稱是Intel Virtualization Technology for Direct I/O,它是Intel虛擬化技術的一部分,主要針對的是I/O子系統,它的實現主要是通過在硬體上引入重定向單元,該硬體重定向單元用於對I/O子系統的DMA操作和中斷傳遞進行重定向,從而輔助VMM(Virtual Machine Monitor)實現I/O子系統的虛擬化。

一般情況下VMM支援I/O虛擬化可以通過以下四種方式實現:

  1. 純軟體模擬。即VMM的軟體模擬一個現有的I/O裝置,這種方式具有較好的相容性,但是純軟體模擬在效能和功能上就表現得比較差了。
  2. 還是純軟體模擬,但是引入新的I/O操作介面,這些介面針對I/O虛擬化進行一定的優化,這樣雖然能夠解決一定的效能問題,但是相容性問題又出現了,因為需要使用新的操作介面。
  3. 硬體分配,直接將I/O裝置分配給某個VM(Virtual Machine),這樣只有指定的VM能夠使用該I/O裝置,並且I/O裝置的驅動位於VM中,並且VM能夠直接對I/O裝置進行操作,這樣效能和相容性都能達到最佳,但是一個I/O裝置只能給一個VM使用。
  4. I/O裝置分享,這是硬體分配方式的一種擴充套件,主要還是需要I/O裝置本身需要支援一定的功能,如能夠同時提供多個功能介面,比如PCIe裝置的SR-IOV功能,即PCIe裝置本身能夠將一個物理PCIe裝置,變成多個邏輯裝置,這多個邏輯裝置共享該PCIe裝置上的物理資源,並且可以獨立地分配給不同的VM。

以上I/O虛擬化的一個通用要求就是要求VMM能夠將屬於不同VM的I/O裝置安全地隔離起來,即需要滿足以下兩方面的要求:

  1. 屬於一個VM的vCPU無法訪問到屬於另外一個VM的I/O裝置,這可以通過VMX(Virtual Machine Extension)中的EPT(Extended Page Table)功能來實現,即VMM可以通過軟體配置,將虛擬機器實體記憶體,即Guest Physcial Address對映到不同的主機記憶體區域,即Host Physical Address。
  2. 屬於一個VM的I/O裝置不能訪問到屬於其他VM的記憶體或者向屬於其他VM的中斷控制器傳送中斷。如果是純軟體模擬的方式,則VMM也可以通過純軟體的方式來控制I/O裝置訪問記憶體(如DMA)和傳送中斷的行為。但是如果採用硬體分配的方式,則就需要在硬體上對I/O裝置訪問記憶體和傳送中斷的行為進行攔截,然後重定向到指定的VM中,這就是VT-d派上用場的時候了。

VT-d是一個位於CPU、記憶體和I/O裝置之間的硬體裝置,通常位於PCI裝置樹的根部,或者類似的位於I/O子系統的根部,當VT-d重定向硬體裝置啟用的時候,它會攔截位於它下面的所有I/O裝置產生的中斷請求和通過DMA方式對虛擬機器記憶體訪問的請求,然後通過查詢中斷重定向表或者I/O頁表的方式(類似分頁機制)來重新定位中斷轉發的目標LAPIC或者是I/O裝置訪問的目標主機實體記憶體地址。如下圖所示:

VMM軟體負責I/O裝置的分配,即將指定I/O裝置和相應的VM對應起來,並且負責建立中斷重定向關係表和I/O地址轉換頁表,並將這些轉換關係的配置設定到VT-d硬體裝置上,而I/O裝置發起的中斷請求或者DMA記憶體訪問請求中帶有相應裝置的ID,這樣VT-d硬體單元就可以通過硬體查詢的方式將不同的I/O裝置中斷和記憶體訪問請求重定向到相應的VM上,從而達到隔離不同VM的I/O裝置的目的。

總的來說,VT-d的主要功能就是將I/O裝置的DMA訪問請求和中斷請求重定向到VMM設定好的VM中。

 

歡迎關注同名微信公眾號“河馬虛擬化”第一時間獲取最新文章。