From: Wenji Wu <wenji@fnal.gov>
To: "Ilpo Järvinen" <ilpo.jarvinen@helsinki.fi>
Cc: John Heffner <johnwheffner@gmail.com>, Netdev <netdev@vger.kernel.org>
Subject: Re: RE: A Linux TCP SACK Question
Date: Tue, 15 Apr 2008 13:01:29 -0500 [thread overview]
Message-ID: <fc3c25e72104.4804a729@fnal.gov> (raw)
In-Reply-To: <Pine.LNX.4.64.0804151035060.17123@wrl-59.cs.helsinki.fi>
> No, this is not right. The old_ack happens only if left edge
> backtracks, in which case we obviously should discard as it's stale
> information (except SACK may reveal something not yet known which is
> why sacktag is called there). This same applies regardless of SACK (no
>
> tagging of course).
Yes, I mis-present myself in the last email. What I meant is the left edge backtrack case as you have pointed out.
>
> I think you might have found a bug though it won't affect you but
> makes
> that check easier to pass actually:
>
> Questionable thing is that || in tcp_may_raise_cwnd (might not be
> intentional)...
>
> But in your case, during initial slow-start that condition in
> tcp_may_raise_cwnd will always be true (if you've metrics are cleared
> as
> they should). Because: (...not important || 1) && 1 because cwnd <
> ssthresh. After that, when you don't have ECE nor are in recovery,
> tcp_may_raise_cwnd results in this: (1 || ...not calculated) && 1, so
> it
> should always allow increment in your case except when in recovery
> which
> hardly makes up for the difference you're seeing...
You are right, I just printed out the return value of tcp_may_raise_cwnd(). It is all one!
> This would only make difference if any of those SACK blocks were new.
> If
> they're not, DATA_SACKED_ACKED won't be set in flag.
>
> > > Not quite sure, just a guess.
>
> You seem to be missing the third case, which I tried to point out
> earlier. The case where left edge remains the same. I think it makes a
>
> huge difference here (I'll analyse non-recovery case here):
>
> NewReno goes always to fastretrans_alert, to default branch, and
> because
> it's is_dupack, it increments sacked_out through tcp_add_reno_sack.
> Effectively packets_in_flight is reduced by one and TCP is able to
> send
> a new segment out.
>
> Now with SACK there are two cases:
>
> SACK and newly discovere SACK info (for simplicity, lets assume just
> one
> newly discovered sacked segment). Sacktag marks that segment and
> increment
> sacked_out, effectively making packets_in_flight equal to the case
> with
> NewReno. It goes to fastretrans_alert and makes all similar maneuvers
> as
> NewReno (except if enough SACK blocks have arrived to trigger recovery
>
> while NewReno would not have enough dupACKs collected, I doubt that
> this
> makes the difference though, I'll need no-metricsed logs to verify the
>
> number of recoveries to confirm that they're quite few).
>
> SACK and no new SACK info. Sacktag won't find anything to mark, thus
> sacked_out remains the same. It goes to fastretrans_alert because
> ca_state
> is CA_Disorder. But, now we did lose one segment compared with NewReno
>
> because we didn't increment sacked_out making packets_in_flight to
> stay in
> the amount it was before. Thus we cannot send new data segment out and
>
> fall behind the NewReno.
Agree with you. Thanks. You did give me a good class on Linux ACK/SACK implementation. Thank you.
> > I had considered this, but it would seem that tcp_may_raise_cwnd() in
> > this case *should* return true, right?
>
> Yes, it seems. Though I think that it's unintentional. I'd say that
> that
> || should be && but I might be wrong.
Yes, It is all ture!
wenji
next prev parent reply other threads:[~2008-04-15 18:03 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-04 4:54 A Linux TCP SACK Question Wenji Wu
2008-04-04 16:27 ` John Heffner
2008-04-04 17:49 ` Wenji Wu
2008-04-04 18:07 ` John Heffner
2008-04-04 20:00 ` Ilpo Järvinen
2008-04-04 20:07 ` Wenji Wu
2008-04-04 21:15 ` Wenji Wu
2008-04-04 21:33 ` Ilpo Järvinen
2008-04-04 21:39 ` Ilpo Järvinen
2008-04-04 22:14 ` Wenji Wu
2008-04-05 17:42 ` Ilpo Järvinen
2008-04-05 21:17 ` Sangtae Ha
2008-04-06 20:27 ` Wenji Wu
2008-04-06 22:43 ` Sangtae Ha
2008-04-07 14:56 ` Wenji Wu
2008-04-08 6:36 ` Ilpo Järvinen
2008-04-08 12:33 ` Wenji Wu
2008-04-08 13:45 ` Ilpo Järvinen
2008-04-08 14:30 ` Wenji Wu
2008-04-08 14:59 ` Ilpo Järvinen
2008-04-08 15:27 ` Wenji Wu
2008-04-08 17:26 ` Ilpo Järvinen
2008-04-14 22:47 ` Wenji Wu
2008-04-15 0:48 ` John Heffner
2008-04-15 8:25 ` Ilpo Järvinen
2008-04-15 18:01 ` Wenji Wu [this message]
2008-04-15 22:40 ` John Heffner
2008-04-16 8:27 ` David Miller
2008-04-16 9:21 ` Ilpo Järvinen
2008-04-16 9:35 ` David Miller
2008-04-16 14:50 ` Wenji Wu
2008-04-18 6:52 ` David Miller
2008-08-27 14:38 ` about Linux adaptivly adjusting ssthresh Wenji Wu
2008-08-27 22:48 ` John Heffner
2008-08-28 0:53 ` Wenji Wu
2008-08-28 6:34 ` Ilpo Järvinen
2008-08-28 14:20 ` about Linux adaptivly adjusting dupthresh Wenji Wu
2008-08-28 18:53 ` Ilpo Järvinen
2008-08-28 19:30 ` Wenji Wu
2008-04-16 14:40 ` A Linux TCP SACK Question John Heffner
2008-04-16 15:03 ` Ilpo Järvinen
2008-04-16 14:46 ` Wenji Wu
2008-04-15 15:45 ` Wenji Wu
2008-04-15 16:39 ` Wenji Wu
2008-04-15 17:01 ` John Heffner
2008-04-15 17:08 ` Ilpo Järvinen
2008-04-15 17:23 ` John Heffner
2008-04-15 18:00 ` Matt Mathis
2008-04-15 17:55 ` Wenji Wu
2008-04-08 15:57 ` John Heffner
2008-04-08 14:07 ` John Heffner
2008-04-14 16:10 ` Wenji Wu
2008-04-14 16:48 ` Ilpo Järvinen
2008-04-14 22:07 ` Wenji Wu
2008-04-15 8:23 ` Ilpo Järvinen
2008-04-04 21:40 ` Wenji Wu
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=fc3c25e72104.4804a729@fnal.gov \
--to=wenji@fnal.gov \
--cc=ilpo.jarvinen@helsinki.fi \
--cc=johnwheffner@gmail.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).