Intel 82599 ixgbe & ixgbevf CNA 卡驅動分析02——VF/PF/MailBox

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

Physical Function Driver
     
     PF 驅動是一個專門管理SR-IOV設備全局功能驅動,而且還要配置相關共享資源。PF 驅動 隨着Hypervisor 的不同而不同,一般需要具有比普通虛擬機更高的權限才能對其進行操作。PF驅動包含了所有傳統驅動的功能,使得Hypervisor能夠訪問設備I/O資源。也可以通過調用PF驅動執行相關操作從而影響整個設備。PF驅動必須在VF驅動之前加載,而且需要等VF驅動卸載之後才能卸載。
     
     Intel SR-IOV 驅動包含了所有 Intel 以太網卡的功能,並且還有下面使用SR-IOV時擁有的特殊功能:
     ·給每個VF生成一個MAC 地址
     ·通過信箱系統與VF驅動通信:
          ·通過VF驅動配置VLAN過濾器
          ·通過VF驅動配置多播地址
          ·通過VF驅動配置最大包長
          ·處理VF驅動資源復位請求
 
 
Virutal Function Driver
 
     標準設備驅動(驅動不會意識到自己所處的虛擬化環境)期望獲知如何控制設備和設備是如何工作的。在虛擬化環境下,一個標準的驅動一般與一個軟件間接層進行交互,這個軟件間接層模擬了底層的物理硬件設備。大多數情況下,該驅動不會意識到這個間接層的存在。
 
     通過直接賦值,我們期望改變本地共享設備的功能。VF 接口並沒有包含完整的PCIe控制功能,而且一般不能直接控制共享設備和資源,比如設置以太網連接速率。這時候有必要告知VF 驅動,使其意識到自己所處的虛擬環境。當VF驅動意識到自己所處的虛擬化環境之後,就能夠直接與硬件進行數據交互。同時這些VF驅動也能夠知道這些設備都是共享設備,依賴於PF驅動提供的服務來進行操作,這些操作都具有全局效果,比如初始化和下一級結構的控制。
 
PF Driver - VF Driver Communication
 
     設備共享需要一個功能就是VF驅動與PF驅動通信,這樣VF驅動就能夠請求具有全局功能的操作。這個信道需要具有傳遞信息和產生中斷的能力。
 
     SR-IOV標準並沒有定義這條通信線路的實現機制。Intel 選擇了通過使用一系列硬件信箱和門鈴寄存器來爲每個VF實現這個通信信道。
     
     Intel選擇使用一件信箱的根本原因是爲了確保實現一個獨立於Hypervisor且持久可靠的通信機制。然而, 基於軟件的信道也能夠用來實現該通信功能,這個功能需要由Hypervisor子系統提供。這些信道的實現各個生產商並不相同,需要客戶自己啓動這些支持。硬件信道則不同,總是能夠工作,除非被Hypervisor禁用。現在看來,並不是所用Hypervisor生產商都提供基於軟件的消息機制,因此Intel 相關度去哦那個提供了利用硬件信道的API。
 
 
Example Receive Flow
 
     一個包是如何被一個虛擬機接收和發送的:

 
第一、二步:包到達,被送往L2 進行分類和交換
第三步:       根據目的MAC地址進行分類,這時候,改包與 緩衝池1匹配
第四步:       網卡發起DMA操作,將一個包傳遞給一個VM
第五步:       DMA操作到達Intel 芯片集,在這裏VT-d(由Hypervisor 配置)進行DMA操作所需的地址翻譯;結果使得該包     
                    被直接送入到虛擬機的VF驅動緩衝裏面
第六步:       網卡發起了MSI-X中斷,表明該接收操作已經完成。該中斷由Hypervisor接收。
第七步:       Hypervisor向虛擬機注入一個虛擬中斷表明傳輸已經結束,這時候虛擬機的VF驅動就開始處理該包。
 
 
Mailbox Communication System
 
     有時候VF驅動必須與PF驅動通信,以便完成一些工作,這些工作在VF提供的PCI資源基礎上是無法完成的。
     
     例如:當VF驅動想要定義一個VLAN過濾器。這個功能在VF中並沒有暴露,因此VF驅動也不能直接配置VLAN過濾器。
 
     VF驅動能夠代替VF 向PF驅動發起這種類型的配置請求。
 
     

 
 
Virtual Function Mailbox
 
     當一個虛擬機獲得訪問VF的權限後,VF 資源中的信箱功能就會暴露給該虛擬機。這個功能相當簡單,這是一系列的緩衝區,可以從這些緩衝區中讀取或者寫入信息,並增加一個寄存器(VFMailbox)用於提供PF和VF之間的同步功能。
 
     
     VF和PF都可以訪問該緩衝區,可以通過這個緩衝區來傳遞信息。因爲信箱緩衝和VFMailbox寄存器是VF資源的一部分,因此這些資源對於特定的VF來說是獨佔的。這意味着針對特定VF的VF驅動不能對分配給其他虛擬機的信箱進行寫入。
 
     更多的關於信箱緩衝的信息可以參見:Intel ®82559 10Gigabit Ethernet Controller Datasheet。
 
 
Physical Function Mailbox
     
     PF 驅動能夠訪問所有的VF信箱,通過VF信箱的信箱內(VFMBMEM:VF Mailbox Mailbox Memory)存和PF信箱(Physical Function Mailbox)寄存器陣列.
     

     當一個VF驅動向VFMBMEM緩衝寫入信息並在VFMailbox寄存器中設置適當的比特位之後,就向給PF產生一箇中斷。PF驅動獲取這些信息,並給予這條消息進行回覆。
 
     這時候,PF驅動會使用信箱發送一個異步消息給VF,這就是IXGBE_PF_CONTORL_MSG 消息。
 
 
Virtual Function Driver
     
     Intel VF驅動實例代碼是標準 Intel ixgbe 10 Gigabit Ethernet 驅動的一個修改後的版本。通過設備ID來加載。Intel VF有一個設備ID表明它們是一個VF, 這樣祥光的驅動就可以被加載。
 
     Intel VF 驅動可以被分割爲三個部分:
     ·操作系統界面——虛擬機操作系統可以通過該界面調用各種API
     ·I/O操作——使用SR-IOV 功能來進行I/O操作,而避免Hypervisor的干預
     ·配置任務——配置像VLAN過濾器等需要與PF驅動進行通信的任務
 
注:PF & VF 有時候只實際的PCIe 物理功能模塊,有時候就是泛指,注意區別
make it simple, make it happen

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章