適用於 Intel(R) 乙太網自適應虛擬功能的 Linux 基本驅動程式

Intel 乙太網自適應虛擬功能 Linux 驅動程式。Copyright(c) 2013-2018 Intel Corporation。

目錄

  • 概述

  • 識別您的介面卡

  • 其他配置

  • 已知問題/故障排除

  • 支援

概述

此檔案描述了 iavf Linux 基本驅動程式。此驅動程式以前稱為 i40evf。

iavf 驅動程式支援下面提到的虛擬功能裝置,並且只能在執行使用 CONFIG_PCI_IOV 編譯的 i40e 或更新的物理功能 (PF) 驅動程式的核心上啟用。 iavf 驅動程式需要啟用 CONFIG_PCI_MSI。

載入 iavf 驅動程式的客戶作業系統必須支援 MSI-X 中斷。

識別您的介面卡

此核心中的驅動程式與基於以下裝置的裝置相容
  • Intel(R) XL710 X710 虛擬功能

  • Intel(R) X722 虛擬功能

  • Intel(R) XXV710 虛擬功能

  • Intel(R) 乙太網自適應虛擬功能

為了獲得最佳效能,請確保在您的裝置上安裝最新的 NVM/FW。

有關如何識別您的介面卡,以及獲取最新的 NVM/FW 映象和 Intel 網路驅動程式的資訊,請參閱 Intel 支援網站:https://www.intel.com/support

其他功能和配置

ethtool

驅動程式利用 ethtool 介面進行驅動程式配置和診斷,以及顯示統計資訊。此功能需要最新的 ethtool 版本。 在以下位置下載:https://kernel.linux.club.tw/pub/software/network/ethtool/

設定 VLAN 標籤剝離

如果您有需要虛擬功能 (VF) 接收帶有 VLAN 標籤的資料包的應用程式,您可以停用 VF 的 VLAN 標籤剝離。 物理功能 (PF) 處理從 VF 發出的啟用或停用 VLAN 標籤剝離的請求。 請注意,如果 PF 已將 VLAN 分配給 VF,則來自該 VF 的設定 VLAN 標籤剝離的請求將被忽略。

要為 VF 啟用/停用 VLAN 標籤剝離,請從執行 VF 的 VM 內發出以下命令

# ethtool -K <if_name> rxvlan on/off

或替代地

# ethtool --offload <if_name> rxvlan on/off

自適應虛擬功能

自適應虛擬功能 (AVF) 允許虛擬功能驅動程式或 VF 適應與其關聯的物理功能驅動程式 (PF) 的不斷變化的功能集。 這允許系統管理員更新 PF,而無需更新與其關聯的所有 VF。 所有 AVF 都有一個共同的裝置 ID 和品牌字串。

AVF 具有一組稱為“基本模式”的最小功能集,但可能會根據與 AVF 關聯的 PF 中可用的功能提供其他功能。 以下是基本模式功能

  • 4 個佇列對 (QP) 和相關的 Tx/Rx 配置狀態暫存器 (CSR)

  • i40e 描述符和環形格式

  • 描述符寫回完成

  • 1 個控制佇列,帶有 i40e 描述符、CSR 和環形格式

  • 5 個 MSI-X 中斷向量和相應的 i40e CSR

  • 1 箇中斷節流率 (ITR) 索引

  • 每個 VF 1 個虛擬站介面 (VSI)

  • 1 個流量類別 (TC),TC0

  • 接收端縮放 (RSS),具有 64 個條目的間接表和金鑰,透過 PF 配置

  • 每個 VF 保留 1 個單播 MAC 地址

  • 每個 VF 16 個 MAC 地址過濾器

  • 無狀態解除安裝 - 非隧道校驗和

  • AVF 裝置 ID

  • HW 郵箱用於 VF 到 PF 的通訊(包括 Windows 上)

IEEE 802.1ad (QinQ) 支援

IEEE 802.1ad 標準,非正式名稱為 QinQ,允許單個乙太網幀中存在多個 VLAN ID。 VLAN ID 有時被稱為“標籤”,因此多個 VLAN ID 被稱為“標籤堆疊”。 標籤堆疊允許 L2 隧道和在特定 VLAN ID 中隔離流量的能力,以及其他用途。

以下是如何配置 802.1ad (QinQ) 的示例

