ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SR-IOV 中的 PF(Physical Function)详解

SR-IOV 中的 PF(Physical Function)详解 目录概述PF 与 VF 的关系架构设计关键区别PF 的完整 PCIe 功能硬件资源访问寄存器空间内存映射 IOMMIOPF 对 VF 的管理1. 管理 VF 数量查看 VF 总数启用 VF查看 VF 配置销毁所有 VF2. VF 的启停控制启用特定 VF启停 VF 链路启停 VF 流量转发3. 二层分发路由MAC 地址管理VLAN 隔离防欺骗检查广播/组播处理4. 流量优先级和 QoSPF 的高级管理操作查看 PF 统计信息修改 PF 的 MTU启用/禁用 PF 的校验和卸载监控 PF 和 VF 的中断实践示例完整的 PF 配置流程关键特性总结PF 的管理能力故障排查检查 PF 是否支持 SR-IOVVF 创建失败排查VF 不可用排查总结概述在 SR-IOVSingle Root I/O Virtualization架构中PFPhysical Function是支持虚拟化的物理网络设备本身具有完整的 PCIe 功能。它是整个虚拟化网络生态的管理中心负责创建、配置和控制多个虚拟函数VF。PF 与 VF 的关系架构设计┌─────────────────────────────────────────────────┐ │ Physical Network Card │ │ (Intel I350 GigE NIC) │ ├─────────────────────────────────────────────────┤ │ PF (Physical Function) │ │ ├─ 完整 PCIe 功能 │ │ ├─ 直接访问硬件资源 │ │ ├─ 管理所有 VF │ │ └─ 负责二层分发路由 │ ├─────────────────────────────────────────────────┤ │ VF 0 │ VF 1 │ VF 2 │ VF 3 │ │ (轻量) │ (轻量) │ (轻量) │ (轻量) │ └─────────────────────────────────────────────────┘关键区别特性PFVFPCIe 功能完整受限配置能力全局控制受限于 PF管理权限最高受限硬件访问直接通过 PF 中介二层路由完全控制由 PF 决定VF 创建可以创建/销毁不可创建其他 VFPF 的完整 PCIe 功能硬件资源访问PF 拥有对网卡硬件的完全访问权限# 查看 PF 的 PCI 配置空间 lspci -vvv -s 41:00.3 输出示例 41:00.3 Ethernet controller: Intel Corporation I350 Gigabit Network Connection Command: I/O Mem BusMaster SpecCycle- MemWINV- VGASnoop- ParErr- Status: Cap 66MHz- UDF- FastB2B- ParErr- DEVSELfast TAbort- TAbort- Region 0: Memory at b0000000 (32-bit, non-prefetchable) [size8M] Region 2: I/O ports at 6000 [size32]寄存器空间# 通过 ethtool 访问网卡寄存器 ethtool -d ens16f3 查看设备树和功能能力 cat /sys/class/net/ens16f3/device/config 获取完整设备信息 lspci -vvvv -s 41:00.3内存映射 IOMMIO# 查看 PF 的内存映射 cat /proc/iomem | grep -i memory at 输出示例 b0000000-b07fffff : PCI Bus 0000:41 b0000000-b07fffff : 0000:41:00.3PF 对 VF 的管理1. 管理 VF 数量查看 VF 总数# 查看该 PF 最多支持多少个 VF cat /sys/class/net/ens16f3/device/sriov_totalvfs # 输出7启用 VF# 为 PF 启用 4 个 VF echo 4 /sys/class/net/ens16f3/device/sriov_numvfs 验证 cat /sys/class/net/ens16f3/device/sriov_numvfs 输出4查看 VF 配置# 查看 PF 下的所有 VF cat /sys/class/net/ens16f3/device/sriov_numvfs 详细查看每个 VF 的信息 lspci | grep Virtual Function 输出示例 41:10.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection 41:10.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection 41:10.2 Ethernet controller: Intel Corporation I350 Gigabit Network Connection 41:10.3 Ethernet controller: Intel Corporation I350 Gigabit Network Connection复制代码销毁所有 VF# 重置 VF 数量为 0销毁所有 VF echo 0 /sys/class/net/ens16f3/device/sriov_numvfs 验证 cat /sys/class/net/ens16f3/device/sriov_numvfs 输出02. VF 的启停控制启用特定 VF# VF 默认在创建时启用 # 查看 VF 状态 ip link show ens16f3 输出示例 ens16f3: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 link/ether c4:c0:63:cb:5a:a3 brd ff:ff:ff:ff:ff:ff vf 0 MAC 00:11:22:33:44:01, spoof checking on, link-state auto, trust off vf 1 MAC 00:11:22:33:44:02, spoof checking on, link-state auto, trust off启停 VF 链路# 由 PF 控制 VF 的链路状态 ip link set ens16f3 vf 0 state enable ip link set ens16f3 vf 0 state disable 查询 VF 链路状态 ip link show ens16f3 vf 0启停 VF 流量转发# 通过 PF 启用/禁用 VF 的流量 ethtool --set-priv-flags ens16f3 vf-vlan-prune on ethtool --show-priv-flags ens16f33. 二层分发路由二层分发路由是 PF 的关键功能负责在物理接口与虚拟函数之间转发以太网帧。MAC 地址管理PF 控制所有 VF 的 MAC 地址实现二层过滤# PF 为每个 VF 分配 MAC 地址 ip link set ens16f3 vf 0 mac 00:11:22:33:44:01 ip link set ens16f3 vf 1 mac 00:11:22:33:44:02 ip link set ens16f3 vf 2 mac 00:11:22:33:44:03 ip link set ens16f3 vf 3 mac 00:11:22:33:44:04 查看配置 ip link show ens16f3 输出示例 ens16f3: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 vf 0 MAC 00:11:22:33:44:01, spoof checking on, link-state auto, trust off vf 1 MAC 00:11:22:33:44:02, spoof checking on, link-state auto, trust off vf 2 MAC 00:11:22:33:44:03, spoof checking on, link-state auto, trust off vf 3 MAC 00:11:22:33:44:04, spoof checking on, link-state auto, trust off工作原理进入 NIC 的以太网帧根据目标 MAC 地址由硬件分发到对应的 VFPF 维护 MAC 表确保帧到达正确的虚拟函数每个 VF 只能看到发往自己 MAC 地址的帧VLAN 隔离PF 可以为 VF 配置 VLAN 隔离# 为 VF 分配 VLAN ID ip link set ens16f3 vf 0 vlan 100 ip link set ens16f3 vf 1 vlan 200 ip link set ens16f3 vf 2 vlan 300 ip link set ens16f3 vf 3 vlan 400 查看 VLAN 配置 ip link show ens16f3 输出示例 vf 0 MAC 00:11:22:33:44:01, vlan 100, spoof checking on vf 1 MAC 00:11:22:33:44:02, vlan 200, spoof checking on vf 2 MAC 00:11:22:33:44:03, vlan 300, spoof checking on vf 3 MAC 00:11:22:33:44:04, vlan 400, spoof checking on工作原理PF 确保 VF 0 只能发送和接收 VLAN 100 的帧PF 硬件过滤器阻止 VF 访问不属于其 VLAN 的帧提供二层虚拟网络隔离防欺骗检查PF 通过防欺骗机制保护网络安全# 启用防欺骗检查默认启用 ip link set ens16f3 vf 0 spoofchk on 禁用防欺骗检查 ip link set ens16f3 vf 0 spoofchk off 查看状态 ip link show ens16f3 输出示例 vf 0 MAC 00:11:22:33:44:01, spoof checking on, link-state auto工作原理当 VF 尝试发送源 MAC 非其分配地址的帧时PF 硬件会丢弃该帧防止虚拟机伪装身份发送恶意流量广播/组播处理PF 管理广播和组播帧的分发# 配置 VF 是否接收广播帧 ip link set ens16f3 vf 0 state enable 配置 VF 可以接收的组播地址 通过 ethtool 或驱动程序配置 ethtool -K ens16f3 rx-vlan-filter on4. 流量优先级和 QoSPF 可以配置 VF 的流量优先级# 设置 VF 的发送速率限制 ip link set ens16f3 vf 0 rate 100 # 限制为 100 Mbps 查看配置 ip link show ens16f3 输出示例 vf 0 MAC 00:11:22:33:44:01, tx rate 100 (Mbps)PF 的高级管理操作查看 PF 统计信息# 获取网卡统计信息 ethtool -S ens16f3 输出示例部分 NIC Statistics: rx_packets: 1234567 rx_bytes: 987654321 rx_broadcast: 100 rx_multicast: 200 rx_dropped: 0 tx_packets: 7654321 tx_bytes: 123456789修改 PF 的 MTU# 修改 PF 接口的 MTU影响所有 VF ip link set ens16f3 mtu 9000 验证 ip link show ens16f3启用/禁用 PF 的校验和卸载# 查看卸载功能 ethtool -k ens16f3 启用 TSOTCP Segmentation Offload ethtool -K ens16f3 tso on 启用 GSOGeneric Segmentation Offload ethtool -K ens16f3 gso on监控 PF 和 VF 的中断# 查看中断分配 cat /proc/interrupts | grep ens16f3 查看 PF 的 MSI-X 中断向量 cat /sys/class/net/ens16f3/device/msi_irqs/*/irq实践示例完整的 PF 配置流程#!/bin/bash 第一步检查 PF 支持的 VF 数量 PF_IFACEens16f3 MAX_VF$(cat /sys/class/net/$PF_IFACE/device/sriov_totalvfs) echo 最大 VF 数量$MAX_VF 第二步创建 VF NUM_VF4 echo 创建 $NUM_VF 个 VF... echo $NUM_VF /sys/class/net/$PF_IFACE/device/sriov_numvfs 等待 VF 初始化 sleep 2 第三步配置每个 VF for i in $(seq 0 $((NUM_VF-1))); do # 分配 MAC 地址 MAC$(printf 00:11:22:33:44:%02x $((1i))) ip link set $PF_IFACE vf $i mac $MAC # 分配 VLAN VLAN$((100 i)) ip link set $PF_IFACE vf $i vlan $VLAN 启用防欺骗检查 ip link set $PF_IFACE vf $i spoofchk on 设置速率限制可选 ip link set $PF_IFACE vf $i rate 1000 echo VF $i 配置完成MAC$MAC, VLAN$VLAN done 第四步验证配置 echo 配置结果 ip link show $PF_IFACE 第五步查看 VF 设备 echo VF 设备列表 lspci | grep Virtual Function echo 配置完成关键特性总结PF 的管理能力功能说明命令示例VF 创建/销毁动态调整 VF 数量echo 4 sriov_numvfsMAC 过滤为 VF 分配和过滤 MAC 地址ip link set vf 0 mac ...VLAN 隔离隔离不同 VF 的流量ip link set vf 0 vlan 100防欺骗阻止 VF 伪装 MAC 地址ip link set vf 0 spoofchk on速率限制限制 VF 的网络带宽ip link set vf 0 rate 100链路控制启停 VF 的链路ip link set vf 0 state disable信任配置允许/禁止 VF 修改某些配置ip link set vf 0 trust on故障排查检查 PF 是否支持 SR-IOV# 查看硬件支持 lspci -vv | grep -i sriov 查看驱动支持 dmesg | grep -i sriov 检查 BIOS 设置 SR-IOV 必须在 BIOS 中启用VF 创建失败排查# 检查 VF 数量限制 cat /sys/class/net/ens16f3/device/sriov_totalvfs 查看当前 VF 数量 cat /sys/class/net/ens16f3/device/sriov_numvfs 查看系统日志 dmesg | tail -20 检查 IOMMU 状态 cat /proc/cmdline | grep -i iommuVF 不可用排查# 检查 VF 是否被启用 ip link show ens16f3 检查 VF 的驱动加载 lspci -vv | grep -i virtual 重新加载驱动 modprobe -r igb modprobe igb总结PFPhysical Function是 SR-IOV 的核心管理实体具有以下关键职责完整 PCIe 功能拥有对硬件的直接访问权限VF 生命周期管理创建、配置、销毁虚拟函数二层路由控制管理 MAC、VLAN、防欺骗等二层功能流量隔离确保 VF 之间的网络隔离和安全资源分配配置带宽、QoS 等资源限制
返回列表