Single Root IO Virtualization (SR-IOV)二:SR-IOV 配置

本文介绍了如何在RedHatKVMVM服务器上配置SR-IOV,包括添加虚拟功能、VLAN配置、RoCE支持、VGT+模式、MAC反欺骗和VF限速等。此外,还讨论了VF的安全功能,如信任设置和混杂模式,确保网络安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SR-IOV 配置

将虚拟功能分配给虚拟机,本节介绍将 SR-IOV VF 添加到虚拟机的机制。

将 SR-IOV 虚拟功能分配给 Red Hat KVM VM 服务器

  1. 运行虚拟管理器。

  2. 双击虚拟机并打开其属性。

  3. 转至详细信息 → 添加硬件 → PCI 主机设备。
    在这里插入图片描述

  4. 根据其 PCI 设备选择 NVIDIA 虚拟功能(例如 00:03.1)

  5. 如果虚拟机已启动,则重新启动它,否则启动它。

  6. 登录虚拟机并验证它是否可以识别 NVIDIA 卡,执行:

lspci | grep Mellanox

示例:


lspci | grep Mellanox
01:00.0 Infiniband controller: Mellanox Technologies MT28800 Family [ConnectX-5 Ex]
  1. 将设备添加到/etc/sysconfig/network-scripts/ifcfg-ethX配置文件中。每个虚拟功能的MAC地址是随机配置的,因此不需要添加它。

运行 SR-IOV 时的以太网虚拟功能配置

SR-IOV 虚拟功能配置可以通过 Hypervisor 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

eg:

ip link set dev eth2 vf 2 vlan 10 qos 3 - 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 0 - sets mode for VF 2 back to VGT

虚拟功能统计

可以通过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 不会分配给它所列的网络设备的端口。在上面的示例中,vf 38没有分配给与p1p1相同的端口,这与vf0不同。
然而,即使未分配给网络设备的 VF 也可用于设置和更改其设置。例如,以下是更改欺骗检查的有效命令:

ip link set dev p1p1 vf 38 spoofchk on

该命令仅影响vf 38。可以在该设备分配到的网络设备上的 ip link 中看到更改。

RoCE 支持

虚拟功能支持 RoCE,并且 VLAN 可以与其一起使用。对于 RoCE,管理程序 GID 表大小为 16 个条目,而 VF 共享剩余的 112 个条目。当VF的数量大于56个条目时,其中一些VF的GID表只有单个条目,如果VF的以太网设备分配有IP地址,则这是不够的。

虚拟访客标记 (VGT+)

VGT+ 是虚拟访客标记 (VGT) 的高级模式,其中允许 VF 像 VGT 一样标记自己的数据包,但仍受管理 VLAN 中继策略的约束。该策略确定允许传输或接收哪些 VLAN ID。该策略未确定用户优先级,用户优先级保持不变。
数据包可以以下列模式之一发送:当允许 VF 发送/接收未标记和优先级标记流量时以及何时不允许。没有为 VGT+ 端口定义默认 VLAN。发送的报文只有符合该集合,才会被传递到eSwitch;收到的报文只有符合该集合,才会被转发到VF。

配置

在 SR-IOV 下工作时,默认工作模式为 VGT。

  1. 要启用 VGT+ 模式:

设置对应端口/VF(下例中为端口eth5、VF0)允许的VLAN范围。

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 时,表示允许未标记和优先级标记的流量

  1. 要禁用 VGT+ 模式,请确保删除所有 VLAN。
echo rem 0 4095 > /sys/class/net/eth5/device/sriov/0/trunk
  1. 删除选定的 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 欺骗检查)可防止恶意虚拟机 MAC 地址伪造。如果网络管理员将 MAC 地址分配给 VF(通过虚拟机管理程序)并对其启用欺骗检查,则这将限制最终用户仅从该 VF 的分配的 MAC 地址发送流量。

MAC 防欺骗配置

默认情况下,MAC 反欺骗功能处于禁用状态。

在下面的配置示例中,虚拟机位于 VF-0 上,具有以下 MAC 地址:11:22:33:44:55:66。
有两种方法可以启用或禁用 MAC 反欺骗:

  1. 使用标准 IP 链接命令 - 可从内核 3.10 及更高版本获得。
    要启用 MAC 反欺骗,请运行:
ip link set ens785f1 vf 0 spoofchk on

要禁用 MAC 反欺骗,请运行:

ip link set ens785f1 vf 0 spoofchk off
  1. 对位于 /sys/class/net/<ifname / device/sriov//spoofcheck 下的文件指定 echo“ON”或“OFF”。
    要启用 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 速率限制的详细信息,请参阅如何为 ConnectX-4/ConnectX-5/ConnectX-6 配置每个 VF 速率限制社区帖子。

限制每组 VF 的带宽

