From: Ben Hutchings <bhutchings@solarflare.com>
To: Joris van Rantwijk <joris@jorisvr.nl>
Cc: netdev@vger.kernel.org
Subject: Re: Question about LRO/GRO and TCP acknowledgements
Date: Sun, 12 Jun 2011 04:43:44 +0100 [thread overview]
Message-ID: <1307850224.22348.626.camel@localhost> (raw)
In-Reply-To: <20110611215919.5fc29c27@konijn>
On Sat, 2011-06-11 at 21:59 +0200, Joris van Rantwijk wrote:
> Hi,
>
> I'm trying to understand how Linux produces TCP acknowledgements
> for segments received via LRO/GRO.
>
> As far as I can see, the network driver uses GRO to collect several
> received packets into one big super skb, which is then handled
> during just one call to tcp_v4_rcv(). This will eventually result
> in the sending of at most one ACK packet for the entire GRO packet.
>
> Conventional wisdom (RFC 5681) says that a receiver should send at
> least one ACK for every two data segments received. The sending TCP
> needs these ACKs to update its congestion window (e.g. slow start).
>
> It seems to me that the current implementation in Linux may send
> just one ACK for a large number of received segments. This would
> be a deviation from the standard. As a result the congestion
> window of the sender would grow much slower than intended.
This was a problem in older versions of Linux (and still is on other
network stacks that aren't aware of LRO).
> Maybe I misunderstand something in the network code (likely).
> Could someone please explain me how this ACK issue is handled?
LRO implementations (and GRO) are expected to put the actual segment
size in skb_shared_info(skb)->gso_size on the aggregated skb. TCP will
then use that rather than the aggregated payload size when deciding
whether to defer an ACK.
Ben.
--
Ben Hutchings, Senior Software Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
next prev parent reply other threads:[~2011-06-12 4:43 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-11 19:59 Question about LRO/GRO and TCP acknowledgements Joris van Rantwijk
2011-06-12 3:43 ` Ben Hutchings [this message]
2011-06-12 7:51 ` Joris van Rantwijk
2011-06-12 9:07 ` Eric Dumazet
2011-06-12 9:30 ` Joris van Rantwijk
2011-06-12 10:48 ` Eric Dumazet
2011-06-12 11:24 ` Joris van Rantwijk
2011-06-12 12:01 ` Alexander Zimmermann
2011-06-12 14:57 ` Eric Dumazet
2011-06-12 19:37 ` Joris van Rantwijk
2011-06-14 10:53 ` Ilpo Järvinen
2011-06-14 19:37 ` Joris van Rantwijk
2011-06-13 17:55 ` Rick Jones
2011-06-13 17:34 ` Rick Jones
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1307850224.22348.626.camel@localhost \
--to=bhutchings@solarflare.com \
--cc=joris@jorisvr.nl \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.