On Mon, Apr 04, 2016 at 03:25:55AM +0800, w...@redhat.com wrote: > From: Wei Xu <w...@redhat.com> > > All the data packets in a tcp connection will be cached to a big buffer > in every receive interval, and will be sent out via a timer, the > 'virtio_net_rsc_timeout' controls the interval, the value will influent the > performance and response of tcp connection extremely, 50000(50us) is a > experience value to gain a performance improvement, since the whql test > sends packets every 100us, so '300000(300us)' can pass the test case, > this is also the default value, it's gonna to be tunable. > > The timer will only be triggered if the packets pool is not empty, > and it'll drain off all the cached packets > > 'NetRscChain' is used to save the segments of different protocols in a > VirtIONet device. > > The main handler of TCP includes TCP window update, duplicated ACK check > and the real data coalescing if the new segment passed sanity check > and is identified as an 'wanted' one. > > An 'wanted' segment means: > 1. Segment is within current window and the sequence is the expected one. > 2. ACK of the segment is in the valid window. > 3. If the ACK in the segment is a duplicated one, then it must less than 2, > this is to notify upper layer TCP starting retransmission due to the spec. > > Sanity check includes: > 1. Incorrect version in IP header > 2. IP options & IP fragment > 3. Not a TCP packets > 4. Sanity size check to prevent buffer overflow attack. > > There maybe more cases should be considered such as ip identification other > flags, while it broke the test because windows set it to the same even it's > not a fragment. > > Normally it includes 2 typical ways to handle a TCP control flag, 'bypass' > and 'finalize', 'bypass' means should be sent out directly, and 'finalize' > means the packets should also be bypassed, and this should be done > after searching for the same connection packets in the pool and sending > all of them out, this is to avoid out of data. > > All the 'SYN' packets will be bypassed since this always begin a new' > connection, other flags such 'FIN/RST' will trigger a finalization, because > this normally happens upon a connection is going to be closed, an 'URG' packet > also finalize current coalescing unit. > > Statistics can be used to monitor the basic coalescing status, the 'out of > order' > and 'out of window' means how many retransmitting packets, thus describe the > performance intuitively. > > Signed-off-by: Wei Xu <w...@redhat.com>
Yan pointed out that VIRTIO_NET_HDR_GSO_* is never used in this patch, nor is gso_type ever set in virtio net header. This seems strange. -- MST