SR-IOV
单根 I/O 虚拟化 (SR-IOV) 使物理 PCIe 设备能够在 PCIe 总线上呈现多个虚拟实例。这项技术允许设备为每个虚拟实例分配单独的资源。NVIDIA® ConnectX® 适配器每个端口最多支持 127 个 VF,允许独立配置每个 VF。
VF 充当连接到 PF 的附加设备,共享 PF 的资源并具有相同数量的端口。SR-IOV 通常与启用 SR-IOV 的虚拟机监控程序一起使用,为虚拟机提供对网络资源的直接硬件访问,从而显著提高性能。
本章演示如何在 Red Hat Linux 环境中使用 ConnectX VPI 适配器设置和配置 SR-IOV。
要设置 SR-IOV 环境,需要以下条件
MLNX_OFED 驱动程序
具有支持 SR-IOV 的主板 BIOS 的服务器/刀片
支持 SR-IOV 的虚拟机监控程序,例如:Red Hat Enterprise Linux Server Version 6
具有 SR-IOV 功能的 NVIDIA ConnectX® VPI 适配器卡系列
根据您的系统,执行以下步骤来设置您的 BIOS。本节中使用的图示仅供说明之用。有关更多信息,请参阅相应的 BIOS 用户手册
在系统 BIOS 中启用“SR-IOV”。
启用“Intel 虚拟化技术”。
安装支持 SR-IOV 的虚拟机监控程序。
根据您的系统,更新
/boot/grub/grub.conf
文件以包含与 Linux 内核类似的命令行加载参数。例如,对于 Intel 系统,添加
default
=0
timeout=5
splashimage=(hd0,0
)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux Server (4
.x.x) root (hd0,0
) kernel /vmlinuz-4
.x.x ro root=/dev/VolGroup00/LogVol00 rhgb quiet intel_iommu=on initrd /initrd-4
.x.x.img注意确保在更新
/boot/grub/grub.conf
文件时,参数intel_iommu=on
存在,否则无法加载 SR-IOV。某些操作系统使用/boot/grub2/grub.cfg
文件。如果您的服务器使用此类文件,请编辑此文件(在以linux16
开头的行末尾添加intel_iommu=on
)。
要在以太网模式下设置 SR-IOV,请参阅 HowTo Configure SR-IOV for ConnectX-4/ConnectX- 5/ConnectX-6 with KVM (Ethernet) 社区帖子。
安装支持 SR-IOV 的 Linux 版 MLNX_OFED 驱动程序。
检查固件中是否启用了 SR-IOV。
mlxconfig -d /dev/mst/mt4115_pciconf0 q Device #
1
: ---------- Device type: Connect4 PCI device: /dev/mst/mt4115_pciconf0 Configurations: Current SRIOV_EN1
NUM_OF_VFS8
注意如果需要,使用 mlxconfig 设置相关字段
mlxconfig -d /dev/mst/mt4115_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=16
重启服务器。
将您需要为 PF 创建的虚拟功能数量写入 sysfs 文件。您可以使用以下等效文件之一
您可以使用以下等效文件之一
- 标准 Linux 内核生成的文件,可在新内核中使用。
echo [num_vfs] > /sys/
class
/infiniband/mlx5_0/device/sriov_numvfs注意:只有在 grub.conf 文件中设置了 IOMMU(通过添加 intel_iommu=on,如“设置 SR-IOV”下的第四步所示)时,才会生成此文件。
- mlx5_core 驱动程序生成的文件,其功能与内核生成的文件相同。
echo [num_vfs] > /sys/
class
/infiniband/mlx5_0/device/mlx5_num_vfs注意:旧内核使用此文件,这些内核不支持标准文件。在这样的内核中,使用 sriov_numvfs 会导致以下错误:“bash: echo: write error: Function not implemented”。
以下规则适用于写入这些文件
- 如果没有分配 VF,则 VF 的数量可以更改为任何有效值(0 - 最大 #VF,如 FW 烧录期间设置)
- 如果有 VF 分配给 VM,则无法更改 VF 的数量
- 如果管理员在没有分配 VF 的情况下卸载 PF 上的驱动程序,则驱动程序将卸载,并且 SRI-OV 将被禁用
- 如果在卸载 PF 驱动程序时分配了 VF,则 SR-IOV 不会被禁用。这意味着 VF 在 VM 上可见。但是,它们将无法运行。这适用于使用 pci_stub 而不是 vfio 的操作系统。
- VF 驱动程序将发现这种情况并将关闭其资源
- 当 PF 上的驱动程序重新加载时,VF 将变为可操作。VF 的管理员将需要重新启动驱动程序才能恢复使用 VF。
加载驱动程序。验证 VF 是否已创建。运行
lspci | grep Mellanox
08
:00.0
Infiniband controller: Mellanox Technologies MT27700 Family [ConnectX-4
]08
:00.1
Infiniband controller: Mellanox Technologies MT27700 Family [ConnectX-4
]08
:00.2
Infiniband controller: Mellanox Technologies MT27700 Family [ConnectX-4
Virtual Function]08
:00.3
Infiniband controller: Mellanox Technologies MT27700 Family [ConnectX-4
Virtual Function]08
:00.4
Infiniband controller: Mellanox Technologies MT27700 Family [ConnectX-4
Virtual Function]08
:00.5
Infiniband controller: Mellanox Technologies MT27700 Family [ConnectX-4
Virtual Function]配置 VF。
创建 VF 后,每个 VF 都有 3 个 sysfs 条目,位于 /sys/class/infiniband/mlx5_<PF INDEX>/device/sriov 下(以下显示 VF 0 到 2 的情况)
+--
0
| +-- node | +-- policy | +-- port +--1
| +-- node | +-- policy | +-- port +--2
+-- node +-- policy +-- port对于每个虚拟功能,以下文件可用
- 节点 - 节点的 GUID
用户可以通过写入 /sys/class/infiniband/<PF>/device/sriov/<index>/node 文件来设置节点 GUID。下面的示例显示了如何设置 mlx5_0 的 VF 0 的节点 GUID。
echo
00
:11
:22
:33
:44
:55
:1
:0
> /sys/class
/infiniband/mlx5_0/device/sriov/0
/node- 端口 - 端口的 GUID
用户可以通过写入 /sys/class/infiniband/<PF>/device/sriov/<index>/port 文件来设置端口 GUID。下面的示例显示了如何设置 mlx5_0 的 VF 0 的端口 GUID。
echo
00
:11
:22
:33
:44
:55
:2
:0
> /sys/class
/infiniband/mlx5_0/device/sriov/0
/port- 策略 - vport 的策略。用户可以通过写入 /sys/class/infiniband/<PF>/device/sriov/<index>/port 文件来设置端口 GUID。策略可以是以下之一
- Down - VPort PortState 保持“Down”
- Up - 如果当前的 VPort PortState 为“Down”,则将其修改为“Initialize”。在所有其他状态下,它保持不变。结果是 SM 可能会启动 VPort。
- Follow - 遵循物理端口的 PortState。如果物理端口的 PortState 为“Active”,则 VPort 实现“Up”策略。否则,VPort PortState 为“Down”。
注意:
- 在 PF 驱动程序重启后,所有 vport 的策略都初始化为“Down”,但 VPort0 除外,PF 驱动程序将其策略修改为“Follow”。
- 要查看 VF 配置,您必须取消绑定并绑定它们,或者如果 VF 已分配,则重启 VM。
确保 OpenSM 支持虚拟化(必须启用虚拟化)。
/etc/opensm/opensm.conf 文件应包含以下行
virt_enabled
2
注意OpenSM 和任何其他使用 SMP MAD 的实用程序(
ibnetdiscover
、sminfo
、iblink-info
、smpdump
、ibqueryerr
、ibdiagnet
和smpquery
)应在 PF 上而不是在 VF 上运行。在多 PF(多主机)的情况下,OpenSM 应在 host0 上运行。
VF 初始化注意事项
由于同一个 mlx5_core 驱动程序同时支持物理功能和虚拟功能,因此一旦创建了 VF,PF 的驱动程序将尝试初始化它们,以便它们可供拥有 PF 的操作系统使用。如果要将 VF 分配给 VM,则需要确保 PF 驱动程序未使用该 VF。如果 VF 正在使用,您应先取消绑定它,然后再分配给 VM。
要取消绑定设备,请使用以下命令
获取设备的完整 PCIe 地址。
lspci -D
示例
0000
:09
:00.2
取消绑定设备。
echo
0000
:09
:00.2
> /sys/bus/pci/drivers/mlx5_core/unbind绑定未绑定的 VF。
echo
0000
:09
:00.2
> /sys/bus/pci/drivers/mlx5_core/bind
PF 和 VF 的 PCI BDF 映射
PF 及其 VF 的 PCI 地址是连续的。假设卡的 PCIe 插槽为 05:00,并且它有 2 个端口,则 PF 的 PCI 地址将为 05:00.0 和 05:00.1。
假设每个 PF 有 3 个 VF,则 VF 的 PCI 地址将为
05
:00.2
-4
for
VFs 0
-2
of PF 0
(mlx5_0)
05
:00.5
-7
for
VFs 0
-2
of PF 1
(mlx5_1)
将虚拟功能分配给虚拟机
本节介绍将 SR-IOV VF 添加到虚拟机的机制。
将 SR-IOV 虚拟功能分配给 Red Hat KVM VM 服务器
运行 virt-manager。
双击虚拟机并打开其“属性”。
转到“详细信息”→“添加硬件”→“PCI 主机设备”。
根据 NVIDIA 虚拟功能的 PCI 设备(例如,00:03.1)选择一个
如果虚拟机已启动,则重启它,否则启动它。
登录到虚拟机并验证它是否识别 NVIDIA 卡。运行
lspci | grep Mellanox
示例:
lspci | grep Mellanox
01
:00.0
Infiniband controller: Mellanox Technologies MT28800 Family [ConnectX-5
Ex]将设备添加到
/etc/sysconfig/network-scripts/ifcfg-ethX
配置文件。每个虚拟功能的 MAC 地址都是随机配置的,因此无需添加它。
运行 SR-IOV 时的以太网虚拟功能配置
SR-IOV 虚拟功能配置可以通过虚拟机监控程序 iprout2/netlink 工具完成(如果存在)。否则,可以通过 sysfs 完成。
ip link set { dev DEVICE | group DEVGROUP } [ { up | down } ]
...
[ vf NUM [ mac LLADDR ] [ vlan VLANID [ qos VLAN-QOS ] ]
...
[ spoofchk { on | off} ] ]
...
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)
在 VGT 上运行 ETH 端口时,可以将端口配置为简单地按原样传递来自 VF 的数据包(VLAN 访客标记),或者管理员可以将虚拟机监控程序配置为静默地强制数据包与 VLAN/Qos 关联(VLAN 交换机标记)。
在后一种情况下,来自访客的未标记或优先级标记的传出数据包将插入 VLAN 标记,而传入数据包将删除 VLAN 标记。
默认行为是 VGT。
要配置 VF VST 模式,请运行
ip link set dev <PF device> vf <NUM> vlan <vlan_id> [qos <qos>]
其中
NUM = 0..max-vf-num
vlan_id = 0..4095
qos = 0..7
例如
ip link set dev eth2 vf 2 vlan 10 qos 3
- 为属于 PF eth2 的 VF #2 设置 VST 模式,vlan_id = 10 和 qos = 3ip link set dev eth2 vf 2 vlan 0
- 将 VF 2 的模式设置回 VGT
其他以太网 VF 配置选项
访客 MAC 配置 – 默认情况下,访客 MAC 地址配置为全零。如果管理员希望访客始终以相同的 MAC 启动,他/她应在访客驱动程序启动之前配置访客 MAC。访客 MAC 可以通过使用以下方式配置
ip link set dev <PF device> vf <NUM> mac <LLADDR>
对于不生成随机 MAC 的旧版和 ConnectX-4 访客,管理员应始终通过 IP link 配置其 MAC 地址,如上所述。
欺骗检查 – 欺骗检查目前仅在 3.1 以上的最新内核上可用。
ip link set dev <PF device> vf <NUM> spoofchk [on | off]
访客链路状态
ip link set dev <PF device> vf <UM> state [enable| disable| auto]
虚拟功能统计信息
可以通过 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
将 VF 映射到端口
要查看 VF 到端口的映射
使用 ip link 工具 v2.6.34~3 及更高版本。
ip link
输出
61
: p1p1: <BROADCAST,MULTICAST> mtu 1500
qdisc noop state DOWN mode DEFAULT group default
qlen 1000
link/ether 00
:02
:c9:f1:72
:e0 brd ff:ff:ff:ff:ff:ff
vf 0
MAC 00
:00
:00
:00
:00
:00
, vlan 4095
, spoof checking off, link-state auto
vf 37
MAC 00
:00
:00
:00
:00
:00
, vlan 4095
, spoof checking off, link-state auto
vf 38
MAC ff:ff:ff:ff:ff:ff, vlan 65535
, spoof checking off, link-state disable
vf 39
MAC ff:ff:ff:ff:ff:ff, vlan 65535
, spoof checking off, link-state disable
当 MAC 为 ff:ff:ff:ff:ff:ff
时,VF 未分配给它列出的网络设备的端口。在上面的示例中,vf38
未分配给与 p1p1
相同的端口,这与 vf0
相反。
但是,即使未分配给网络设备的 VF 也可以用于设置和更改其设置。例如,以下是更改欺骗检查的有效命令
ip link set dev p1p1 vf 38
spoofchk on
此命令将仅影响 vf38
。更改可以在分配此设备的网络设备的 ip link 中看到。
RoCE 支持
RoCE 在虚拟功能上受支持,VLAN 可以与它一起使用。对于 RoCE,虚拟机监控程序 GID 表大小为 16 个条目,而 VF 共享剩余的 112 个条目。当 VF 的数量大于 56 个条目时,其中一些 VF 的 GID 表将只有一个条目,如果 VF 的以太网设备分配了 IP 地址,这将是不够的。
虚拟访客标记 (VGT+)
VGT+ 是虚拟访客标记 (VGT) 的增强模式,允许虚拟功能 (VF) 标记自己的数据包,同时遵守管理 VLAN 中继策略。此策略指定允许传输和接收的 VLAN ID,但不影响用户优先级,用户优先级保持不变。
数据包可以在两种模式之一中发送:是否能够处理未标记和优先级标记的流量。VGT+ 未为其端口定义默认 VLAN。仅当传出数据包符合策略时,才会将其传递到 eSwitch,并且仅当传入数据包满足定义的条件时,才会将其转发到 VF。
配置
在 SR-IOV 中工作时,默认操作模式是 VGT。
要启用 VGT+ 模式,请设置允许的 VLAN 范围的相应端口/VF(在下面的示例中为端口 eth5,VF0)
echo "<add> <start_vid> <end_vid>"
> /sys/class
/net/eth5/device/sriov/0
/trunk
示例
要将 VLAN ID 范围 (4-15) 添加到中继
echo add
4
15
> /sys/class
/net/eth5/device/sriov/0
/trunk要将单个 VLAN ID 添加到中继
echo add
17
17
> /sys/class
/net/eth5/device/sriov/0
/trunk
当 VLAN ID = 0 时,表示允许未标记和优先级标记的流量。
要禁用 VGT+ 模式,请确保删除所有 VLAN
echo rem 0
4095
> /sys/class
/net/eth5/device/sriov/0
/trunk
要删除选定的 VLAN
从中继中删除 VLAN ID 范围 (4-15)
echo rem
4
15
> /sys/class
/net/eth5/device/sriov/0
/trunk从中继中删除单个 VLAN ID
echo rem
17
17
> /sys/class
/net/eth5/device/sriov/0
/trunk
SR-IOV 高级安全功能
SR-IOV MAC 防欺骗
通常,MAC 地址是分配给网络接口的唯一标识符,它们是无法更改的固定地址。MAC 地址欺骗是一种更改 MAC 地址以服务于不同目的的技术。在某些情况下,更改 MAC 地址可能是合法的,而在其他情况下,它可能是非法的,并且会滥用安全机制或伪装可能的攻击者。
SR-IOV MAC 地址防欺骗功能,也称为 MAC 欺骗检查,可防止恶意 VM MAC 地址伪造。如果网络管理员为 VF 分配了 MAC 地址(通过虚拟机监控程序)并在其上启用了欺骗检查,这将限制最终用户只能从该 VF 的分配 MAC 地址发送流量。
MAC 防欺骗配置
默认情况下,MAC 防欺骗已禁用。
在下面的配置示例中,VM 位于 VF-0 上,MAC 地址为 11:22:33:44:55:66。
有两种方法可以启用或禁用 MAC 防欺骗
使用标准 IP link 命令 - 从 Kernel 3.10 及更高版本可用。
要启用 MAC 防欺骗,请运行
ip link set ens785f1 vf
0
spoofchk on要禁用 MAC 防欺骗,请运行
ip link set ens785f1 vf
0
spoofchk off
指定“ON”或“OFF”回显到位于
/sys/class/net/<if-name>/device/sriov/<VF-index>/spoofcheck
下的文件。要启用 MAC 防欺骗,请运行
echo
"ON"
> /sys/class
/net/ens785f1/vf/0
/spoofchk要禁用 MAC 防欺骗,请运行
echo
"OFF"
> /sys/class
/net/ens785f1/vf/0
/spoofchk
此配置是非持久性的,并且在驱动程序重启后不会保留。
每个 VF 的限制和带宽共享
此功能支持在 SR-IOV 模式下限制每个 VF 的流量速率。有关如何为 ConnectX-4 及更高版本适配器卡配置每个 VF 的速率限制的详细信息,请参阅 HowTo Configure Rate Limit per VF for ConnectX-4/ConnectX-5/ConnectX-6 社区帖子。
限制 VF 组的带宽
vSwitch (OVS) 的 VF 速率限制功能允许用户将可用的 VF 加入组,并设置每个组的速率限制。VF 组的速率限制确保此组中的 VF 获取的总 Tx 带宽(总共组合)不会超过给定的值。
使用此功能,VF 仍然可以像过去一样配置单独的速率限制(在 /sys/class/net/ 下案例 1:组的速率限制设置为 20G。每个 VF 的速率限制为 15G
结果:每个 VF 的速率限制为 10G案例 2:组的最大速率限制仍设置为 20G。VF 0 配置为 30G 限制,而 VF 1 配置为 5G 速率限制
结果:VF 0 实际上将具有 15G。VF 1 将具有 5G经验法则是组的带宽在组中的 VF 数量之间平均分配。如果还有剩余,它们将分配给尚未达到其单独速率限制的 VF。
VF 速率限制功能配置
当 FW 支持 VF 速率组时,驱动程序将在 SRI-OV sysfs 中创建一个名为“groups”的新层次结构 (/sys/class/net/<ifname>/device/sriov/groups/)。它将包含 VF 组的所有信息和允许的配置。
所有 VF 默认都放在组 0 中,因为它是初始驱动程序启动后唯一存在的组。它将是 /sys/class/net/<ifname>/device/sriov/groups/ 下唯一可用的组
VF 可以通过写入组文件移动到不同的组 -> echo $GROUP_ID > /sys/class/net/<ifname>/device/sriov/<vf_id>/group
允许的组 ID 为 0-255
仅当组中至少有 1 个 VF 时,/sys/class/net/<ifname>/device/sriov/groups/ 下才会有组配置可用(组 0 除外,即使它为空也始终可用)。
一旦创建了组(通过将至少 1 个 VF 移动到该组),用户就可以配置组的速率限制。例如
echo 10000 > /sys/class/net/<ifname>/device/sriov/5/max_tx_rate
– 将 VF 5 的单独速率限制设置为 10G(可选)echo 7 > /sys/class/net/<ifname>/device/sriov/5/group
– 将 VF 5 移动到组 7echo 5000 > /sys/class/net/<ifname>/device/sriov/groups/7/max_tx_rate
– 将组 7 的速率限制设置为 5G当现在通过 VF 5 运行流量时,由于组速率限制,它将被限制为 5G,即使 VF 本身被限制为 10G
echo 3 > /sys/class/net/<ifname>/device/sriov/5/group
– 将 VF 5 移动到组 3组 7 现在将从
/sys/class/net/<ifname>/device/sriov/groups
中消失,因为它有 0 个 VF。组 3 现在将出现。由于组 3 上没有速率限制,VF 5 可以以 10G 的速率传输(由于其单独的配置)。
注意
您可以在
stats
sysfs 中查看 VF 所属的组(即,cat /sys/class/net/<ifname>/device/sriov/<vf_num>/stats
)您可以在组的
config
sysfs 中查看组的当前速率限制和附加的 VF 数量(即,cat /sys/class/net/<ifname>/device/sriov/groups/<group_id>/config
)
每个 VF 组的带宽保证
可以在 VF 组上设置带宽保证(最小 BW),以确保此组能够 至少 在线路上指定的带宽量进行传输。
请注意以下事项
VF 组上的最小 BW 设置决定了组之间如何共享总 BW。它不影响单个 VF 的速率设置。
VF 组上设置的总最小 BW 不应超过总线路速率。否则,结果将是意外的。
仍然可以在组内的单个 VF 上设置最小 BW。这将决定 VF 之间如何共享组的最小 BW。VF 成员的总最小 BW 不应超过组的最小 BW。
有关如何创建 VF 组的说明,请参阅上面的 限制 VF 组的带宽。
示例
使用 40Gb 链路速度,假设已创建 4 个组和默认组 0
echo 20000
> /sys/class
/net/<ifname>/device/sriov/group/1
/min_tx_rate
echo 5000
> /sys/class
/net/<ifname>/device/sriov/group/2
/min_tx_rate
echo 15000
> /sys/class
/net/<ifname>/device/sriov/group/3
/min_tx_rate
Group 0
(default
) : 0
- No BW guarantee is configured.
Group 1
: 20000
- This is the maximum min rate among groups
Group 2
: 5000
which is 25
% of the maximum min rate
Group 3
: 15000
which is 75
% of the maximum min rate
Group 4
: 0
- No BW guarantee is configured.
假设所有组中都有 VF 尝试以全线路速率传输,则结果将如下所示:在这种情况下,最小 BW 分配将为
Group0 – Will have no BW to use since no BW guarantee was set on it while
other groups do
have such settings.
Group1 – Will transmit at 20Gb/s
Group2 – Will transmit at 5Gb/s
Group3 – Will transmit at 15Gb/s
Group4 - Will have no BW to use since no BW guarantee was set on it while
other groups do
have such settings.
特权 VF
如果恶意驱动程序在一个 VF 上运行,并且该 VF 的权限不受限制,则可能会打开安全漏洞。但是,VF 可以标记为受信任,因此可以接收物理功能特权或权限的独占子集。例如,在允许所有 VF 而不是特定 VF 进入混杂模式作为特权的情况下,这将使恶意用户能够嗅探和监视整个物理端口的传入流量,包括针对其他 VF 的流量,这被认为是严重的安全漏洞。
特权 VF 配置
在下面的配置示例中,VM 位于 VF-0 上,并且具有以下 MAC 地址:11:22:33:44:55:66。
有两种方法可以启用或禁用信任
使用标准 IP link 命令 - 从 Kernel 4.5 及更高版本可用。
要为特定 VF 启用信任,请运行
ip link set ens785f1 vf
0
trust on要为特定 VF 禁用信任,请运行
ip link set ens785f1 vf
0
trust off
指定“ON”或“OFF”回显到位于 /sys/class/net/<ETH_IF_NAME> / device/sriov/<VF index>/trust 下的文件。
要为特定 VF 启用信任,请运行
echo
"ON"
> /sys/class
/net/ens785f1/device/sriov/0
/trust要为特定 VF 禁用信任,请运行
echo
"OFF"
> /sys/class
/net/ens785f1/device/sriov/0
/trust
探测到的 VF
启用 SR-IOV 后探测虚拟功能 (VF) 可能会消耗适配器卡的资源。因此,建议在不需要监视 VM 时不要启用 VF 探测。
VF 探测可以通过两种方式禁用,具体取决于服务器上安装的内核版本
如果安装的内核版本为 v4.12 或更高版本,建议使用 PCI sysfs 接口
sriov_drivers_autoprobe
。有关更多信息,请参阅 linux-next 分支 。如果安装的内核版本低于 v4.12,建议使用 mlx5_core 模块参数 probe_vf 和驱动程序版本 4.1 或更高版本。
示例:
echo 0
> /sys/module/mlx5_core/parameters/probe_vf
有关如何探测 VF 的更多信息,请参阅 HowTo Configure and Probe VFs on mlx5 Drivers社区帖子。
VF 混杂接收模式
VF 混杂模式
VF 可以进入混杂模式,除了最初针对 VF 的流量外,还可以接收到达物理端口的未匹配流量和所有多播流量。未匹配流量是任何流量的 DMAC,它与任何 VF 或 PF 的 MAC 地址都不匹配。
注意:只有特权/受信任的 VF 才能进入 VF 混杂模式。
要为 VF 启用混杂模式,请运行
ifconfig eth2 promisc
要退出混杂模式,请运行
ifconfig eth2 –promisc
VF 全多播模式
VF 可以进入全多播模式,除了最初针对 VF 的流量外,还可以接收从/发送到同一物理端口上其他功能的所有多播流量。
注意:只有特权/受信任的 VF 才能进入全多播 RX 模式。
要为 VF 启用全多播模式,请运行
ifconfig eth2 allmulti
要退出全多播模式,请运行
#ifconfig eth2 –allmulti
要卸载 SR-IOV 驱动程序,请执行以下操作
对于虚拟机监控程序,从所有虚拟机 (VM) 中分离所有虚拟功能 (VF),或停止使用虚拟功能的虚拟机。
请注意,当有虚拟机使用 VF 时停止驱动程序,将导致机器挂起。
运行以下脚本。请注意,卸载驱动程序会删除整个驱动程序文件,但不会卸载驱动程序。
[root
@swl022
~]# /usr/sbin/ofed_uninstall.sh This program will uninstall all OFED packages on your machine. Do you want tocontinue
?[y/N]:y Running /usr/sbin/vendor_pre_uninstall.sh Removing OFED Software installations Running /bin/rpm -e --allmatches kernel-ib kernel-ib-devel libibverbs libibverbs-devel libibverbs-devel-static
libibverbs-utils libmlx4 libmlx4-devel libibcm libibcm-devel libibumad libibumad-devel libibumad-static
libibmad libibmad-devel libibmad-static
librdmacm librdmacm-utils librdmacm-devel ibacm opensm-libs opensm-devel perftest compat-dapl compat-dapl-devel dapl dapl-devel dapl-devel-static
dapl-utils srptools infiniband-diags-guest ofed-scripts opensm-devel warning: /etc/infiniband/openib.conf saved as /etc/infiniband/openib.conf.rpmsave Running /tmp/2818
-ofed_vendor_post_uninstall.sh重启服务器。