# Linux 使用SR-IOV时PF VF重命名解决方法 **Published by:** [likizju](https://paragraph.com/@likizju/) **Published on:** 2021-11-11 **URL:** https://paragraph.com/@likizju/linux-sr-iov-pf-vf ## Content #Linux 使用SR-IOV时PF VF重命名解决方法 [TOC] ##背景 DELL R620 一块板载Broadcom网卡(双千兆,双万兆光口) 2块外接的INTEL PCIE双光口万兆网卡 root@hk4-31:~# lspci -nn|grep -i net 01:00.0 Ethernet controller [0200]: Broadcom Corporation NetXtreme II BCM57800 1/10 Gigabit Ethernet [14e4:168a] (rev 10) 01:00.1 Ethernet controller [0200]: Broadcom Corporation NetXtreme II BCM57800 1/10 Gigabit Ethernet [14e4:168a] (rev 10) 01:00.2 Ethernet controller [0200]: Broadcom Corporation NetXtreme II BCM57800 1/10 Gigabit Ethernet [14e4:168a] (rev 10) 01:00.3 Ethernet controller [0200]: Broadcom Corporation NetXtreme II BCM57800 1/10 Gigabit Ethernet [14e4:168a] (rev 10) 04:00.0 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01) 04:00.1 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01) 41:00.0 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01) 41:00.1 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01) 现在想使用其中一块外接INTEL网卡做VF给KVM虚拟机使用,要解决: 只启用指定网卡的SR-IOV VF产生后会和系统的网卡顺序混淆,使用时非常难找,因此需要重命名 ##VT-d及VF配置 安装sysfsutils,并且指定外接其中一块网卡的2个端口才启用VF: bus/pci/devices/0000:04:00.0/sriov_numvfs = 8 bus/pci/devices/0000:04:00.1/sriov_numvfs = 8 启用INTEL的VT-d,除了BIOS启用外还要修改GRUB启动参数 GRUB_CMDLINE_LINUX="intel_iommu=on" 后更新grub: update-grub 重启后即可以看到: 01:00.0 Ethernet controller [0200]: Broadcom Corporation NetXtreme II BCM57800 1/10 Gigabit Ethernet [14e4:168a] (rev 10) 01:00.1 Ethernet controller [0200]: Broadcom Corporation NetXtreme II BCM57800 1/10 Gigabit Ethernet [14e4:168a] (rev 10) 01:00.2 Ethernet controller [0200]: Broadcom Corporation NetXtreme II BCM57800 1/10 Gigabit Ethernet [14e4:168a] (rev 10) 01:00.3 Ethernet controller [0200]: Broadcom Corporation NetXtreme II BCM57800 1/10 Gigabit Ethernet [14e4:168a] (rev 10) 04:00.0 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01) 04:00.1 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01) 04:10.0 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:10.1 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:10.2 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:10.3 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:10.4 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:10.5 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:10.6 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:10.7 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:11.0 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:11.1 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:11.2 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:11.3 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:11.4 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:11.5 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:11.6 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 04:11.7 Ethernet controller [0200]: Intel Corporation 82599 Ethernet Controller Virtual Function [8086:10ed] (rev 01) 41:00.0 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01) 41:00.1 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01) ##UDEV修改解决网卡重命名问题 脚本,用于查看系统网卡及udev: #!/bin/sh nets=$(ifconfig -a|grep -E 'eth|vf|pf' |awk '{print $1}') for i in $nets do driver=$(ethtool -i $i|grep driver) bus=$(ethtool -i $i|grep bus-in) link=$(ethtool $i | grep 'Link det') speed=$(ethtool $i|grep 'Speed') echo "$i $driver $bus $link $speed" done | column -t regexp='looking at parent device.*\/devices\/pci[0-9]+:[0-9]+\/[0-9]+:[0-9]+:[0-9]+.[0-9]+\/[0-9]+:[0-9]+:[0-9]+\.[0-9]+' nics=$(ls -d /sys/class/net/eth* /sys/class/net/pf* /sys/class/net/vf*) for nic in $nics do udevadm info -a $nic | grep -A3 -E "$regexp"|tail -n3|tr '\n' '\t' i=$(echo $nic | cut -d '/' -f5) echo "NAME=\"$i\"" done 查看目前的结果: eth0 driver: bnx2x bus-info: 0000:01:00.0 Speed: 10000Mb/s eth1 driver: bnx2x bus-info: 0000:01:00.1 Speed: 10000Mb/s eth3 driver: bnx2x bus-info: 0000:01:00.2 Speed: 1000Mb/s eth4 driver: bnx2x bus-info: 0000:01:00.3 Speed: 1000Mb/s eth8 driver: ixgbevf bus-info: 0000:04:11.0 Speed: Unknown! eth9 driver: ixgbevf bus-info: 0000:04:10.2 Speed: Unknown! eth10 driver: ixgbevf bus-info: 0000:04:10.4 Speed: Unknown! eth11 driver: ixgbevf bus-info: 0000:04:10.6 Speed: Unknown! eth12 driver: ixgbevf bus-info: 0000:04:10.0 Speed: Unknown! eth13 driver: ixgbevf bus-info: 0000:04:11.2 Speed: Unknown! eth14 driver: ixgbevf bus-info: 0000:04:11.4 Speed: Unknown! eth15 driver: ixgbevf bus-info: 0000:04:11.6 Speed: Unknown! eth16 driver: ixgbevf bus-info: 0000:04:10.1 Speed: Unknown! eth17 driver: ixgbevf bus-info: 0000:04:10.3 Speed: Unknown! eth18 driver: ixgbevf bus-info: 0000:04:10.5 Speed: Unknown! eth19 driver: ixgbevf bus-info: 0000:04:10.7 Speed: Unknown! eth20 driver: ixgbevf bus-info: 0000:04:11.1 Speed: Unknown! eth21 driver: ixgbevf bus-info: 0000:04:11.3 Speed: Unknown! eth22 driver: ixgbevf bus-info: 0000:04:11.5 Speed: Unknown! eth23 driver: ixgbevf bus-info: 0000:04:11.7 Speed: Unknown! KERNELS=="0000:01:00.0" SUBSYSTEMS=="pci" DRIVERS=="bnx2x" NAME="eth0" KERNELS=="0000:01:00.1" SUBSYSTEMS=="pci" DRIVERS=="bnx2x" NAME="eth1" KERNELS=="0000:04:10.4" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="eth10" KERNELS=="0000:04:10.6" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="eth11" KERNELS=="0000:04:11.2" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="eth13" KERNELS=="0000:04:11.4" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="eth14" KERNELS=="0000:04:11.6" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="eth15" KERNELS=="0000:04:10.1" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="eth16" KERNELS=="0000:04:10.3" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="eth17" KERNELS=="0000:04:10.5" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="eth18" KERNELS=="0000:04:10.7" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="eth19" KERNELS=="0000:04:00.0" SUBSYSTEMS=="pci" DRIVERS=="ixgbe" NAME="eth2" KERNELS=="0000:04:11.1" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="eth20" KERNELS=="0000:04:11.3" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="eth21" KERNELS=="0000:04:11.5" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="eth22" KERNELS=="0000:04:11.7" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="eth23" KERNELS=="0000:01:00.2" SUBSYSTEMS=="pci" DRIVERS=="bnx2x" NAME="eth3" KERNELS=="0000:01:00.3" SUBSYSTEMS=="pci" DRIVERS=="bnx2x" NAME="eth4" KERNELS=="0000:04:00.1" SUBSYSTEMS=="pci" DRIVERS=="ixgbe" NAME="eth5" KERNELS=="0000:41:00.0" SUBSYSTEMS=="pci" DRIVERS=="ixgbe" NAME="eth6" KERNELS=="0000:41:00.1" SUBSYSTEMS=="pci" DRIVERS=="ixgbe" NAME="eth7" KERNELS=="0000:04:10.2" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="eth9" 由于VF的MAC地址有不确定性,所以这里我们选择以PCI BUS ID来作为命名依据: vi /etc/udev/rules.d/99-pfvf-net.rules 并且去掉默认生成的net.rules里这几个网卡的内容 KERNELS=="0000:04:00.0" SUBSYSTEMS=="pci" DRIVERS=="ixgbe" NAME="pf-hk" KERNELS=="0000:04:00.1" SUBSYSTEMS=="pci" DRIVERS=="ixgbe" NAME="pf-cmcc" KERNELS=="0000:04:10.0" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf0-hk" KERNELS=="0000:04:10.2" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf1-hk" KERNELS=="0000:04:10.4" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf2-hk" KERNELS=="0000:04:10.6" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf3-hk" KERNELS=="0000:04:11.0" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf4-hk" KERNELS=="0000:04:11.2" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf5-hk" KERNELS=="0000:04:11.4" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf6-hk KERNELS=="0000:04:11.6" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf7-hk" KERNELS=="0000:04:10.1" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf0-cmcc" KERNELS=="0000:04:10.3" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf1-cmcc" KERNELS=="0000:04:10.5" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf2-cmcc" KERNELS=="0000:04:10.7" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf3-cmcc" KERNELS=="0000:04:11.1" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf4-cmcc" KERNELS=="0000:04:11.3" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf5-cmcc" KERNELS=="0000:04:11.5" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf6-cmcc" KERNELS=="0000:04:11.7" SUBSYSTEMS=="pci" DRIVERS=="ixgbevf" NAME="vf7-cmcc" 需要注意的是, vf的pci id并不是连续的, 在2个PF的情况下,这些VF交叉出现 现在让命名生效,先卸载PF和VF的驱动: modprobe -r ixgbe modprobe -r ixgbevf 更新 udev设备名: udevadm trigger --action=add 然后重新加载驱动,即可以看到想要的顺序了: eth0 driver: bnx2x bus-info: 0000:01:00.0 Link detected: yes Speed: 10000Mb/s eth1 driver: bnx2x bus-info: 0000:01:00.1 Link detected: yes Speed: 10000Mb/s eth3 driver: bnx2x bus-info: 0000:01:00.2 Link detected: yes Speed: 1000Mb/s eth4 driver: bnx2x bus-info: 0000:01:00.3 Link detected: yes Speed: 1000Mb/s eth6 driver: ixgbe bus-info: 0000:41:00.0 Link detected: yes Speed: 10000Mb/s eth7 driver: ixgbe bus-info: 0000:41:00.1 Link detected: yes Speed: 10000Mb/s pf-cmcc driver: ixgbe bus-info: 0000:04:00.1 Link detected: no Speed: 10000Mb/s pf-hk driver: ixgbe bus-info: 0000:04:00.0 Link detected: no Speed: 10000Mb/s vf0-cmcc driver: ixgbevf bus-info: 0000:04:10.1 Link detected: no Speed: Unknown! vf0-hk driver: ixgbevf bus-info: 0000:04:10.0 Link detected: no Speed: Unknown! vf1-cmcc driver: ixgbevf bus-info: 0000:04:10.3 Link detected: no Speed: Unknown! vf1-hk driver: ixgbevf bus-info: 0000:04:10.2 Link detected: no Speed: Unknown! vf2-cmcc driver: ixgbevf bus-info: 0000:04:10.5 Link detected: no Speed: Unknown! vf2-hk driver: ixgbevf bus-info: 0000:04:10.4 Link detected: no Speed: Unknown! vf3-cmcc driver: ixgbevf bus-info: 0000:04:10.7 Link detected: no Speed: Unknown! vf3-hk driver: ixgbevf bus-info: 0000:04:10.6 Link detected: no Speed: Unknown! vf4-cmcc driver: ixgbevf bus-info: 0000:04:11.1 Link detected: no Speed: Unknown! vf4-hk driver: ixgbevf bus-info: 0000:04:11.0 Link detected: no Speed: Unknown! vf5-cmcc driver: ixgbevf bus-info: 0000:04:11.3 Link detected: no Speed: Unknown! vf5-hk driver: ixgbevf bus-info: 0000:04:11.2 Link detected: no Speed: Unknown! vf6-cmcc driver: ixgbevf bus-info: 0000:04:11.5 Link detected: no Speed: Unknown! vf6-hk driver: ixgbevf bus-info: 0000:04:11.4 Link detected: no Speed: Unknown! vf7-cmcc driver: ixgbevf bus-info: 0000:04:11.7 Link detected: no Speed: Unknown! vf7-hk driver: ixgbevf bus-info: 0000:04:11.6 Link detected: no Speed: Unknown! ##注意事项 别忘记在/etc/network/interfaces里添加pf自启动,不需要配置ip,但是如果PF是DOWN的,VF在虚拟机里将不能使用 auto pf-cmcc iface pf-cmcc inet manual up ip link set pf-cmcc up auto pf-hk iface pf-hk inet manual up ip link set pf-hk up ## Publication Information - [likizju](https://paragraph.com/@likizju/): Publication homepage - [All Posts](https://paragraph.com/@likizju/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@likizju): Subscribe to updates