feat: igb nic, jumbo frames and tap offloads on the guest link

This commit is contained in:
2026-09-06 05:39:38 +02:00
parent 91fd1c45e1
commit f90745e68e
6 changed files with 45 additions and 27 deletions

View File

@@ -8,7 +8,7 @@
# vfio-native-qemu QEMU 11.1.1 with the platform-identity patches, in /opt
pkgname=vfio-native
pkgver=1.1.1
pkgver=1.3.0
pkgrel=1
pkgdesc="Present a libvirt guest as a self-consistent physical machine, and tune it"
arch=('any')
@@ -48,7 +48,6 @@ package() {
# this coexists with whatever hook the host already has.
install -Dm755 scripts/libvirt-hook-cpu-isolation.sh \
"${pkgdir}/etc/libvirt/hooks/qemu.d/10-cpu-isolation.sh"
# e1000e offloads corrupt integrity-checked traffic on libvirt taps; host-wide by nature
install -Dm644 scripts/99-vfio-native-vnet-offload.rules \
"${pkgdir}/usr/lib/udev/rules.d/99-vfio-native-vnet-offload.rules"
install -Dm755 scripts/libvirt-hook-vnet-offload.sh \
"${pkgdir}/etc/libvirt/hooks/qemu.d/20-vnet-offload.sh"
}

View File

@@ -49,11 +49,11 @@ post_install() {
'native' is a good default if you would rather not maintain anything.
A udev rule (99-vfio-native-vnet-offload.rules) turns TX offloads off on every
libvirt tap as it appears. The emulated e1000e NIC corrupts integrity-checked
traffic with them on; SSH to the guest fails with "Corrupted MAC on input".
It applies to every VM on the host; the throughput cost on a host<->guest
link is not measurable.
A hook at /etc/libvirt/hooks/qemu.d/20-vnet-offload.sh turns GSO and GRO on
for the guest's tap. With the interface's MTU 9000 that takes the inbound link
from 2.9 to 14 Gbit/s; neither does anything alone. The libvirt network needs
<mtu size='9000'/> too, and the guest needs Jumbo Packet 9014 with its
interface MTU at 9000.
A libvirt hook is installed at /etc/libvirt/hooks/qemu.d/10-cpu-isolation.sh.
It keeps host processes off the cores the guest is pinned to, automatically,