SR-IOV Overview:
當在主機接口之后使用普通共享設備時,本地共享設備會為每個接口提供單獨的內存空間,工作隊列,中斷和命令處理。這些共享資源也需要被管理,它們會向Hypervisor中可信分區提供一系列用於管理自己的寄存器。
當擁有獨立的工作隊列和命令處理機制后,這些設備就可以同時從多種資源接受命令,並將這些命令智能的融合在一起,在傳遞給下一級結構之前。
虛擬化軟件不用再對I/O請求進行復用,這減少了軟件的壓力。
本地共享設備能夠通過很多方式實現,可以按照標准實現也可以使用其他專門的實現方式。
因為大多數這些設備都是通過PCI 訪問的,PCI-SIG 決定定義一種實現標准用語創建和管理本地共享設備,也就是現在的Single Root I/O Virtualization 和 Sharing (SR-IOV) specification.
SR-IOV Goal
PCI-SIG SR-IOV 標准目的在於標准化化在虛擬環境中共享一個 I/O 設備的方式。
這個目標繞開了Hypervisor 的參與,提供了獨立的內存空間、中斷、DMA 流給每一個虛擬機用於數據的移動。
SR-IOV 引入了兩種新的function 類型:
Physical Function(PF):這是一個擁有所用PCIe 功能的fucntion,當然也包含了SR-IOV 擴展的能力
Virtual Function (VF): 這是一個輕量級的PCIe function,包含了數據移動所需的資源。
High Level Overview of PCI-SIG SR-IOV
虛擬化方法中的直接賦值提供了非常快速的I/O。 然而,這種方式使得I/O設備不能被共享。SR-IOV 標准提供了一個機制,通過這個機制使得一個單根的功能模塊(比如一個以太網端口)看起來像是多個單獨的物理設備。
一個支持SR-IOV 的設備能夠通過配置(一般由Hypervisor來配置)在PCI的配置空間看起來像是擁有多個功能。每個功能都擁有自己的配置空間,擁有自己的基地址寄存器(BAR)。
支持SR-IOV 的設備為每個獨立的虛擬功能提供了一個配置號,每個虛擬空能都擁有獨立的PCI 配置空間。 Hypervisor 可以將一個活多個虛擬功能分配給一個虛擬機。內存地址翻譯技術比如Intel VT-d 提供的硬件輔助技術使得可以針對每個虛擬機進行DMA傳輸。
SR-IOV 標准詳細列出了PCI配置空間信息該如何呈現。這些信息與標准PCI設備的信息有些不同。Hypervisor必須知道如何訪問和讀取這些信息,以便使得VM可以訪問它們。
High Level Architecture:
在虛擬化的環境中,系統中包含SR-IOV設備,Hypervisor都必須將PCI 配置空間的信息傳遞給虛擬機的I/O設備。對於SR-IOV 來說,Hypervisor 將實際的配置空間信息傳遞給特定的VF,允許虛擬機中的VF 驅動訪問這些VF資源。
SR-IOV標准的一部分規定了一個支持SR-IOV的設備需要如何表明自身具有SR-IOV的能力,PCI配置空間的虛擬VF信息是如何被存儲,可以怎樣被訪問。這是SR-IOV特有的機制。Hypervisor必須知道如何讀取和分析這些信息。Linux和Xen內核已經更新,現已能夠使用這項新功能。
VT-d 使得一個I/O設備通過DMA重映射操作可以直接分配給一個虛擬機。Hypervisor 必須使用I/O地址來進行配置,以便進行重映射。
注:1. 文章其實是對 Intel 提供的文檔和代碼的理解和翻譯,
2. 這里沒有講SR-IOV具體是一個什么東西(或者說講的太簡略),如果有一定基礎的朋友會知道,之后可能有會有專門的文章補充介紹