天天看點

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裝置通路的目标主機實體記憶體位址。如下圖所示:

Intel VT-d(1)- 簡介

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

歡迎關注同名微信公衆号“河馬虛拟化”第一時間擷取最新文章。

繼續閱讀