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中。

推薦閱讀:

查看原文 >>
相關文章