SR-IOV: Mellanox OFED v5.0 用户手册【译】

前言

本文是摘抄翻译自MLNX_OFED Documentation Rev 5.0-2.1.8.0手册中的SRIOV配置文档。
翻译中删去了InfiniBand相关内容。

简介

Single Root IO虚拟化(SR-IOV)是一种使一个物理PCIe设备通过PCIe总线(bus)多次呈现的技术。这项技术使设备的多个虚拟实例拥有独立的资源。Mellanox适配器能够在ConnectX®-3网卡中暴露出多达126个虚拟实例,称为虚拟功能(Virtual Functions (VFs)),ConnectX-4/Connect-IB网卡多达62个虚拟实例。然后,这些虚拟功能(virtual function)可以被单独配置。每个VF可以被看作是一个连接到Physical Function的额外设备。它与Physical Function共享相同的资源,其端口数量等于物理功能的端口数量。

SR-IOV通常与支持SR-IOV的虚拟机监视器(hypervisor)一起使用,为虚拟机直接提供硬件来访问网络资源,从而提高其性能。
在本章中,我们将演示在Red Hat Linux环境中使用Mellanox ConnectX® VPI网卡系列进行SR-IOV的设置和配置。

系统要求

要建立一个SR-IOV环境,需要以下条件:

  • MLNX_OFED驱动程序
  • 服务器主板BIOS支持SR-IOV能力
  • 支持SR-IOV的Hypervisor,例如:Red Hat Enterprise Linux Server Version 6
  • 具有SR-IOV功能的Mellanox ConnectX® VPI网卡系列

启用SR-IOV

根据你的系统,执行下面的步骤来设置你的BIOS。本节中使用的插图仅用于示例。更多信息,请参考相应的BIOS用户手册。

  1. 在系统BIOS中启用 "SR-IOV":


    20220326190106
  2. 启用"Intel Virtualization Technology".


    20220326190243
  3. 安装一个支持SR-IOV的虚拟化管理器(Hypervisor)
  4. 根据你的系统,更新 /boot/grub/grub.conf 文件,为Linux内核加入一个类似的命令行加载参数。
    例如,对于Intel systems,添加:
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title Red Hat Enterprise Linux Server (2.6.32-36.x86-645)
            root (hd0,0)
            kernel /vmlinuz-2.6.32-36.x86-64 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
            intel_iommu=on        initrd /initrd-2.6.32-36.x86-64.img
    

    在更新/boot/grub/grub.conf文件时,请确保参数 "intel_iommu=on "存在,否则SR-IOV不能被加载。
    一些操作系统使用/boot/grub2/grub.cfg。如果你的服务器使用这样的文件,请编辑这个文件来代替(在以 "linux16 "开头的一行的末尾,添加 "intel_iommu=on")