# ip link add link eth0 eth0.24 type vlan proto 802.1ad id 24
# ip link add link eth0.24 eth0.24.371 type vlan proto 802.1Q id 371

其中“24”和“371”是 VLAN ID 示例。

注意

接收校驗和解除安裝、雲過濾器和 VLAN 加速不支援 802.1ad (QinQ) 資料包。

應用程式裝置佇列 (ADq)

應用程式裝置佇列 (ADq) 允許您將一個或多個佇列專用於特定應用程式。 這可以減少指定應用程式的延遲,並允許每個應用程式限制 Tx 流量的速率。 請按照以下步驟設定 ADq。

要求

  • 必須載入 sch_mqprio、act_mirred 和 cls_flower 模組

  • 最新版本的 iproute2

  • 如果另一個驅動程式(例如,DPDK)已設定雲過濾器,則無法啟用 ADQ

  • 根據底層 PF 裝置,啟用以下功能時無法啟用 ADQ

    • 資料中心橋接 (DCB)

    • 每個埠多個功能 (MFP)

    • 邊帶過濾器

1. 建立流量類別 (TC)。 每個介面最多可以建立 8 個 TC。 整形器 bw_rlimit 引數是可選的。

示例:設定兩個 tc,tc0 和 tc1,每個 tc 有 16 個佇列,tc0 的最大 tx 速率設定為 1Gbit,tc1 的最大 tx 速率設定為 3Gbit。

tc qdisc add dev <interface> root mqprio num_tc 2 map 0 0 0 0 1 1 1 1
queues 16@0 16@16 hw 1 mode channel shaper bw_rlimit min_rate 1Gbit 2Gbit
max_rate 1Gbit 3Gbit

map:最多 16 個優先順序到 tc 的優先順序對映(例如,map 0 0 0 0 1 1 1 1 設定優先順序 0-3 以使用 tc0,4-7 以使用 tc1)

queues:對於每個 tc,<佇列數>@<偏移量>(例如,queues 16@0 16@16 將 16 個佇列分配給偏移量 0 處的 tc0,將 16 個佇列分配給偏移量 16 處的 tc1。 所有 tc 的最大佇列總數為 64 或核心數,以較低者為準。)

hw 1 mode channel:帶有“hw”設定為 1 的“channel”是在 mqprio 中的一種新的硬體解除安裝模式,它充分利用 mqprio 選項、TC、佇列配置和 QoS 引數。

shaper bw_rlimit:對於每個 tc,設定最小和最大頻寬速率。 總計必須等於或小於埠速度。

例如:min_rate 1Gbit 3Gbit:使用網路監視工具(如 ifstatsar -n DEV [interval] [number of samples])驗證頻寬限制

注意

使用 mqprio 配置 TC 時,不支援透過 ethtool (ethtool -L) 設定通道。

  1. 在介面上啟用 HW TC 解除安裝

    # ethtool -K <interface> hw-tc-offload on
    
  2. 將 TC 應用於介面的入口 (RX) 流

    # tc qdisc add dev <interface> ingress
    
注意
  • 從 iproute2 <pathtoiproute2>/tc/ 目錄執行所有 tc 命令

  • ADq 與雲過濾器不相容

  • 使用 mqprio 配置 TC 時,不支援透過 ethtool (ethtool -L) 設定通道

  • 您必須具有最新版本的 iproute2

  • 需要 NVM 版本 6.01 或更高版本

  • 啟用以下任何功能時,無法啟用 ADq:資料中心橋接 (DCB)、每個埠多個功能 (MFP) 或邊帶過濾器

  • 如果另一個驅動程式(例如,DPDK)已設定雲過濾器,則無法啟用 ADq

  • ADq 不支援隧道過濾器。 如果封裝的資料包以非隧道模式到達,則將對內部標頭進行過濾。 例如,對於非隧道模式下的 VXLAN 流量,PCTYPE 被識別為 VXLAN 封裝的資料包,外部標頭將被忽略。 因此,將匹配內部標頭。

  • 如果 PF 上的 TC 過濾器匹配 VF(在 PF 上)上的流量,則該流量將被路由到 PF 的相應佇列,而不會傳遞到 VF。 由於此類流量與 PF 地址資料不匹配,因此最終將在 TCP/IP 堆疊中被更高地丟棄。

  • 如果流量匹配指向不同 TC 的多個 TC 過濾器,則該流量將被複制併發送到所有匹配的 TC 佇列。 當匹配多個過濾器時,硬體交換機將資料包映象到 VSI 列表。

