From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39299) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b57fQ-0001RC-0K for qemu-devel@nongnu.org; Tue, 24 May 2016 04:26:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b57fK-0001Zm-VU for qemu-devel@nongnu.org; Tue, 24 May 2016 04:26:19 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38832) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b57fK-0001Ze-NZ for qemu-devel@nongnu.org; Tue, 24 May 2016 04:26:14 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (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 94DA481109 for ; Tue, 24 May 2016 08:26:13 +0000 (UTC) Date: Tue, 24 May 2016 11:26:10 +0300 From: "Michael S. Tsirkin" Message-ID: <20160524112527-mutt-send-email-mst@redhat.com> References: <1464034485-30543-1-git-send-email-wexu@redhat.com> <57440AB8.604@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <57440AB8.604@redhat.com> 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: Jason Wang Cc: wexu@redhat.com, qemu-devel@nongnu.org, victork@redhat.com, yvugenfi@redhat.com, marcel@redhat.com, dfleytma@redhat.com On Tue, May 24, 2016 at 04:03:04PM +0800, Jason Wang wrote: >=20 >=20 > 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. >=20 > Patch does not apply on master ... >=20 > > > >Note: > >There is still a few pending issues about the feature bit, and need to= be > >discussed with windows driver maintainer, so linux guests with this pa= tch > >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. >=20 > Can we split the patches into smaller ones to make review or merging ea= sier? > E.g can we send the patches without any feature negotiation and vnet he= ader > extension? >=20 > We can focus on the coalescing (maybe ipv4) without any guest involveme= nt 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 gue= sts > on top (since it needs agreement on virtio specs). Does this sounds a g= ood > plan? True but disabling everything when feature is not negotiated reduces the risk somewhat. > > > >Another suggestion from Jason is to adjust part of the code to make it > >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 Virt= IONet > >- 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 featu= re also > >benifits other guest works as a kernel 'gro' like feature with userspa= ce > >implementation. > >Feature information: > > http://msdn.microsoft.com/en-us/library/windows/hardware/jj853324 > > > >Both IPv4 and IPv6 are supported, though performance with userspace vi= rtio > >is slow than vhost-net, there is about 1.5x to 2x performance improvem= ent to > >userspace virtio, this is done by turning this feature on and disable > >'tso/gso/gro' on corresponding tap interface and guest interface, whil= e 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 gu= est to > >help test the feature, to make things simple, i used 3 steps to test t= he patch > >as i moved on. > > > >1. With a tcp socket client/server pair running on 2 linux guest, thus= 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(-) > >