配置CX-3

  1. 安装支持SR-IOV的Linux的MLNX_OFED驱动

    通过运行mlxconfig工具并将SRIOV_EN参数设置为 "1",可以启用和管理SR-IOV,而无需重新烧录固件。
    要找到mst设备,请运行。"mst start "和 "mst status"

    mlxconfig -d  s SRIOV_EN=1
    

    更多信息,请参考MFT用户手册(www.mellanox.com > 产品 > 软件 > 固件工具)中的 "mlxconfig-ChangingDeviceConfigurationTool "部分。

  2. 确认HCA[1]被配置为支持SR-IOV

    # mstflint -dev  dc
    

    HCA显示以下字段:

    [HCA]
    num_pfs = 1
    total_vfs = <0-126>
    sriov_en = true
    
    参数 推荐值
    num_pfs 1
    total_vfs 固件2.31.5000以上,推荐126. 固件2.30.8000以下,推荐63
    sriov_en true
    • 要确保系统支持这个数量的VFs,过大的话,可能导致系统停止工作
    • 如果缺少上述字段,请将它们添加到INI中。
    • 如果你需要改变总VF的数量,将total_vfs参数设置为所需的数字。
    • 如果上述字段被添加到INI中,或total_vfs参数被修改,请使用mlxburn工具烧录固件。如果没有安装mlxburn,请从Mellanox网站下载:http://www.mellanox.com→产品→固件工具
    mlxburn -fw ./fw-ConnectX3-rel.mlx -dev /dev/mst/mt4099_pci_cr0 -conf ./MCX341A-XCG_Ax.ini
    
  3. 创建文本文件/etc/modprobe.d/mlx4_core.conf

  4. 在/etc/modprobe.d/mlx4_core.conf文件中插入一个 "options "行,以设置VF的数量,每个端口的协议类型,以及物理函数驱动(probe_vf)允许使用的虚拟函数的数量。
    For example:

    options mlx4_core num_vfs=5 port_type_array=1,2 probe_vf=1
    

    参数推荐值:
    num_vfs:

    • 如果没有,或为零:将没有VF可用。
    • 如果它的值是0-63范围内的单个数字。驱动程序将启用HCA上的num_vfs VFs,这将应用于主机上的所有ConnectX® HCAs。
      • 如果是三元组 x,y,z(只适用于所有端口都配置为以太网的情况),驱动程序会创建。
        • x 物理端口1上的单端口VF
        • y 物理端口2上的单端口VF(只适用于存在这样一个端口的情况下)
        • z n个端口的VF(其中n是设备上物理端口的数量)。这适用于主机上的所有ConnectX® HCAs
    • 如果是格式字符串。该字符串对每个安装的HCA分别指定num_vfs参数。
      字符串的格式是。"bb:dd.f-v,bb:dd.f-v, ..."
      • bb:dd.f = HCA的PF的总线:设备.功能
      • v = 为该HCA启用的VF数量,如上所述,可以是一个单一的数值,也可以是一个三元组。

    例如:

    • num_vfs=5 - 驱动程序将在HCA上启用5个VF,这将应用于主机上的所有ConnectX® HCA。
    • num_vfs=00:04.0-5,00:07.0-8 - 驱动程序将在BDF 00:04.0的HCA上启用5个VF,在00:07.0的HCA上启用8个VF
    • num_vfs=1,2,3 - 驱动程序将在物理端口1上启用1个VF,在物理端口2上启用2个VF,在双端口上启用3个VF(仅适用于所有端口都是以太网端口时的双端口HCA)。
    • num_vfs=00:04.0-5;6;7,00:07.0-8;9;10 - 驱动程序将启用。
      • 位于BDF 00:04.0的HCA
        • 在端口1上有5个单一的VF
        • 6个端口2的单VF
        • 7个双端口VF
      • 位于BDF 00:07.0的HCA
        • 8 端口1上的单VFs
        • 9 端口2上的单VFs
        • 10 双端口VFs

    注:
    不包括在上述列表中的PF将不会启用SR-IOV。
    三元组和单端口VF只有在所有端口都配置为以太网时才有效。当InfiniBand端口存在时,只有num_vfs=a语法有效,其中"a"是一个代表VF数量的单一值。
    三元组中的第二个参数只有在有1个以上的物理端口时才有效。
    在一个三元组中,x+z<=63和y+z<=63,每个物理端口上的最大VF数量必须是63。

    port_type_array:
    指定端口的协议类型。它是所有设备的2个端口类型't1,t2'的一个数组,或者是BDF到port_type_array的列表'bb:dd.f-t1;t2,...'。
    有效的端口类型。1-ib, 2-eth, 3-auto, 4-N/A
    如果只有一个端口可用,则对端口2使用N/A端口类型(例如'1,4')。
    注意,这个参数只有在num_vfs不为零时才有效(即,SRIOV被启用)。否则,它将被忽略。

    probe_vf: 同num_vfs

  5. 重启服务

  6. 加载驱动校验 sr-iov已加载:

    lspci | grep Mellanox
    03:00.0 InfiniBand: Mellanox Technologies MT26428 [ConnectX VPI PCIe 2.0 5GT/s - IB QDR / 10GigE] (rev b0)
    03:00.1 InfiniBand: Mellanox Technologies MT27500 Family [ConnectX-3 Virtual Function] (rev b0)
    03:00.2 InfiniBand: Mellanox Technologies MT27500 Family [ConnectX-3 Virtual Function] (rev b0)
    03:00.3 InfiniBand: Mellanox Technologies MT27500 Family [ConnectX-3 Virtual Function] (rev b0)
    03:00.4 InfiniBand: Mellanox Technologies MT27500 Family [ConnectX-3 Virtual Function] (rev b0)
    03:00.5 InfiniBand: Mellanox Technologies MT27500 Family [ConnectX-3 Virtual Function] (rev b0)
    
    • "03:00" 表示Physical Function
    • "03:00.X" 表示连接到PF的Virtual Function