已知問題/故障排除

繫結失敗,VF 繫結到 Intel(R) 乙太網控制器 700 系列裝置

如果您將虛擬功能 (VF) 繫結到基於 Intel(R) 乙太網控制器 700 系列的裝置,則 VF 從站在成為活動從站時可能會失敗。 如果 VF 的 MAC 地址由裝置的物理功能 (PF) 設定,則當您新增從站或更改活動-備份從站時,Linux 繫結會嘗試將備份從站的 MAC 地址同步到與活動從站相同的 MAC 地址。 Linux 繫結此時將失敗。 如果 VF 的 MAC 地址不是由 PF 設定的,則不會發生此問題。

流量未在 VM 和客戶端之間傳遞

如果虛擬功能(VF 或虛擬 NIC)未處於受信任模式,並且在 VF 上啟用了欺騙檢查,您可能無法在客戶端系統和在單獨主機上執行的虛擬機器 (VM) 之間傳遞流量。 請注意,這種情況可能發生在客戶端、主機和訪客作業系統中的任何組合中。 有關如何將 VF 設定為受信任模式的資訊,請參閱此自述文件中的“VLAN 標籤資料包控制”部分。 有關設定欺騙檢查的資訊,請參閱此自述文件中的“MAC 和 VLAN 反欺騙功能”部分。

如果 VF 與活動 VM 繫結,請勿解除安裝埠驅動程式

如果虛擬功能 (VF) 與活動虛擬機器 (VM) 繫結,請勿解除安裝埠的驅動程式。 這樣做會導致埠似乎掛起。 一旦 VM 關閉或以其他方式釋放 VF,命令將完成。

使用四個流量類別失敗

不要嘗試在 iavf 驅動程式中保留超過三個流量類別。 這樣做將無法設定任何流量類別,並將導致驅動程式將錯誤寫入 stdout。 使用最多三個佇列以避免此問題。

在 iavf 驅動程式刪除時出現多個日誌錯誤訊息

如果您有多個 VF 並且您刪除了 iavf 驅動程式,則以下日誌錯誤的多個例項將被寫入日誌

Unable to send opcode 2 to PF, err I40E_ERR_QUEUE_EMPTY, aq_err ok
Unable to send the message to VF 2 aq_err 12
ARQ Overflow Error detected

虛擬功能的 MAC 地址意外更改

如果在主機中未分配虛擬功能的 MAC 地址,則 VF(虛擬功能)驅動程式將使用隨機 MAC 地址。 每次重新載入 VF 驅動程式時,此隨機 MAC 地址可能會更改。 您可以在主機中分配靜態 MAC 地址。 此靜態 MAC 地址將在 VF 驅動程式重新載入後保留。

驅動程式緩衝區溢位修復

解決 Intel SA-00069 https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00069.html 中引用的 CVE-2016-8105 的修復程式包含在此驅動程式和未來版本中。

同一乙太網廣播網路上的多個介面

由於 Linux 上的預設 ARP 行為,不可能在同一乙太網廣播域(非分割槽交換機)中的兩個 IP 網路上擁有一個按預期執行的系統。 所有乙太網介面都將響應分配給系統的任何 IP 地址的 IP 流量。 這會導致不平衡的接收流量。

如果您的伺服器中有多個介面,請透過輸入以下內容開啟 ARP 過濾

# echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter
注意

此設定不會在重新啟動後儲存。 可以透過將以下行新增到檔案 /etc/sysctl.conf 使配置更改永久生效

net.ipv4.conf.all.arp_filter = 1

另一種方法是將介面安裝在單獨的廣播域中(在不同的交換機中或在分割槽為 VLAN 的交換機中)。

Rx 頁面分配錯誤

壓力下可能會發生“頁面分配失敗。 order:0”錯誤。 這是由 Linux 核心報告此壓力狀態的方式引起的。

支援

有關一般資訊,請訪問 Intel 支援網站:https://support.intel.com

如果在受支援的介面卡的受支援核心上識別出已釋出原始碼的問題,請將與該問題相關的特定資訊透過電子郵件傳送至 intel-wired-lan@lists.osuosl.org