Linux 使用SR-IOV时PF VF重命名解决方法

#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