配置CX-4/CX-5/CX-6

配置包括如下步骤:

  1. 启用 SR-IOV在BIOS中
  2. 在固件中启用SR-IOV
  3. 在驱动中配置启用SR-IOV

配置

1. 固件启用SR-IOV

MST: (Mellanox Software Tools) service

mst start:
创建代表Mellanox设备的特殊文件,放在/dev/mst/目录中。加载适当的内核模块并将PCI配置头文件保存在temp-directory中。
启动后,可以使用其他工具或更改配置文件来对固件进行操作和配置。

  1. Run MST
# mst start

Starting MST (Mellanox Software Tools) driver set
Loading MST PCI module - Success
Loading MST PCI configuration module - Success
Create devices
  1. 查看PCI插槽对应的设备名
# mst status

MST modules:
------------

MST PCI module loaded
MST PCI configuration module loaded

MST devices:
------------

/dev/mst/mt4103_pciconf0 - PCI configuration cycles access.
domain{?:}bus:dev.fn=0000:81:00.0 addr.reg=88 data.reg=92
Chip revision is: 00

/dev/mst/mt4103_pci_cr0 - PCI direct access.
domain: bus:dev.fn=0000:81:00.0 bar=0xc8000000 size=0x100000
Chip revision is: 00

/dev/mst/mt4115_pciconf0 - PCI configuration cycles access.
domain: bus:dev.fn=0000:05:00.0 addr.reg=88 data.reg=92
Chip revision is: 00
  1. 查询设备状态
# mlxconfig -d /dev/mst/mt4115_pciconf0 q
Device #1:
----------

Device type:    ConnectX4LX
Name:           N/A
Description:    N/A
Device:         /dev/mst/mt4117_pciconf0

Configurations:                              Next Boot
         MEMIC_BAR_SIZE                      0
         MEMIC_SIZE_LIMIT                    _256KB(1)
         ROCE_NEXT_PROTOCOL                  254
         NON_PREFETCHABLE_PF_BAR             False(0)
         NUM_PF_MSIX_VALID                   True(1)
         NUM_OF_VFS                          0
         SRIOV_EN                            False(0)
         PF_LOG_BAR_SIZE                     5
         VF_LOG_BAR_SIZE                     0
         NUM_PF_MSIX                         63
         NUM_VF_MSIX                         11
         ...
  1. 启用SR-IOV,设置VF数量
    • SRIOV_EN=1
    • NUM_OF_VFS=4
# mlxconfig -d /dev/mst/mt4115_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=4

Device #1:
----------
Device type: ConnectX4
PCI device: /dev/mst/mt4115_pciconf0
 
Configurations: Current New
SRIOV_EN 0 1
NUM_OF_VFS 0 4
LINK_TYPE_P1 2 2
LINK_TYPE_P2 2 2
INT_LOG_MAX_PAYLOAD_SIZE 0 0
LOG_DCR_HASH_TABLE_SIZE 14 14
DCR_LIFO_SIZE 16384 16384
...

Apply new Configuration? ? (y/n) [n] : y
Applying... Done!

-I- Please reboot machine to load new configurations.
  1. 重启系统

2. 配置MLNX_OFED驱动启用SR-IOV

  1. 找到主网卡设备

ibstat: 查看IB设备状态

# ibstat
CA 'mlx5_0'
        CA type: MT4117
        Number of ports: 1
        Firmware version: 14.21.2010
        Hardware version: 0
        Node GUID: 0xXXXX
        System image GUID: 0xXXXX
        Port 1:
                State: Active
                Physical state: LinkUp
                Rate: 25
                Base lid: 0
                LMC: 0
                SM lid: 0
                Capability mask: 0x00010000
                Port GUID: 0xXXXX
                Link layer: Ethernet

ibdev2netdev: 查询物理设备对应的linux网络设备

# ibdev2netdev
mlx5_0 port 1 ==> ens785f1 (Up)
  1. 获取固件允许配置的最大VFs数量
# cat /sys/class/net/ens785f1/device/sriov_totalvfs
4

注: 这是一个只读参数,应该与上面命令中固件中配置的数字一致。
mlxconfig -d /dev/mst/mt4115_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=4
注:如果看不到这个参数,说明 intel_iommu=on 没有被正确的配置到grub中

  1. 获取设备当前VF数量

以下几种方式都可以:

# cat /sys/class/net/ens785f1/device/sriov_numvfs
0

# cat /sys/class/net/ens785f1/device/mlx5_num_vfs
0

注:如果命令失败,可能意味着驱动没有被加载。

注: mlx5_num_vfs参数和sriov_numvfs的区别是mlx5_num_vfs总是存在的,即使操作系统没有加载虚拟化模块(在grub文件中添加intel_iommu支持)。sriov_numvfs只有在intel_iommu被添加到grub文件时才显示。所以,如果你没有看到sriov_numvfs文件,请重新检查intel_iommu是否被添加到上述的grub文件中。

注:不同的内核版本可能没有上述所有选项。

  1. 设置所需的VFs数量。

VF的数量可以通过两个参数来设置,取决于内核的版本。

有几种方法可以做到这一点。

# option 1:
$ echo 4 > /sys/class/net/ens785f1/device/sriov_numvfs

# option 2:
$ echo 4 > /sys/class/net/ens785f1/device/mlx5_num_vfs
4

# check numvfs
$ cat /sys/class/net/ens785f1/device/sriov_numvfs
4
  1. 改变VF的数量是不持久的,在服务器重启后就不存在了
  2. 写入sysfs文件来配置numvfs时适用以下规则:
    • 如果没有分配VF,VF的数量可以改变为任何有效的值(0-FW刻录期间设置的最大#VF)。
    • 如果有分配给虚拟机的VF,就不可能改变VF的数量。
    • 如果管理员在没有分配VF的情况下卸载PF上的驱动程序,驱动程序将被卸载,SRI-OV将被禁用。
    • 如果在PF的驱动器被卸载时有分配的VF,SR-IOV将不会被禁用。这意味着VF将在虚拟机上可见。但是它们将不可操作。这适用于使用pci_stub而不是vfio的内核的操作系统。
  • VF驱动会发现这种情况并关闭其资源
  • 当PF上的驱动程序被重新加载时,VF就变得可操作了。VF的管理员将需要重新启动驱动程序,以便恢复与VF的工作。
  1. 检查PCI bus:
# lspci -D | grep Mellanox
0000:05:00.0 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4]
0000:05:00.1 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4]
0000:05:00.6 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4 Virtual Function]
0000:05:00.7 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4 Virtual Function]
0000:05:01.0 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4 Virtual Function]
0000:05:01.1 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4 Virtual Function]
0000:81:00.0 Network controller: Mellanox Technologies MT27520 Family [ConnectX-3 Pro]

# ibdev2netdev -v
0000:81:00.0 mlx4_0 (MT4103 - MT1521X02584) CX354A - ConnectX-3 Pro QSFP fw 2.33.5100 port 1 (ACTIVE) ==> ens817 (Up)
0000:81:00.0 mlx4_0 (MT4103 - MT1521X02584) CX354A - ConnectX-3 Pro QSFP fw 2.33.5100 port 2 (ACTIVE) ==> ens817d1 (Up)
0000:05:00.0 mlx5_0 (MT4115 - MT1530X08465) CX456A - ConnectX-4 QSFP fw 12.12.0780 port 1 (DOWN ) ==> ens785f0 (Down)
0000:05:00.1 mlx5_1 (MT4115 - MT1530X08465) CX456A - ConnectX-4 QSFP fw 12.12.0780 port 1 (ACTIVE) ==> ens785f1 (Up)
0000:05:00.6 mlx5_2 (MT4116 - MT1530X08465) CX456A - ConnectX-4 QSFP fw 12.12.0780 port 1 (ACTIVE) ==> ens785f6 (Up)
0000:05:00.7 mlx5_3 (MT4116 - MT1530X08465) CX456A - ConnectX-4 QSFP fw 12.12.0780 port 1 (ACTIVE) ==> ens785f7 (Up)
0000:05:01.0 mlx5_4 (MT4116 - MT1530X08465) CX456A - ConnectX-4 QSFP fw 12.12.0780 port 1 (ACTIVE) ==> enp5s1 (Up)
0000:05:01.1 mlx5_5 (MT4116 - MT1530X08465) CX456A - ConnectX-4 QSFP fw 12.12.0780 port 1 (ACTIVE) ==> enp5s1f1 (Up)

可以看到4个VFs和1个PF

PCI Function VF number
0000:05:00.6 0
0000:05:00.7 1
0000:05:01.0 2
0000:05:01.1 3

