[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1e41a3230804141748v2bf1f32bsc80307c9390c222@mail.gmail.com>
Date: Mon, 14 Apr 2008 17:48:51 -0700
From: "John Heffner" <johnwheffner@...il.com>
To: wenji@...l.gov
Cc: "Ilpo Järvinen" <ilpo.jarvinen@...sinki.fi>,
Netdev <netdev@...r.kernel.org>
Subject: Re: RE: A Linux TCP SACK Question
On Mon, Apr 14, 2008 at 3:47 PM, Wenji Wu <wenji@...l.gov> wrote:
> Hi, Ilpo,
>
> Could the throughput difference with SACK ON/OFF be due to the following
> code in tcp_ack()?
>
> 3120 if (tcp_ack_is_dubious(sk, flag)) {
> 3121 /* Advance CWND, if state allows this. */
> 3122 if ((flag & FLAG_DATA_ACKED) && !frto_cwnd &&
> 3123 tcp_may_raise_cwnd(sk, flag))
> 3124 tcp_cong_avoid(sk, ack, prior_in_flight, 0);
> 3125 tcp_fastretrans_alert(sk, prior_packets -
> tp->packets_out, flag);
> 3126 } else {
> 3127 if ((flag & FLAG_DATA_ACKED) && !frto_cwnd)
> 3128 tcp_cong_avoid(sk, ack, prior_in_flight, 1);
> 3129 }
>
> In my tests, there are actually no packet drops, just severe packet
> reordering in both forward and reverse paths. With good tcp_reordering
> auto-tuning, there are few retransmissions.
>
> (1) With SACK option off, the reorder ACKs will not cause much harm to the
> throughput. As you have pointed out in the email that "The ACK reordering
>
> should just make the number of duplicate acks smaller because part of them
> get discarded as old ones as a newer cumulative ACK often arrives a bit
> "ahead" of its time making rest smaller sequenced ACKs very close to on-op."
>
> If there are any ACK advancement, tcp_cong_avoid() will be called.
>
> (2) With the sack option is on. If the ACKs do not advance the left edge of
> the window, those ACKs will go to "old_ack" of "tcp_ack()", no much
> processing except sack-tagging the corresponding packets in the
> retransmission queue. tcp_cong_avoid() will not be called.
>
> However, if the ACKs advance the left edge of the window and these ACKs
> include SACK options, tcp_ack_is_dubious(sk, flag)) would be true. Then the
> calling of tcp_cong_avoid() needs to satisfy the if-condition at line 3122,
> which is stricter than the if-condition at line 3127.
>
> So, the congestion window with SACK on would be smaller than with SACK off.
>
> If you run tcptrace and xplot on the files I posted, you would see lots ACKs
> will advance the left edge of the window, and include SACK blocks.
>
> Not quite sure, just a guess.
I had considered this, but it would seem that tcp_may_raise_cwnd() in
this case *should* return true, right?
Sill the mystery remains as to why *both* are going so slowly. You
mentioned you're using a web100 kernel. What are the final values of
all the variables for the connections (grab with readall)?
Thanks,
-John
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists