Hi, I’m running a virtualized instance of XG v18.0.5 MR5 on Windows Server 2019. Everything is currently running without any issues but I was wondering how XG handles SR-IOV compatible NICs and virtual functions.
I’d like to know how to confirm if virtual functions are utilized in a XG virtual machine. I have compatible hardware and have confirmed being able to get SR-IOV virtual functions working on Ubuntu 20.10 VMs running on the system:
user@examplevm:~$ lspci
6368:00:02.0 Ethernet controller: Intel Corporation X540 Virtual Function (rev 01)
user@examplevm:~$ ethtool -i enP25448s1
driver: ixgbevf
version: 4.1.0-k
firmware-version:
expansion-rom-version:
bus-info: 6368:00:02.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: yes
I tried to do the same for XG and ensured that an SR-IOV enabled virtual switch and SR-IOV enabled virtual network adapters were attached. However, when I run lsmod on XG via the advanced shell, it does not return the expected virtual function driver, ixgbevf:
SFVH_HV01_SFOS 18.0.5 MR-5# lsmod | grep ixg
SFVH_HV01_SFOS 18.0.5 MR-5#
I checked with lspci and confirmed that X540 virtual functions do show up (Device 8086:1530):
SFVH_HV01_SFOS 18.0.5 MR-5# lspci
0000:00:00.0 Class 0600: Device 8086:7192 (rev 03)
0000:00:07.0 Class 0601: Device 8086:7110 (rev 01)
0000:00:07.1 Class 0101: Device 8086:7111 (rev 01)
0000:00:07.3 Class 0680: Device 8086:7113 (rev 02)
0000:00:08.0 Class 0300: Device 1414:5353
0001:00:02.0 Class 0200: Device 8086:1530 (rev 01)
0002:00:02.0 Class 0200: Device 8086:1530 (rev 01)
Running ethtool however shows that the interfaces are using the Hyper-V synthetic NIC driver hv_netvsc. For example:
SFVH_HV01_SFOS 18.0.5 MR-5# ethtool -i PortA
driver: hv_netvsc
version:
firmware-version: N/A
expansion-rom-version:
bus-info:
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
I saw an older thread here that indicated ixgbevf was included in XG v18 (link) so I am wondering if I set something incorrectly that is blocking its use. The only other thing I could think of was to check how Linux Integration Services are being loaded via dmesg and see how they compare. I noticed that the virtual function is initialized in my Ubuntu VM but seems to not be in XG.
XG:
SFVH_HV01_SFOS 18.0.5 MR-5# dmesg | grep hv_
[ 0.918561] hv_vmbus: Vmbus version:4.0
[ 1.113594] hv_vmbus: registering driver hv_pci
[ 3.776196] hv_vmbus: registering driver hv_storvsc
[ 3.788685] hv_vmbus: registering driver hyperv_keyboard
[ 11.599637] hv_vmbus: registering driver hv_netvsc
[ 11.621839] hv_pci b612be23-0ba3-4a82-9ccf-4c92448d0ed3: PCI VMBus probing: Using version 0x10002
[ 11.626903] hv_pci b612be23-0ba3-4a82-9ccf-4c92448d0ed3: PCI host bridge to bus 0001:00
[ 11.698660] hv_pci 6bd4d948-43a0-4198-8e63-1cad876cb55c: PCI VMBus probing: Using version 0x10002
[ 11.701120] hv_pci 6bd4d948-43a0-4198-8e63-1cad876cb55c: PCI host bridge to bus 0002:00
[ 12.119078] hv_utils: Registering HyperV Utility Driver
[ 12.119079] hv_vmbus: registering driver hv_util
[ 12.119522] hv_utils: Heartbeat IC version 3.0
[ 12.119737] hv_utils: Shutdown IC version 3.0
[ 12.119976] hv_utils: TimeSync IC version 4.0
[ 12.120110] hv_utils: VSS IC version 5.0
[ 12.129464] hv_vmbus: registering driver hv_balloon
[ 12.129978] hv_balloon: Using Dynamic Memory protocol version 2.0
[ 12.460728] hv_netvsc 928c5b58-31aa-42fb-bcd0-e072a1f8ee9f PortA: renamed from eth0
[ 12.717417] hv_netvsc 357d96fd-e884-4033-9b22-6d0fe4563542 PortB: renamed from eth1
[ 60.221547] hv_balloon: Max. dynamic memory size: 6144 MB
Ubuntu:
user@examplevm:~$ sudo dmesg | grep hv_
[ 0.067374] hv_vmbus: Vmbus version:5.2
[ 0.161719] hv_vmbus: registering driver hv_pci
[ 0.179440] hv_vmbus: registering driver hv_storvsc
[ 0.394467] hv_utils: Registering HyperV Utility Driver
[ 0.394471] hv_vmbus: registering driver hv_utils
[ 0.395024] hv_utils: Heartbeat IC version 3.0
[ 0.395055] hv_utils: TimeSync IC version 4.0
[ 0.395065] hv_utils: Shutdown IC version 3.2
[ 0.395488] hv_utils: VSS IC version 5.0
[ 0.400103] hv_vmbus: registering driver hid_hyperv
[ 0.403216] hv_vmbus: registering driver hv_netvsc
[ 0.404355] hv_vmbus: registering driver hyperv_keyboard
[ 0.429560] hv_netvsc 4c414281-5fa0-4058-8010-20a5ba4783fb (unnamed net_device) (uninitialized): VF slot 1 added
[ 0.432438] hv_pci 22c0a493-0a6f-48b3-91da-8ee4421ef54e: PCI VMBus probing: Using version 0x10002
[ 0.436016] hv_pci 22c0a493-0a6f-48b3-91da-8ee4421ef54e: PCI host bridge to bus 6368:00
[ 0.533857] hv_netvsc 4c414281-5fa0-4058-8010-20a5ba4783fb eth0: VF registering: eth1
[ 3.028066] systemd[1]: Unnecessary job for /sys/devices/virtual/misc/vmbus!hv_vss was removed.
[ 3.028074] systemd[1]: Unnecessary job for /sys/devices/virtual/misc/vmbus!hv_fcopy was removed.
[ 3.317856] hv_vmbus: registering driver hv_balloon
[ 3.318278] hv_balloon: Using Dynamic Memory protocol version 2.0
[ 3.336505] hv_vmbus: registering driver hyperv_fb
[ 3.493944] hv_utils: KVP IC version 4.0
[ 4.718607] hv_netvsc 4c414281-5fa0-4058-8010-20a5ba4783fb eth0: Data path switched to VF: enP25448s1
[ 7.383364] hv_utils: VSS: userspace daemon ver. 129 connected
[ 51.414650] hv_balloon: Max. dynamic memory size: 2048 MB
[ 52.214583] Workqueue: events hot_add_req [hv_balloon]
[ 52.214622] hv_mem_hot_add+0x78/0x100 [hv_balloon]
[ 52.214624] handle_pg_range+0x18b/0x1a0 [hv_balloon]
[ 52.214625] hot_add_req+0xed/0x240 [hv_balloon]
I'm far from a Linux expert so my apologies if I'm missing something obvious.
This thread was automatically locked due to age.