netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Werner Almesberger <wa@almesberger.net>
To: kuznet@ms2.inr.ac.ru
Cc: netdev@oss.sgi.com, chengjin@cs.caltech.edu
Subject: Re: snd_cwnd drawn and quartered
Date: Tue, 14 Jan 2003 03:36:51 -0300	[thread overview]
Message-ID: <20030114033651.S1516@almesberger.net> (raw)
In-Reply-To: <200301140614.JAA10804@sex.inr.ac.ru>; from kuznet@ms2.inr.ac.ru on Tue, Jan 14, 2003 at 09:14:36AM +0300

kuznet@ms2.inr.ac.ru wrote:
> Sorry, it is just nonsense in newreno, it is that high_seq makes.
> Well, and this is surely not fine, losses in several consecutive
> windows must result in multiplicative reduction of cwnd.

This is precisely what NewReno does. If you lose anything within
that cwnd, recovery is extended. If you lose something after the
cwnd, you'll first finish the old recovery cycle (since snd_una
has now passed high_seq), and then enter a new one, with the
appropriate reduction of ssthresh and cwnd.

> > Yes yes, we do ... that's what NewReno is all about. Let's say you
> > lose the 0th and the 99th segment (with cwnd = 100). You'll detect
> > the first loss at t = 100, and enter recovery. You leave recovery
> > once snd_nxt (stored in high_seq) at that time has been ack'ed. So
> > this is 100. At time t=199, we find out about the loss of the 99th
> > segment, and retransmit. This gets ack'ed at time t=299. So it's
> > only then when we leave recovery.
> 
> I do not understand, what you has just said. You cant discover
> loss of 99th segment _after_ 100th was happily ACKed. :-) :-)

That would be kind of evil :-) But that's not what I meant. The
100 refers to high_seq, i.e. the segment we need to get ack'ed
for leaving recovery.

> But thit does not matter because it handles opposite case, when cwnd
> was not reduced enough for one RTT, so rh falls to hold state
> to decrease cwnd smoothly. It is just an unnecessary complication
> to my opinion. Did I get this wrong?

Hmm, I think it's like I said. The case of cwnd not getting
reduced enough is handled when exiting repair, i.e. section 4.13
and 4.14.

Note that those intervals don't have to be explicitly tracked in
any way. E.g. the adjustment interval can just be implemented by
stopping decrementing cwnd at the new ssthresh.

> Picture, Werner! What does happen on picture quarter.eps????

t=0:  we have the first loss. At this time, snd_nxt is 100, so
      we set high_seq accordingly, slash ssthresh, and enter
      recovery.
~98:  we have the last loss within our cwnd (the simulation
      just stops losing packets at this point. In real life,
      this transmission should of course be smoother.)
100:  we've recovered our initial loss, but snd_una is still
      below high_seq, because of all the other losses in that
      cwnd
~200: we recover the last loss, and snd_una finally increases
      above high_seq, so we leave recovery now.

All that is just fine, if I interpret NewReno right. The only
problem is that we should have stopped reducing cwnd after the
first RTT.

- Werner

-- 
  _________________________________________________________________________
 / Werner Almesberger, Buenos Aires, Argentina         wa@almesberger.net /
/_http://www.almesberger.net/____________________________________________/

  reply	other threads:[~2003-01-14  6:36 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-12-25  1:50 snd_cwnd drawn and quartered Werner Almesberger
2003-01-02  1:38 ` kuznet
2003-01-02  6:08   ` Werner Almesberger
2003-01-02  8:31     ` Werner Almesberger
2003-01-02 21:26     ` Werner Almesberger
2003-01-14  0:12     ` kuznet
2003-01-14  1:20       ` Cheng Jin
2003-01-14  1:46         ` kuznet
2003-01-14  1:58           ` Cheng Jin
2003-01-14  2:12             ` kuznet
2003-01-14  2:19               ` Cheng Jin
2003-01-14  5:07                 ` kuznet
2003-01-14  4:01       ` Werner Almesberger
     [not found]         ` <200301140502.IAA10733@sex.inr.ac.ru>
2003-01-14  5:25           ` Werner Almesberger
2003-01-14  6:14             ` kuznet
2003-01-14  6:36               ` Werner Almesberger [this message]
2003-01-15 17:50                 ` kuznet
2003-01-15 18:25                   ` Werner Almesberger
2003-01-15 18:43                     ` kuznet
2003-01-15 19:37                       ` Werner Almesberger
2003-01-19  6:55         ` example showing how cwnd gets to one Cheng Jin
2003-01-14  0:54     ` snd_cwnd drawn and quartered kuznet

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=20030114033651.S1516@almesberger.net \
    --to=wa@almesberger.net \
    --cc=chengjin@cs.caltech.edu \
    --cc=kuznet@ms2.inr.ac.ru \
    --cc=netdev@oss.sgi.com \
    /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).