使用echo的方式直接写入:echo 8 > /sys/class/net/ens9f0/device/sriov_numvfs
sriov的网卡使用的驱动 igbvf ixgbevf i40evf
https://blog.csdn.net/jacicson1987/article/details/103586551?utm_source=app
BIOS开启SR-IOV配置
网卡支持情况
lspci -v -s 00:01.0 查看网卡是否支持SR-IOV
modprobe igb max_vfs=7
grub.conf里添加也可以:添加intel_iommu=on iommu=pt igb.max_vfs=1,然后重启设备
ip link set ens11f2 vf 2 vlan 2
ip link set dev p5p1 vf 0 mac aa:bb:cc:dd:ee:00
ip link set dev p5p1 vf 0 trust on
ip link set dev p5p1 vf 0 spoof checking off
ifconfig ens11f2 promisc[root@localhost srv]# ip link show dev ens11f2
10: ens11f2: mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether 00:10:f3:76:ac:54 brd ff:ff:ff:ff:ff:ff
vf 0 MAC aa:da:2a:db:3a:46, spoof checking on, link-state auto
vf 1 MAC 2a:94:18:cb:2d:02, spoof checking on, link-state auto
vf 2 MAC 56:55:94:5f:fa:84, vlan 2, spoof checking on, link-state auto
vf 3 MAC f2:ac:19:f8:05:ee, spoof checking on, link-state auto
vf 4 MAC 16:7a:73:89:96:d6, spoof checking on, link-state auto
vf 5 MAC 56:54:66:01:8d:b8, spoof checking on, link-state auto
vf 6 MAC 62:ce:35:44:8b:77, spoof checking on, link-state auto
[root@localhost srv]#
modinfo igb
DPDK工具查看驱动绑定情况
SR-IOV 的数据包分发机制
其实,从逻辑上可以认为启用了 SR-IOV 技术后的物理网卡内置了一个特别的 Switch,将所有的 PF 和 VF 端口连接起来,通过 VF 和 PF 的 MAC 地址以及 VLAN ID 来进行数据包分发。
-
在 Ingress 上(从外部进入网卡):如果数据包的目的 MAC 地址和 VLAN ID 都匹配某一个 VF,那么数据包会分发到该 VF,否则数据包会进入 PF;如果数据包的目的 MAC 地址是广播地址,那么数据包会在同一个 VLAN 内广播,所有 VLAN ID 一致的 VF 都会收到该数据包。
-
在 Egress 上(从 PF 或者 VF 发出):如果数据包的 MAC 地址不匹配同一 VLAN 内的任何端口(VF 或 PF),那么数据包会向网卡外部转发,否则会直接在内部转发给对应的端口;如果数据包的 MAC 地址为广播地址,那么数据包会在同一个 VLAN 内以及向网卡外部广播。
NOTE:所有未设置 VLAN ID 的 VF 和 PF,可以认为是在同一个 LAN 中,不带 VLAN 的数据包在该 LAN 中按照上述规则进行处理。此外,设置了 VLAN 的 VF,发出数据包时,会自动给数据包加上 VLAN,在接收到数据包时,可以设置是否由硬件剥离 VLAN 头部。
原来的物理网卡还可以正常使用,在宿主机上也可以直接虚拟出网卡来
SR-IOV 标准将一个PCIe的网络控制器虚拟化成多个PCIe设备,即多个PCI虚拟网卡,这些虚拟网卡不仅可以给虚拟机使用,也可以直接给操作系统使用,也可以给物理机上的DPDK使用。
宿主机加载igbvf驱动即可
[root@localhost /]# ethtool -i enp1s19f2
driver: igbvf
version: 2.0.2-k
firmware-version:
bus-info: 0000:01:13.2
supports-statistics: yes
supports-test: yes
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no
[root@localhost /]#