[Iccrg] improvement of tcp slow start
Lachlan Andrew
lachlan.andrew at gmail.com
Fri Mar 16 03:46:08 GMT 2007
Greetings Stefan,
The main problem with increasing the rate of increase of slow start is
that it creates larger overshoot when the correct rate is reached. If
we triple the rate each RTT instead of doubling it (or multiplying by
1.5 -- see the recent discussion on the end2end-interest list), then
we are transmitting at three times too fast when we finish.
What would be more useful would be something which can detect when
slow-start is nearing its end -- like measuring queueing delay or some
property of the RTT-level burstiness -- so that we can start
aggressively but back off when we're nearing the end.
There are also fairness issues with having some sources using
"improved" slow start and some using the existing algorithm, although
I think they're often overstated.
Cheers,
Lachlan
On 16/03/07, Stefan Hirschmann <krasnoj at gmx.at> wrote:
> Hi!
>
> I made a few thoughts about the tcp slow start behavior (each paket
> increases the window by 1, so that the value is doubled each RTT). But I
> think this behaviour is to slow, so that most of the connection can not
> use the maximum speed.
>
> I wrote a TCP slow start simulator <http://nopaste.debianforum.de/5415>
> . The output is:
> time[ms] currend send window[1] current used bandwith[KB/s]
> already sended data[KByte]
>
> If you look at the output:
> =============================================================
> $: ./slowStartSimulator 102400 1.5 500 1 1
> bandWith = 102400
> time snd_cwnd used_bandWith alreadySended
> 0 1 3.0 0.0
> 500 2 6.0 1.5
> 1000 4 12.0 4.5
> 1500 8 24.0 10.5
> 2000 16 48.0 22.5
> 2500 32 96.0 46.5
> 3000 64 192.0 94.5
> 3500 128 384.0 190.5
> 4000 256 768.0 382.5
> 4500 512 1536.0 766.5
> 5000 1024 3072.0 1534.5
> 5500 2048 6144.0 3070.5
> 6000 4096 12288.0 6142.5
> 6500 8192 24576.0 12286.5
> 7000 16384 49152.0 24574.5
> 7500 32768 98304.0 49150.5
> 8000 65536 196608.0 98302.5
> USAGE: ./slowStartSimulator bandwith packetSize pingTime [adder multiplier]
> everything in KB and ms
> =============================================================
> You see that it takes 8 seconds till the TCP flow reaches 100MB/s at a
> pingTime from 500ms (realistic for satellite uplinks distance = 4 * 36000).
>
> So I thought about improvements. If you change the std behaviour
> (tp->snd_cwnd++;) with multiply by 3(tp->snd_cwnd+=2) you get this output:
> =============================================================
> $slowStartSimulator 102400 1.5 500 2 1
> bandWith = 102400
> time snd_cwnd used_bandWith alreadySended
> 0 1 3.0 0.0
> 500 3 9.0 1.5
> 1000 9 27.0 6.0
> 1500 27 81.0 19.5
> 2000 81 243.0 60.0
> 2500 243 729.0 181.5
> 3000 729 2187.0 546.0
> 3500 2187 6561.0 1639.5
> 4000 6561 19683.0 4920.0
> 4500 19683 59049.0 14761.5
> 5000 59049 177147.0 44286.0
> USAGE: ./slowStartSimulator bandwith packetSize pingTime [adder multiplier]
> everything in KB and ms
> =============================================================
> Now it takes only 5 seconds till the 100 MB/s is reached.
>
>
> If you use (tp->snd_cwnd+=3); you get this output:
> =============================================================
> slowStartSimulator 102400 1.5 500 3 1
> bandWith = 102400
> time snd_cwnd used_bandWith alreadySended
> 0 1 3.0 0.0
> 500 4 12.0 1.5
> 1000 16 48.0 7.5
> 1500 64 192.0 31.5
> 2000 256 768.0 127.5
> 2500 1024 3072.0 511.5
> 3000 4096 12288.0 2047.5
> 3500 16384 49152.0 8191.5
> 4000 65536 196608.0 32767.5
> USAGE: ./slowStartSimulator bandwith packetSize pingTime [adder multiplier]
> everything in KB and ms
> =============================================================
> Now it takes only 4 seconds, till the 100MB/s is reached.
>
> I also tried to replace (tp->snd_cwnd++;) with something like
> (tp->snd_cwnd *= 2) but I think this is to aggressive and should not be
> used:
> =============================================================
> $slowStartSimulator 1024 1.5 500 0 2
> bandWith = 1024
> time snd_cwnd used_bandWith alreadySended
> 0 1 3.0 0.0
> 500 2 6.0 1.5
> 1000 8 24.0 4.5
> 1500 2048 6144.0 16.5
> =============================================================
>
> Summary:
> The slowstart algorithm is from a time, where 56k modems where state of
> the art, but it is too less aggressive for todays networks. So I suggest
> to replace it with +=2 or +=3.
>
> What do you think about this? I made the programm with much care, but
> maybe I overlooked a bug, so if you want, check it too.
>
>
> Stefan
>
>
> _______________________________________________
> Iccrg mailing list
> Iccrg at cs.ucl.ac.uk
> http://oakham.cs.ucl.ac.uk/mailman/listinfo/iccrg
>
--
Lachlan Andrew Dept of Computer Science, Caltech
1200 E California Blvd, Mail Code 256-80, Pasadena CA 91125, USA
Phone: +1 (626) 395-8820 Fax: +1 (626) 568-3603
More information about the Iccrg
mailing list