Kvm-Virtualization

沒有到 VM 的流量

  • January 18, 2018

TL;博士

(1) 只有前 2 個 VF 被傳輸到 VM

(2) 沒有到 VM 的流量。

設置

  • 主機是 Ubuntu 16.04
  • 通過 PCIe 連接的 Intel 82599(支持 SR-IOV)
  • 司機ixgbe
  • 來賓虛擬機是 Ubuntu 16.10
  • 在 KVM 上使用 Libvirt 作為管理程序

過程

嘗試利用 SR-IOV 功能。在兩個 NIC 中更新sriov_numvfs到 4 會導致每個 NIC 獲得 4 個 VF。執行 VM 並將其連接到 Intel 82599 上的兩個 NIC。

使用流量生成器測試設置。

問題

在執行 VM 之前,ixgbe驅動程序在主機中再創建 8 個連結(每個 VF 一個),所有連結都可見ip link並且處於關閉狀態。VM 啟動後,只有 2 個 VF(每個 NIC 中的第一個 VF,即功能 0)被傳輸到 VM。

虛擬機啟動前

  • lspci入主機會顯示 PCI 匯流排上的 NIC 和所有 VF。
  • ip link入主機會顯示驅動程序創建的所有 8 個連結(狀態為已分配的 MAC 地址)和兩個卡 NIC。

虛擬機啟動後

  • lspci入主機會顯示 PCI 匯流排上的 NIC 和所有 VF。
  • lspci入來賓僅顯示已傳輸的 2 個 VF。
  • 在 VM 啟動後檢查ip link主機會顯示由驅動程序創建的剩餘 6 個連結(具有分配的 MAC 地址),同時顯示卡 NIC 和所有 VF(具有分配的 MAC 地址)。
  • ip link入來賓顯示連接到 VF 的 2 個 NIC(具有 MAC 地址 - 正確並與硬體匹配)。
  • 檢查主機中的 libvirt(virsh net-dumpxml在兩個 NIC 上)顯示所有 8 個 VF 都已排序並附加到 VM。

但…

沒有到 VM 的流量。

有從 VM 到外部的流量。

有任何想法嗎?

致力於它

1

試圖繞過驅動程序的自動化過程,按照連結,VM 啟動時使用兩個橋接網路連接到 2 個卡 NIC。虛擬機正常啟動,兩個網卡都有流量。接下來使用virsh attach-device命令添加新設備,命令成功執行。首先,XML 文件只包含 VF 的 PCI 地址。VM 中沒有明顯的變化,不是 in ip link,不是 in lspci… 什麼都沒有。該--config標誌被升起,因此在重新啟動後再次檢查狀態,並且再次沒有任何內容。接下來顯式添加 NIC(PF)的 PCI 地址,並顯式指定 VF MAC 地址。在virsh attach-device使用顯式參數之後 - 仍然沒有。

2

基本來說,按照這個連結,PCI 設備被手動從主機中分離出來並註入到虛擬機中。最終結果是 PCIe 卡不是 vHBA,因此與 NPIV 不兼容(請參閱此處),並相應地通知此錯誤消息。

3

另一種方法是使用passthrough轉發模式,如此所述。這不是理想的工作模式,因為它故意允許一次僅一個 vNIC 訪問一個 NIC(整個目的是利用 SR-IOV 功能),並且行為類似於hostdev轉發模式:如果 NIC指令中說明的名稱pf就像一個基本的橋樑,如果pf指令中說明了 VF 名稱,則什麼都沒有。

4

與 Passthrough 方法類似,還有 MACvTap 方法,在此處此處此處進行了描述。這不適用。ixgbe驅動程序設置 VF 連結名稱,因此它們的處理方式不同。沒有將 VF 的名稱指定為介面的選項,並且說明介面名稱會導致通過類似於passthrough轉發模式的介面。這可能是由驅動程序版本、核心版本、libvirt 版本或它們的某種組合造成的。

5

更改 SFP 似乎也無濟於事。更改為幾種不同的型號,其中沒有一種適用於 Intel 卡,除了一種確實通電並且連結已啟動(在 PCIe 匯流排上可見),但沒有被ixgbe驅動程序檢測到,也沒有任何其他核心模組和沒有創建介面。

用於利用處理器的核心參數與其他處理器的設置略有不同。

使用參數解決了這兩個問題。

基本思想仍然是啟動核心(Intel 或 AMD)中的 SR-IOV 功能並傳遞核心參數以將其設置為“直通”模式。

使用連結獲取更多核心參數選項。

引用自:https://serverfault.com/questions/892246