From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1N0ZOA-0006jZ-6U for qemu-devel@nongnu.org; Wed, 21 Oct 2009 07:29:59 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1N0ZO3-0006eh-NM for qemu-devel@nongnu.org; Wed, 21 Oct 2009 07:29:55 -0400 Received: from [199.232.76.173] (port=57328 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1N0ZO2-0006e7-9Q for qemu-devel@nongnu.org; Wed, 21 Oct 2009 07:29:50 -0400 Received: from mx1.redhat.com ([209.132.183.28]:40568) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1N0ZO1-0002xI-MW for qemu-devel@nongnu.org; Wed, 21 Oct 2009 07:29:49 -0400 Received: from int-mx05.intmail.prod.int.phx2.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.18]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n9LBTmwb009292 for ; Wed, 21 Oct 2009 07:29:49 -0400 Received: from blaa.localdomain (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx05.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n9LBTleH023693 for ; Wed, 21 Oct 2009 07:29:48 -0400 From: Mark McLoughlin Date: Wed, 21 Oct 2009 12:27:39 +0100 Message-Id: <1256124478-2988-1-git-send-email-markmc@redhat.com> Subject: [Qemu-devel] [PATCH 00/19] List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Hey, Over a year ago we added some code to qemu-kvm.git which takes advantage of the recent tun/tap IFF_VNET_HDR feature in order to allow virtio-net to send and receive packets with partial checksums and segmentation offloaded: http://article.gmane.org/gmane.comp.emulators.kvm.devel/20440 "This allows us to pass larger packets and packets with partial checkums between the guest and the host, greatly increasing the achievable bandwidth." Unfortunately, that implementation was quite hacky as it made some assumptions that would break if e.g. you added another network client to a vlan where the feature had enabled. Now that we have the -netdev parameter, we can more safely pair the NIC and backend, allowing us to negatiate features like this. What follows is a somewhat cleaned up version of the code from qemu-kvm.git. Further cleanups are probably possible, but I think this much is mergeable. Some points of discussion: - If you start a guest on a host which supports IFF_VNET_HDR and migrate to a host which doesn't support it, we can't just tell the guest to stop using GSO. We need prevent this by rejecting the migration on the destination if IFF_VNET_HDR is required but not available. However, in my testing if a load() function returns an error, the migration is seen to have completed on the source but failed on the destination. Clearly that's wrong, but I haven't investigated further yet. Also, we provide a vnet_hdr= arg so that people can prevent the feature being used on the source or require that is available on the destination. - I've slightly abused QemuOpts in 05/19. Comments welcome. - The whole mess around adding a 'raw' packet flag for the gratuitous ARP packet is gratuitously messy. - I'm always enabling IFF_VNET_HDR if it's available. I don't think that's a problem, especially compared to what would be required to only selectively enable it. Cheers, Mark.