注: Functions 05:00:2, 05:00:3, 05:00:4, 05:00:5 给mlx5_0设备保留着

  1. 用ip工具检查VFs配置
$ ip link show
...
9: ens785f1:  mtu 9000 qdisc mq state UP mode DEFAULT qlen 1000
link/ether e4:1d:2d:f2:a4:89 brd ff:ff:ff:ff:ff:ff
vf 0 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
vf 1 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
vf 2 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
vf 3 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
...
  1. 给VF设置 mac 地址
$ echo 0000:05:00.6 > /sys/bus/pci/drivers/mlx5_core/unbind
$ ip link set ens785f1 vf 0 mac 00:22:33:44:55:66

$ echo 0000:05:00.6 > /sys/bus/pci/drivers/mlx5_core/bind
$ ip link show
...
9: ens785f1:  mtu 9000 qdisc mq state UP mode DEFAULT qlen 1000
link/ether e4:1d:2d:f2:a4:89 brd ff:ff:ff:ff:ff:ff
vf 0 MAC 00:22:33:44:55:66, spoof checking off, link-state auto
vf 1 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
vf 2 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
vf 3 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
...

通过lspci -D 来获取完整的PCI地址

  1. 更多配置:
    更多配置详见: HowTo Set Virtual Network Attributes on a Virtual Function (SR-IOV)

SR-IOV功能配置

配置以太网Virtual Function

SR-IOV虚拟功能配置可以通过Hypervisor iprout2/netlink工具完成。没有的话,可以通过sysfs完成。

ip link:

ip link set { dev DEVICE | group DEVGROUP } [ { up | down } ]
...
[ vf NUM [ mac LLADDR ] [ vlan VLANID [ qos VLAN-QOS ] ]
...
[ spoofchk { on | off} ] ]
...

sysfs:

sysfs configuration (ConnectX-4):
/sys/class/net/enp8s0f0/device/sriov/[VF]
 
+-- [VF]
| +-- config
| +-- link_state
| +-- mac
| +-- mac_list
| +-- max_tx_rate
| +-- min_tx_rate
| +-- spoofcheck
| +-- stats
| +-- trunk
| +-- trust
| +-- vlan

VLAN访客标签(VGT)和VLAN交换机标签(VST)

当eth端口运行在VGT(VLAN Guest Tagging)模式时,端口会直接透传来自VF的数据包(包括VLAN标记),或者管理员可以配置Hypervisor将端口的数据包静默强制的与VLAN/Qos相关联(VLAN Switch Tagging)。
在后一种情况下,从访客发出的无标记或优先级标记的数据包将被插入VLAN标记,而传入的数据包将被移除VLAN标记。
默认行为是VGT。

要配置 VF 成 VST模式,运行:

ip link set dev  vf  vlan  [qos ]
where:
NUM = 0..max-vf-num
vlan_id = 0..4095
qos = 0..7

For example:
# sets VST mode for VF #2 belonging to PF eth2, with vlan_id = 10 and qos = 3
ip link set dev eth2 vf 2 vlan 10 qos 3 
# sets mode for VF 2 back to VGT
ip link set dev eth2 vf 2 vlan 0 

注:在ConnectX-3网卡系列中,切换到VGT模式也可以通过设置vlan_id为4095来完成。

其他以太网VF配置选项

访客MAC配置
默认情况下,访客MAC地址被配置为全部为零。如果希望Guest总是以相同的MAC启动,应该在来Guest动启动前配置MAC。
通过以下方式进行配置:

ip link set dev  vf  mac 

对于CX-4和传统Guest,他们不会生成随机的mac地址,管理员应该总是配置他们的 mac 地址。

Spoof checking
目前只适用于3.1以上的内核。

ip link set dev  vf  spoofchk [on | off]

**Guest Link State **

ip link set dev  vf  state [enable| disable| auto]

VF统计

VF统计数据可以通过sysfs查询到:

cat /sys/class/infiniband/mlx5_2/device/sriov/2/stats
tx_packets : 5011
tx_bytes : 4450870
tx_dropped : 0
rx_packets : 5003
rx_bytes : 4450222
rx_broadcast : 0
rx_multicast : 0
tx_broadcast : 0
tx_multicast : 8
rx_dropped : 0

MAC转发数据库(FDB)管理

