Intel 82599 ixgbe & ixgbevf CNA 卡驅動分析01——SR-IOV

轉載自:http://www.cnblogs.com/zhuyp1015/archive/2012/08/23/2653264.html

Intel 82599 ixgbe & ixgbevf CNA 卡驅動分析01——SR-IOV

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具體是一個什麼東西(或者說講的太簡略),如果有一定基礎的朋友會知道,之後可能有會有專門的文章補充介紹
make it simple, make it happen
發佈了15 篇原創文章 · 獲贊 9 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章