vSwitch 的 VF 速率限制 (OVS) 功能允许用户将可用的 VF 加入组并为每个组设置速率限制。VF 组的速率限制可确保该组中的 VF 获得的总 Tx 带宽(总计)不会超过给定值。
借助此功能,VF 仍然可以像过去一样配置单独的速率限制(在 /sys/class/net//device/sriov/<vf_num>/max_tx_rate 下)。然而,VF的实际带宽限制最终将根据VF组限制以及同一组中有多少个VF来确定。
例如:2 个 VF(0 和 1)连接到组 3。

情况1:组的速率限制设置为20G。每个VF的速率限制为15G
结果:每个VF的速率限制为10G

情况2:组的最大速率限制仍然设置为20G。VF 0 配置为 30G 限制,而 VF 1 配置为 5G 速率限制
结果:VF 0 实际上将具有 15G。VF 1将拥有5G

经验法则是组的带宽在组中的多个 VF 之间均匀分配。如果有剩余,则会分配给尚未达到单个速率限制的 VF。

VF限速功能配置
  1. 当 FW 支持 VF 速率组时,驱动程序将在 SRI-OV sysfs 中创建一个名为“groups”的新层次结构 (/sys/class/net//device/sriov/groups/)。它将包含 VF 组允许的所有信息和配置。
  2. 默认情况下,所有 VF 都放置在组 0 中,因为它是初始驱动程序启动后唯一存在的组。这将是 /sys/class/net//device/sriov/groups/ 下唯一可用的组
  3. 可以通过写入组文件将 VF 移动到不同的组 -> echo $GROUP_ID > /sys/class/net//device/sriov/<vf_id>/group
  4. 允许的组 ID 为 0-255
  5. 仅当组中至少有 1 个 VF 时,/sys/class/net//device/sriov/groups/ 下才会有可用的组配置(组 0 除外,即使组 0 处于活动状态也始终可用)空的)。
  6. 创建组后(通过将至少 1 个 VF 移动到该组),用户可以配置该组的速率限制。例如:
    a. echo 10000 > /sys/class/net//device/sriov/5/max_tx_rate – 设置 VF 5 至 10G 的单独速率限制(可选)
    b. echo 7 > /sys/class/net//device/sriov/5/group – 将 VF 5 移动到组 7
    c. echo 5000 > /sys/class/net//device/sriov/groups/7/max_tx_rate – 设置组 7,速率限制为 5G
    d. 现在通过 VF 5 运行流量时,由于组速率限制,即使 VF 本身限制为 10G,也会限制为 5G
    e. echo 3 > /sys/class/net//device/sriov/5/group – 将 VF 5 移动到组 3
    f. 第 7 组现在将从 /sys/class/net//device/sriov/groups 中消失,因为其中有 0 个 VF。现在将出现第 3 组。由于组 3 没有速率限制,VF 5 可以以 10G 传输(得益于其单独的配置)
    注意事项:

您可以在“stats”sysfs 中查看 VF 属于哪个组 (cat /sys/class/net//device/sriov/<vf_num>/stats)
您可以在组的“config”sysfs 中查看当前速率限制和附加到组的 VF 数量 (cat /sys/class/net//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配置
在下面的配置示例中,虚拟机位于 VF-0 上,具有以下 MAC 地址:11:22:33:44:55:66。
有两种方法可以启用或禁用信任:

  1. 使用标准 IP 链接命令 - 可从内核 4.5 及更高版本获得。
    要启用对特定 VF 的信任,请运行:
ip link set ens785f1 vf 0 trust on

要禁用对特定 VF 的信任,请运行:

ip link set ens785f1 vf 0 trust off

  1. 对位于 /sys/class/net/<ETH_IF_NAME> / device/sriov//trust 下的文件指定 echo“ON”或“OFF”。
    要启用对特定 VF 的信任,请运行:
echo "ON" > /sys/class/net/ens785f1/device/sriov/0/trust

要禁用对特定 VF 的信任,请运行:

echo "OFF" > /sys/class/net/ens785f1/device/sriov/0/trust

Probed VFs

启用 SR-IOV 后探测虚拟功能 (VF) 可能会消耗适配器卡的资源。因此,当不需要监控VM时,建议不要启用VF探测。
可以通过两种方式禁用 VF 探测,具体取决于服务器上安装的内核版本:

  1. 如果安装的内核版本为v4.12以上,建议使用PCI sysfs接口sriov_drivers_autoprobe。有关更多信息,请参阅linux-next 分支。
  2. 如果安装的内核版本早于v4.12,建议使用mlx5_core模块参数probe_vf以及驱动程序版本4.1或更高版本。
    示例:
echo 0 > /sys/module/mlx5_core/parameters/probe_vf

有关如何探测 VF 的详细信息,请参阅如何在 mlx5 驱动程序上配置和探测 VF社区帖子。

VF 混杂接收模式

VF 混杂 模式

VF 可以进入混杂模式,除了最初针对 VF 的流量之外,还可以接收不匹配的流量以及到达物理端口的所有组播流量。不匹配的流量是与任何 VF 或 PF 的 MAC 地址不匹配的任何流量的 DMAC。
注意:只有特权/受信任的 VF 才能进入 VF 混杂模式。

要为 VF 设置混杂模式,请运行:

ifconfig eth2 promisc

要退出混杂模式,请运行:

ifconfig eth2 –promisc
VF全多模式

VF 可以进入全多模式,除了最初针对 VF 的流量外,该模式还可以接收从同一物理端口上的其他功能发送/发送到其他功能的所有组播流量。
注意:只有特权/受信任的 VF 才能进入全多 RX 模式。

要为 VF 设置全多模式,请运行:

ifconfig eth2 allmulti

要退出全多模式,请运行:

ifconfig eth2 –allmulti
卸载SR-IOV驱动程序

要卸载 SR-IOV 驱动程序,请执行以下操作:

  1. 对于虚拟机管理程序,从所有虚拟机 (VM) 中分离所有虚拟功能 (VF) 或停止使用虚拟功能的虚拟机。
    请注意,当存在使用 VF 的虚拟机时停止驱动程序将导致计算机挂起。
  2. 运行下面的脚本。请注意,卸载驱动程序会删除整个驱动程序文件,但不会卸载驱动程序。
[root@swl022 ~]# /usr/sbin/ofed_uninstall.sh
This program will uninstall all OFED packages on your machine.
Do you want to continue?[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
  1. 重新启动服务器。
### 回答1: SR-IOV (Single Root I/O Virtualization) 是一种硬件虚拟化技术,它将一个物理 IO 设备分割成多个虚拟设备,并将这些虚拟设备分配给不同的虚拟机。在 SR-IOV 技术下,每个虚拟设备都可以被视为独立的物理设备,可以被单独配置和管理。 在 SR-IOV 中,支持 trunking 的设备可以被分配给多个虚拟机。Trunking 是一种将多个 VLAN 合并到一个物理端口上的技术。使用 trunking 技术可以减少端口数量的使用,同时提高网络吞吐量和灵活性。 因此,如果 SR-IOV 的底层物理设备支持 trunking,则 SR-IOV 也可以支持 trunking。但是,需要注意的是,SR-IOV 的虚拟设备必须被正确配置,以支持被分配到正确的 VLAN ID,并且必须遵循 VLAN 的各种限制和规则。 总之,SR-IOV 技术可以支持 trunking,但需要以正确的方式配置和管理。 ### 回答2: SR-IOVSingle Root IO Virtualization,单根IO虚拟化)是一种通过在物理网卡上创建多个虚拟端口来提高虚拟机网络性能的技术。而Trunk则是指将多个VLAN合并成为一个VLAN透明地传输。 因为SR-IOV的虚拟端口是直接挂在物理网卡上的,所以在SR-IOV环境下,不需要在虚拟机内使用VLAN tagging。但是,SR-IOV并不直接支持Trunk,因为SR-IOV是在物理网卡上虚拟化出多个端口,每个端口都是单独的。 在SR-IOV环境中,如果希望实现Trunk功能,则需要在物理交换机上进行配置,将多个VLAN合并为一个VLAN,并将这个VLAN传输到物理网卡上。这样,SR-IOV环境下的虚拟机就可以通过这个VLAN透明地互相通信。 总之,SR-IOV可以实现提高虚拟机网络性能的目的,但是如果需要使用Trunk功能,则需要进行特定的物理交换机配置。 ### 回答3: SR-IOV是一种网络虚拟化技术,可以将物理网络资源划分成多个虚拟网络,从而提高网络性能和灵活性。而trunk是一种VLAN聚合技术,可以将多个VLAN合并为一个虚拟链路,提高网络吞吐量和可用性。那么,SR-IOV可以支持trunk吗? 答案是肯定的。事实上,SR-IOV就是在支持trunk的基础上实现的。SR-IOV的核心思想就是将物理NIC划分成多个虚拟NIC,每个虚拟NIC可以独立地接收和发送网络流量,同时可以配置不同的VLAN ID。这就意味着,SR-IOV可以支持trunk技术,通过将多个虚拟NIC绑定到一个虚拟链路上,可以实现对多个VLAN的聚合和负载均衡。 需要注意的是,SR-IOV的trunk技术与传统的VLAN聚合有所不同。在SR-IOV中,虚拟NIC的VLAN ID是在物理NIC上进行配置的,而不是在虚拟交换机上进行配置的。因此,当物理NIC上配置了trunk技术后,会自动将所有虚拟NIC绑定到这个trunk链路上,无需再次配置。 总的来说,SR-IOV可以完美地支持trunk技术,这也是它在进行高性能网络虚拟化方面的重要优势之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值