SR-IOV 和 PCI
本节包含以下有关部署在 KVM 上的 vSRX 虚拟防火墙实例的 SR-IOV 的主题:
SR-IOV 概述
KVM 上的 vSRX 虚拟防火墙支持单根 I/O 虚拟化 (SR-IOV) 接口类型。SR-IOV 是一种标准,它允许单个物理网卡将自身显示为 虚拟机 (VM ) 可以附加到的多个 vNIC 或虚拟功能 (VF)。SR-IOV 与其他虚拟化技术(如英特尔 VT-d)结合使用,可提高虚拟机的 I/O 性能。SR-IOV 允许每个虚拟机直接访问排队等待附加到虚拟机的 VF 的数据包。当您需要接近物理裸机接口的 I/O 性能时,可以使用 SR-IOV。
在使用 SR-IOV 接口的部署中,将 MAC 地址分配给 vSRX 虚拟防火墙 Junos OS 接口时,数据包将被丢弃。出现此问题的原因是 SR-IOV 不允许 PF 或 VF 中的 MAC 地址更改。
KVM 中的 SR-IOV 不会重新映射接口编号。vSRX 虚拟防火墙虚拟机 XML 文件中的接口序列与 vSRX 虚拟防火墙实例上的 Junos OS CLI 中显示的接口序列匹配。
SR-IOV 使用两种 PCI 功能:
物理功能 (PF) — 包含 SR-IOV 功能的完整 PCIe 设备。物理功能作为普通 PCI 设备进行发现、管理和配置。物理功能通过分配虚拟功能来配置和管理 SR-IOV 功能。禁用 SR-IOV 后,主机会在一个物理网卡上创建一个 PF。
虚拟功能 (VF) — 仅处理 I/O 的简单 PCIe 功能。每个虚拟函数都派生自一个物理函数。设备可能具有的虚拟功能数量受设备硬件的限制。单个以太网端口(即物理设备)可以映射到许多可与来宾共享的虚拟功能。启用 SR-IOV 后,主机会在一个物理网卡上创建一个 PF 和多个 VF。VF 的数量取决于配置和驱动程序支持。
禁用信任模式的 SR-IOV HA 支持(仅限 KVM)
了解禁用信任模式的 SR-IOV HA 支持(仅限 KVM)
冗余以太网接口 (RETH) 是一种虚拟接口,由来自 SRX 集群的每个参与节点的等数量的成员接口组成。所有逻辑配置(如 IP 地址、QoS、区域和 VPN)都绑定到此接口。物理属性应用于成员接口或子接口。RETH 接口具有使用群集 ID 计算的虚拟 MAC 地址。RETH 已在 Junos OS 中作为聚合接口/LAG 实现。对于 LAG,父(逻辑)IFD 的 MAC 地址将复制到每个子接口。在 RETH 接口下配置子接口时,RETH 接口的虚拟 MAC 将在子物理接口的字段中被覆盖 current MAC address 。这也需要在相应的 NIC 上对虚拟 MAC 地址进行编程。
Junos OS 在 vSRX 虚拟防火墙上作为虚拟机运行。Junos OS 没有对 NIC 的直接访问权限,只有虚拟机管理程序提供的虚拟 NIC 访问权限,该访问可能与在同一主机上运行的其他 VM 共享。这种虚拟访问带有某些限制,例如称为信任模式的特殊模式,这是在 NIC 上对虚拟 MAC 地址进行编程所必需的。在部署期间,由于可能存在安全问题,提供信任模式访问权限可能不可行。为了使 RETH 模型能够在此类环境中工作,需要修改 MAC 重写行为。我们不会将父虚拟 MAC 地址复制到子节点,而是保持子节点的物理 MAC 地址不变,并将属于群集主动节点的子节点的物理 MAC 地址复制到 reth 接口的 当前 MAC 。这样,当禁用信任模式时,不需要 MAC 重写访问权限。
对于 vSRX 虚拟防火墙,DPDK 会读取虚拟机管理程序提供的物理 MAC 地址,并与 Junos OS 控制平面共享。在独立模式下,此物理 MAC 地址在物理 IFD 上编程。但是,在群集模式下无法提供相同的支持,因此物理接口的 MAC 地址取自瞻博网络保留的 MAC 池。在信任模式不可行的环境中,虚拟机管理程序无法提供物理 MAC 地址。
为了克服此问题,我们添加了对使用虚拟机管理程序提供的物理 MAC 地址的支持,而不是从保留的 MAC 池中分配该地址。请参阅在禁用信任模式的情况下配置 SR-IOV 支持(仅限 KVM)。
在禁用信任模式的情况下配置 SR-IOV 支持(仅限 KVM)
从 Junos OS 19.4R1 版开始,在禁用信任模式的情况下,支持 SR-IOV HA。您可以通过在层次结构级别配置 [edit chassis cluster] 和 use-active-child-mac-on-reth use-actual-mac-on-physical-interfaces 配置语句来启用此模式。如果在集群中配置命令,虚拟机管理程序会分配子物理接口的 MAC 地址,父 RETH 接口的 MAC 地址将被活动子物理接口的 MAC 地址覆盖
只有在收入接口为 SR-IOV 时,您才能在禁用信任模式的情况下配置 SR-IOV。配置了实际 MAC 物理接口时,结构接口或链路不能在禁用信任模式的情况下使用 SR-IOV。
如果只有收入接口是 SR-IOV,则支持在禁用信任模式的情况下使用 SRIOV。
您需要重新启动 vSRX 虚拟防火墙实例才能启用此模式。群集中的两个节点都需要重新启动才能使命令生效。
您需要一起配置命令 use-active-child-mac-on-reth 才能 use-actual-mac-on-physical-interfaces 启用此功能。
参见
限制
在 KVM 上禁用信任模式的 SR-IOV HA 支持具有以下限制:
禁用信任模式的 SR-IOV HA 支持仅在基于 KVM 的系统上受支持。
一个 reth 接口在每个 vSRX 虚拟防火墙群集节点上最多可以有一个端口作为成员。
不能对 NAT 池使用
security nat proxy-arp该功能,因为在故障转移时不会为 NAT 池中的 IP 地址发送 G-ARP。相反,可以将上游路由器中 NAT 池范围的路由设置为指向 vSRX 虚拟防火墙接口的 IP 地址作为下一跃点。或者,如果直接连接的主机需要访问 NAT 池地址,则可以在 reth 接口下为代理 ARP 配置这些 NAT 池地址。如果 reth 接口配置了许多 VLAN,则在故障转移时发送所有 G-ARP 可能需要一些时间。这可能会导致流量明显中断。
数据平面故障转移将导致 reth 接口的 MAC 地址发生更改。因此,故障切换对于直接连接的相邻第 3 层设备(路由器或服务器)不透明。vSRX 虚拟防火墙的 IP 地址必须映射到相邻设备上 ARP 表中的新 MAC 地址。vSRX 虚拟防火墙将发出一个 G-ARP,这将有助于这些设备。如果这些相邻设备未对从 vSRX 虚拟防火墙接收的 G-ARP 进行操作或显示响应缓慢,则流量可能会中断,直到该设备正确更新其 ARP 表。
-
使用 SR-IOV 接口的部署不支持以下 vSRX 虚拟防火墙功能:
这些限制适用于无法更新或控制 PF 驱动程序的部署。在受支持的瞻博网络设备上部署 vSRX 虚拟防火墙时,这些限制不适用。
-
高可用性 (HA)
-
IRB 接口
-
IPv6 寻址
-
巨型帧
-
第 2 层支持
-
具有其他功能(如 OSPF 和 IPv6)的组播
-
分组模式
-
在 KVM 上配置 SR-IOV 接口
如果您有支持 SR-IOV 的物理网卡,则可以将启用了 SR-IOV 的虚拟网卡或虚拟功能 (VF) 附加到 vSRX 虚拟防火墙实例以提高性能。如果您使用 SR-IOV,我们建议将所有收入端口配置为 SR-IOV。
请注意以下有关 KVM 上 vSRX 虚拟防火墙的 SR-IOV 支持的信息:
从 Junos OS 版本 15.1X49-D90 和 Junos OS 版本 17.3R1 开始,部署在 KVM 上的 vSRX 虚拟防火墙实例除了支持 Intel 82599 或 X520/540 之外,还支持英特尔 X710/XL710 NIC 上的 SR-IOV。
从 Junos OS 18.1R1 版开始,部署在 KVM 上的 vSRX 虚拟防火墙实例支持 Mellanox ConnectX-3 和 ConnectX-4 系列适配器上的 SR-IOV。
必须先完成以下任务,然后才能将启用了 SR-IOV 的 VF 附加到 vSRX 虚拟防火墙实例:
在主机服务器中插入支持 SR-IOV 的物理网络适配器。
在主机服务器上的 BIOS 中启用英特尔 VT-d CPU 虚拟化扩展。英特尔 VT-d 扩展为直接将物理设备分配给来宾提供硬件支持。请与供应商一起验证该过程,因为不同的系统有不同的方法来启用 VT-d。
通过在主机服务器启动序列期间进入 BIOS 设置以确认 SR-IOV 设置,确保在系统/服务器 BIOS 级别启用 SR-IOV。不同的服务器制造商对用于在 BIOS 级别启用 SR-IOV 的 BIOS 参数有不同的命名约定。例如,对于戴尔服务器,请确保将 SR-IOV全局启用 选项设置为 已启用。
我们建议您使用 来 virt-manager 配置 SR-IOV 接口。 virsh attach-device 如果要了解如何使用 CLI 命令将 virsh PCI 主机设备添加到虚拟机,请参阅命令文档。
此外,还必须按 1G、10G、40G 和 100G 的顺序配置接口。如果未遵循此顺序,则需要重置网络适配器。
要使用图形界面将 virt-manager SR-IOV VF 添加到 vSRX 虚拟防火墙虚拟机,请执行以下操作:
要使用 CLI 命令将 virsh SR-IOV VF 添加到 vSRX 虚拟防火墙虚拟机,请执行以下操作:
为 eno2 接口定义四个虚拟函数,用数字 4 更新sriov_numvfs文件。
root@LabHost:~# echo 4 > /sys/class/net/eno2/device/sriov_numvfs root@LabHost:~# more /sys/class/net/eno2/device/sriov_numvfs
识别设备。
标识指定用于将设备分配给虚拟机的 PCI 设备。使用
lspci命令列出可用的 PCI 设备。您可以使用 优化grep的lspci输出。使用命令
lspci根据 VF ID 检查 VF 编号。root@ kvmsrv:~# lspci | grep Ether
…… 83:00.0 Ethernet controller: Intel Corporation Ethernet Controller XL710 for 40GbE QSFP+ (rev 02) - Physical Function 83:00.1 Ethernet controller: Intel Corporation Ethernet Controller XL710 for 40GbE QSFP+ (rev 02) - Physical Function 83:02.0 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:02.1 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:02.2 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:02.3 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:02.4 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:02.5 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:02.6 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:02.7 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.0 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.1 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.2 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.3 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.4 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.5 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.6 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.7 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) ………
从 KVM 上的 vSRX 虚拟防火墙 XML 配置文件添加 SR-IOV 设备分配并查看设备信息。
驱动程序可以使用 vfio 或 kvm,具体取决于 KVM 服务器操作系统/内核版本和虚拟化支持的驱动程序。地址类型引用每个 SR-IOV VF(虚拟功能)的唯一 PCI 插槽号。
有关域、总线和函数的信息可从命令输出
virsh nodedev-dumpxml中获得。<interface type="hostdev" managed="yes"> <driver name="vfio"/> <source> <address type="pci" domain="0x0000" bus="0x83" slot="0x02" function="0x3"/> </source> <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x0"/> </interface>
在编辑设置中添加PCI设备,并根据VF编号选择VF。
注意:关闭 VM 电源时,应执行此操作。此外,请勿克隆具有 PCI 设备的虚拟机,否则可能会导致 VF 或 MAC 冲突。
使用命令启动
# virsh start name of virtual machineVM。
更改历史记录表
功能支持由您使用的平台和版本决定。使用 功能资源管理器 确定您的平台是否支持某个功能。