[pve-devel] IFF_VNET_HDR ioctl on tap device
Dietmar Maurer
dietmar at proxmox.com
Tue Apr 17 11:57:47 CEST 2012
AFAIK this is already in qemu-kvm:
qemu-kvm/qemu-bridge-helper.c
Or do I miss something?
- Dietmar
> -----Original Message-----
> From: pve-devel-bounces at pve.proxmox.com [mailto:pve-devel-
> bounces at pve.proxmox.com] On Behalf Of Alexandre DERUMIER
> Sent: Dienstag, 17. April 2012 10:55
> To: pve-devel at pve.proxmox.com
> Subject: [pve-devel] IFF_VNET_HDR ioctl on tap device
>
> Hi,
> I was reading a mail in kvm mailing about a debian-libvirt bug with network
> performance with virtio devices.
>
> libvirt do an ioctl IFF_VNET_HDR on tap devices if qemu has support for
> IFF_VNET_HDR and kernel implement TUNGETIFF ioctl().
>
> Maybe can we implement this ?
>
>
>
>
>
> libvirt code
> ------------
>
> /**
> * virNetDevProbeVnetHdr:
> * @tapfd: a tun/tap file descriptor
> *
> * Check whether it is safe to enable the IFF_VNET_HDR flag on the
> * tap interface.
> *
> * Setting IFF_VNET_HDR enables QEMU's virtio_net driver to allow
> * guests to pass larger (GSO) packets, with partial checksums, to
> * the host. This greatly increases the achievable throughput.
> *
> * It is only useful to enable this when we're setting up a virtio
> * interface. And it is only *safe* to enable it when we know for
> * sure that a) qemu has support for IFF_VNET_HDR and b) the running
> * kernel implements the TUNGETIFF ioctl(), which qemu needs to query
> * the supplied tapfd.
> *
> * Returns 1 if VnetHdr is supported, 0 if not supported */ #ifdef
> IFF_VNET_HDR static int
>
> virNetDevProbeVnetHdr(int tapfd)
> {
> # if defined(IFF_VNET_HDR) && defined(TUNGETFEATURES) &&
> defined(TUNGETIFF)
> unsigned int features;
> struct ifreq dummy;
>
> if (ioctl(tapfd, TUNGETFEATURES, &features) != 0) {
> VIR_INFO("Not enabling IFF_VNET_HDR; "
> "TUNGETFEATURES ioctl() not implemented");
> return 0;
> }
>
> if (!(features & IFF_VNET_HDR)) {
> VIR_INFO("Not enabling IFF_VNET_HDR; "
> "TUNGETFEATURES ioctl() reports no IFF_VNET_HDR");
> return 0;
> }
> /* The kernel will always return -1 at this point.
> * If TUNGETIFF is not implemented then errno == EBADFD.
> */
> if (ioctl(tapfd, TUNGETIFF, &dummy) != -1 || errno != EBADFD) {
> VIR_INFO("Not enabling IFF_VNET_HDR; "
> "TUNGETIFF ioctl() not implemented");
> return 0;
> }
>
> VIR_INFO("Enabling IFF_VNET_HDR");
>
> return 1;
> # else
> (void) tapfd;
> VIR_INFO("Not enabling IFF_VNET_HDR; disabled at build time");
> return 0;
> # endif
> }
> #endif
>
>
>
>
>
>
> mail from mailing
> -----------------
>
>
>
> On 12.04.2012 11:42, Hans-Kristian Bakke wrote:
> > Hi
> >
> > For some reason I am not able to get good network performance using
> > virtio/vhost-net on Debian KVM host (perhaps also valid for Ubuntu
> > hosts then).
>
> The issue has been identified, after Hans-Kristian gave me access to his
> machine and I did alot of testing. And as usual, the root cause was very
> stupid... ;)
>
> In last release of debian qemu-kvm package I changed the way how debian
> package version string propagates to build procedure -- before it was a patch
> grabbing values from debian/version, but in last release I used --with-
> pkgversion configure flag. This resulted in the following change:
>
> - QEMU emulator version 1.0 (qemu-kvm-1.0 Debian 1.0+dfsg-8), Copyright
> (c) 2003-2008 Fabrice Bellard
> + QEMU emulator version 1.0 (Debian qemu-kvm 1.0+dfsg-9), Copyright (c)
> + 2003-2008 Fabrice Bellard
>
> As it turns out, libvirt parses `qemu -version' output and looks for " (qemu-
> kvm-" string in there, and if it is found, libvirt enables some "extra" features.
> Important for us was setting IFF_VNET_HDR flag for a tap device, --
> apparently this flag makes a HUGE difference in networking speed, especially
> when using vhost_net.
>
> Obviously this is a change unique to debian, and I never thought about such
> an.. "interesting" effect it may give us.
>
> This is a libvirt bug actually, since support of vnet_hdr can be determined by
> other means, and since upstream qemu now has almost everything from
> qemu-kvm, and it wants to be fast too. But since qemu[-kvm] has a long
> history of changing features, it is difficult to blame libvirt that much...
>
> Oh well.
>
> Thanks!
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
More information about the pve-devel
mailing list