FDB也被称为转发信息库(FIB)或转发表,最常用于网络桥接(bridging)、路由和类似的功能,以找到输入接口应转发数据包到适当出口。
以太网驱动程序在VF和PF之间共享一个表,可以存储128个MAC:

  • 每个VF得到2个预留的MAC(从128个MAC的总池中抽取)。
  • 每个VF/PF最多可以申请128个MAC,采用先申请先得的政策(除了每个VF预留的2个MAC,池子里的其他MAC可以自由申请)。

查看接口可用的MAC数量:

cat /sys/class/net/eth2/fdb_det
device eth2: max: 112, used: 2, free macs: 110

添加新的MAC到接口:

echo + > /sys/class/net/eth/fdb

一旦运行上述命令,接口(VF/PF)将验证是否存在空闲的MAC。如果有空闲的MAC,VF/PF会从全局池中获取并分配它。如果没有空闲的MAC,就会返回一个错误,通知用户池中MAC已满。

从接口中删除MAC:

echo - > /sys/class/net/eth/fdb

如果 /sys/class/net/eth/fdb 不存在,使用ip-route2中的bridge工具,它包含管理FDB表的功能,因为内核支持FDB回掉。

bridge fdb add 00:01:02:03:04:05 permanent self dev p3p1
bridge fdb del 00:01:02:03:04:05 permanent self dev p3p1
bridge fdb show dev p3p1

如果添加mac地址时,内核函数返回失败,因为池子中MAC地址已满,将会发生以下错误:

  • 如果该接口是PF,它将自动进入混杂模式
  • 如果接口是VF,它将尝试进入混杂模式,如果它不支持混杂模式,该操作将失败,并在内核的日志中打印出一个错误。

虚拟客户标记(VGT+)

VGT+是虚拟客户标记(VGT)的高级模式,允许VF像VGT那样标记自己的数据包,但受到VLAN trunk策略的约束。该策略决定了哪些VLAN ID被允许被传输或接收。该策略不决定用户优先级,用户优先级保持不变。
数据包可以以下列模式之一发送:要么允许VF发送/接收无标记的流量,要没不允许。
VGT+模式,不会为端口定义默认VLAN。发送的数据包只有在与集合相匹配时才会传给eSwitch,而接收的数据包只有在与集合相匹配时才会转发给VF。

为CX-3配置VGT+

以下是目前VGT+的限制:

  • VLAN集合的大小被定义为最多10个VLAN,包括为无标记/优先级标记的流量添加的VLAN 0。
  • 这种行为适用于所有VF流量:普通以太网和所有RoCE传输。
  • VGT+允许的VLAN集合只有在VF激活时才能扩展
  • 只有在VF重置后,配置的集合才会生效
  • VGT+仅在DMFS模式下可用

默认的模式是VGT:

cat /sys/class/net/eth5/vf0/vlan_set
oper:
admin:

启用VGT+模式:

  1. 设置相应的端口及VF(在下面的例子中,是端口eth5 VF0)允许的VLANs列表。

    echo 0 1 2 3 4 5 6 7 8 9 > /sys/class/net/eth5/vf0/vlan_set
    

    其中0指定是否允许无标记/优先级标记的流量。

  2. 重新启动相关的虚拟机以使更改生效,或者运行:/etc/init.d/openibd重新启动

禁用VGT+模式:

  1. 设置VLAN为空

    echo > /sys/class/net/eth5/vf0/vlan_set
    
  2. 重新启动相关的虚拟机以使更改生效,或者运行:/etc/init.d/openibd重新启动

为CX-4/CX-5配置VGT+

配置允许的VLANs到对应的端口及VF下(例中是端口 eth5,vf 0):

echo "  " > /sys/class/net/eth5/device/sriov/0/trunk

# 添加 4-15 VLAN到trunk
echo add 4 15 > /sys/class/net/eth5/device/sriov/0/trunk

# 添加单个VLAN到trunk
echo add 17 17 > /sys/class/net/eth5/device/sriov/0/trunk

当VLAN ID=0时,允许无VLAN和无QOS的流量通过

禁用VGT+模式,删除所有的VLANs:

echo rem 0 4095 > /sys/class/net/eth5/device/sriov/0/trunk

删除指定的VLANs,同添加,add改为rem


  1. Host Channel Adapter(HCA)一词通常用于描述InfiniBand接口卡。 ↩

你可能感兴趣的:(SR-IOV: Mellanox OFED v5.0 用户手册【译】)