From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55462) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b58yD-0006AL-D3 for qemu-devel@nongnu.org; Tue, 24 May 2016 05:49:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b58y9-0001hr-67 for qemu-devel@nongnu.org; Tue, 24 May 2016 05:49:48 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53486) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b58y8-0001hj-TH for qemu-devel@nongnu.org; Tue, 24 May 2016 05:49:45 -0400 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 741898E234 for ; Tue, 24 May 2016 09:49:44 +0000 (UTC) References: <1464034485-30543-1-git-send-email-wexu@redhat.com> <57440AB8.604@redhat.com> <20160524112527-mutt-send-email-mst@redhat.com> From: Wei Xu Message-ID: <574423B3.7000303@redhat.com> Date: Tue, 24 May 2016 17:49:39 +0800 MIME-Version: 1.0 In-Reply-To: <20160524112527-mutt-send-email-mst@redhat.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [ RFC Patch v5 0/2] Support Receive-Segment-Offload(RSC) for WHQL List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" , Jason Wang Cc: qemu-devel@nongnu.org, victork@redhat.com, yvugenfi@redhat.com, marcel@redhat.com, dfleytma@redhat.com On 2016=E5=B9=B405=E6=9C=8824=E6=97=A5 16:26, Michael S. Tsirkin wrote: > On Tue, May 24, 2016 at 04:03:04PM +0800, Jason Wang wrote: >> >> >> On 2016=E5=B9=B405=E6=9C=8824=E6=97=A5 04:14, wexu@redhat.com wrote: >>> From: Wei Xu >>> >>> Changes in V5: >>> - Passed all IPv4/6 test cases >>> - Add new fields in 'virtio_net_hdr' >>> - Set 'gso_type' & 'coalesced packets' in new field. >>> - Bypass all 'tcp option' packet >>> - Bypass all 'pure ack' packet >>> - Bypass all 'duplicate ack' packet >>> - Change 'guest_rsc' feature bit to 'false' by default >>> - Feedbacks from v4, typo, etc. >> >> Patch does not apply on master ... >> >>> >>> Note: >>> There is still a few pending issues about the feature bit, and need t= o be >>> discussed with windows driver maintainer, so linux guests with this p= atch >>> won't work at current, haven't figure it out yet, but i'm guessing it= 's >>> caused by the 'gso_type' is set to 'VIRTIO_NET_HDR_GSO_TCPV4/6', >>> will fix it after get the final solution, the below test steps and >>> performance data is based on v4. >> >> Can we split the patches into smaller ones to make review or merging e= asier? >> E.g can we send the patches without any feature negotiation and vnet h= eader >> extension? >> >> We can focus on the coalescing (maybe ipv4) without any guest involvem= ent in >> this series. In this way, the issues were limited and can be converged= soon. >> After this has been merged, we can add patches that co-operate with gu= ests >> on top (since it needs agreement on virtio specs). Does this sounds a = good >> plan? > > True but disabling everything when feature is not negotiated > reduces the risk somewhat. Sure. > >>> >>> Another suggestion from Jason is to adjust part of the code to make i= t >>> more readable, since there maybe still few change about the flowchart >>> in the future, such as timestamp, duplicate ack, so i'd like to delay= it >>> temporarily. >>> >>> Changes in V4: >>> - Add new host feature bit >>> - Replace using fixed header lenght with dynamic header lenght in Vir= tIONet >>> - Change ip/ip6 header union in NetRscUnit to void* pointer >>> - Add macro prefix, adjust code indent, etc. >>> >>> Changes in V3: >>> - Removed big param list, replace it with 'NetRscUnit' >>> - Different virtio header size >>> - Modify callback function to direct call. >>> - Needn't check the failure of g_malloc() >>> - Other code format adjustment, macro naming, etc >>> >>> Changes in V2: >>> - Add detailed commit log >>> >>> This patch is to support WHQL test for Windows guest, while this feat= ure also >>> benifits other guest works as a kernel 'gro' like feature with usersp= ace >>> implementation. >>> Feature information: >>> http://msdn.microsoft.com/en-us/library/windows/hardware/jj853324 >>> >>> Both IPv4 and IPv6 are supported, though performance with userspace v= irtio >>> is slow than vhost-net, there is about 1.5x to 2x performance improve= ment to >>> userspace virtio, this is done by turning this feature on and disable >>> 'tso/gso/gro' on corresponding tap interface and guest interface, whi= le get >>> less improment with all these feature on. >>> >>> Linux guest performance data(Netperf): >>> MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192= .168.2.101 () port 0 AF_INET : nodelay >>> Size Size Size Time Throughput >>> bytes bytes bytes secs. 10^6bits/sec >>> >>> 87380 16384 64 6.00 1221.20 >>> 87380 16384 64 6.00 1260.30 >>> >>> 87380 16384 128 6.00 1978.51 >>> 87380 16384 128 6.00 2286.05 >>> >>> 87380 16384 256 6.00 2677.94 >>> 87380 16384 256 6.00 4615.42 >>> >>> 87380 16384 512 6.00 2956.54 >>> 87380 16384 512 6.00 5356.39 >>> >>> 87380 16384 1024 6.00 2798.17 >>> 87380 16384 1024 6.00 4943.30 >>> >>> 87380 16384 2048 6.00 2681.09 >>> 87380 16384 2048 6.00 4835.81 >>> >>> 87380 16384 4096 6.00 3390.14 >>> 87380 16384 4096 6.00 5391.54 >>> >>> 87380 16384 8092 6.00 3008.27 >>> 87380 16384 8092 6.00 5381.68 >>> >>> 87380 16384 10240 6.00 2999.89 >>> 87380 16384 10240 6.00 5393.11 >>> >>> Test steps: >>> Although this feature is mainly used for window guest, i used linux g= uest to >>> help test the feature, to make things simple, i used 3 steps to test = the patch >>> as i moved on. >>> >>> 1. With a tcp socket client/server pair running on 2 linux guest, thu= s i can >>> control >>> the traffic and debugging the code as i want. >>> 2. Netperf on linux guest test the throughput. >>> 3. WHQL test with 2 Windows guests. >>> >>> Wei Xu (2): >>> virtio-net rsc: support coalescing ipv4 tcp traffic >>> virtio-net rsc: support coalescing ipv6 tcp traffic >>> >>> hw/net/virtio-net.c | 623 +++++++++++++++++= ++++++++++- >>> include/hw/virtio/virtio-net.h | 2 + >>> include/hw/virtio/virtio.h | 75 ++++ >>> include/standard-headers/linux/virtio_net.h | 2 + >>> 4 files changed, 699 insertions(+), 3 deletions(-) >>>