draft-ietf-tsvwg-slowstart-00.txt   rfc3742.txt 
Internet Engineering Task Force Sally Floyd Network Working Group S. Floyd
INTERNET DRAFT ICSI Request for Comments: 3742 ICSI
Category: Experimental March 2004
Limited Slow-Start for TCP with Large Congestion Windows Limited Slow-Start for TCP with Large Congestion Windows
Status of this Memo Status of this Memo
This document is an Internet-Draft and is in full conformance with This memo defines an Experimental Protocol for the Internet
all provisions of Section 10 of RFC2026. community. It does not specify an Internet standard of any kind.
Discussion and suggestions for improvement are requested.
Internet-Drafts are working documents of the Internet Engineering Distribution of this memo is unlimited.
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet- Drafts as reference
material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at Copyright Notice
http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at Copyright (C) The Internet Society (2004). All Rights Reserved.
http://www.ietf.org/shadow.html.
Abstract Abstract
This note describes an optional modification for TCP's slow-start for This document describes an optional modification for TCP's slow-start
use with TCP connections with large congestion windows. For TCP for use with TCP connections with large congestion windows. For TCP
connections that are able to use congestion windows of thousands (or connections that are able to use congestion windows of thousands (or
tens of thousands) of MSS-sized segments (for MSS the sender's tens of thousands) of MSS-sized segments (for MSS the sender's
MAXIMUM SEGMENT SIZE), the current slow-start procedure can result in MAXIMUM SEGMENT SIZE), the current slow-start procedure can result in
increasing the congestion window by thousands of segments in a single increasing the congestion window by thousands of segments in a single
round-trip time. Such an increase can easily result in thousands of round-trip time. Such an increase can easily result in thousands of
packets being dropped in one round-trip time. This is often counter- packets being dropped in one round-trip time. This is often
productive for the TCP flow itself, and is also hard on the rest of counter-productive for the TCP flow itself, and is also hard on the
the traffic sharing the congested link. This note describes Limited rest of the traffic sharing the congested link. This note describes
Slow-Start as an optional mechanism for limiting the number of Limited Slow-Start as an optional mechanism for limiting the number
segments by which the congestion window is increased for one window of segments by which the congestion window is increased for one
of data during slow-start, in order to improve performance for TCP window of data during slow-start, in order to improve performance for
connections with large congestion windows. TCP connections with large congestion windows.
Changes from draft-floyd-tcp-slowstart-02.txt:
New name of draft.
Changes from draft-floyd-tcp-slowstart-01.txt:
* Minor changes in language to submit for an Experimental RFC.
Changes from draft-floyd-tcp-slowstart-00.txt:
* Small changes in presentation.
* The addition of a section of Experiments.
* More citations to related work.
1. Introduction 1. Introduction
This note describes an optional modification for TCP's slow-start for This note describes an optional modification for TCP's slow-start for
use with TCP connections with large congestion windows. For TCP use with TCP connections with large congestion windows. For TCP
connections that are able to use congestion windows of thousands (or connections that are able to use congestion windows of thousands (or
tens of thousands) of MSS-sized segments (for MSS the sender's tens of thousands) of MSS-sized segments (for MSS the sender's
MAXIMUM SEGMENT SIZE), the current slow-start procedure can result in MAXIMUM SEGMENT SIZE), the current slow-start procedure can result in
increasing the congestion window by thousands of segments in a single increasing the congestion window by thousands of segments in a single
round-trip time. Such an increase can easily result in thousands of round-trip time. Such an increase can easily result in thousands of
packets being dropped in one round-trip time. This is often counter- packets being dropped in one round-trip time. This is often
productive for the TCP flow itself, and is also hard on the rest of counter-productive for the TCP flow itself, and is also hard on the
the traffic sharing the congested link. This note describes Limited rest of the traffic sharing the congested link. This note describes
Slow-Start, limiting the number of segments by which the congestion Limited Slow-Start, limiting the number of segments by which the
window is increased for one window of data during slow-start, in congestion window is increased for one window of data during slow-
order to improve performance for TCP connections with large start, in order to improve performance for TCP connections with large
congestion windows. congestion windows.
When slow-start results in a large increase in the congestion window When slow-start results in a large increase in the congestion window
in one round-trip time, a large number of packets might be dropped in in one round-trip time, a large number of packets might be dropped in
the network (even with carefully-tuned active queue management the network (even with carefully-tuned active queue management
mechanisms in the routers). This drop of a large number of packets mechanisms in the routers). This drop of a large number of packets
in the network can result in unnecessary retransmit timeouts for the in the network can result in unnecessary retransmit timeouts for the
TCP connection. The TCP connection could end up in congestion TCP connection. The TCP connection could end up in the congestion
avoidance phase with a very small congestion window, and could take a avoidance phase with a very small congestion window, and could take a
large number of round-trip times to recover its old congestion large number of round-trip times to recover its old congestion
window. This poor performance is illustrated in [F02]. window. This poor performance is illustrated in [F02].
2. The Proposal for Limited Slow-Start 2. The Proposal for Limited Slow-Start
Limited Slow-Start introduces a parameter, "max_ssthresh", and the Limited Slow-Start introduces a parameter, "max_ssthresh", and
slow-start is only modified for values of the congestion window modifies the slow-start mechanism for values of the congestion window
"cwnd" greater than "max_ssthresh". That is, during Slow-Start, when where "cwnd" is greater than "max_ssthresh". That is, during Slow-
Start, when
cwnd <= max_ssthresh, cwnd <= max_ssthresh,
cwnd is increased by one MSS (MAXIMUM SEGMENT SIZE) for every cwnd is increased by one MSS (MAXIMUM SEGMENT SIZE) for every
arriving ACK (acknowledgement) during slow-start, as is always the arriving ACK (acknowledgement) during slow-start, as is always the
case. During Limited Slow-Start, when case. During Limited Slow-Start, when
max_ssthresh < cwnd <= ssthresh, max_ssthresh < cwnd <= ssthresh,
the invariant is maintained that the congestion window is increased the invariant is maintained so that the congestion window is
during slow-start by at most max_ssthresh/2 MSS per round-trip time. increased during slow-start by at most max_ssthresh/2 MSS per round-
This is done as follows: trip time. This is done as follows:
For each arriving ACK in slow-start: For each arriving ACK in slow-start:
If (cwnd <= max_ssthresh) If (cwnd <= max_ssthresh)
cwnd += MSS; cwnd += MSS;
else else
K = int(cwnd/(0.5 max_ssthresh)); K = int(cwnd/(0.5 max_ssthresh));
cwnd += int(MSS/K); cwnd += int(MSS/K);
Thus during Limited Slow-Start the window is increased by 1/K MSS for Thus, during Limited Slow-Start the window is increased by 1/K MSS
each arriving ACK, for K = int(cwnd/(0.5 max_ssthresh)), instead of for each arriving ACK, for K = int(cwnd/(0.5 max_ssthresh)), instead
by 1 MSS as in the standard slow-start [RFC2581]. of by 1 MSS as in standard slow-start [RFC2581].
When When
ssthresh < cwnd, ssthresh < cwnd,
slow-start is exited, and the sender is in the Congestion Avoidance slow-start is exited, and the sender is in the Congestion Avoidance
phase. phase.
Our recommendation would be for max_ssthresh to be set to 100 MSS. Our recommendation would be for max_ssthresh to be set to 100 MSS.
(This is illustrated in the NS simulator, for snapshots after May 1, (This is illustrated in the NS [NS] simulator, for snapshots after
2002, in the tests "./test-all-tcpHighspeed tcp1A" and "./test-all- May 1, 2002, in the tests "./test-all-tcpHighspeed tcp1A" and
tcpHighspeed tcpHighspeed1" in the subdirectory "tcl/lib". Setting "./test-all-tcpHighspeed tcpHighspeed1" in the subdirectory
max_ssthresh to Infinity causes the TCP connection in NS not to use "tcl/lib". Setting max_ssthresh to Infinity causes the TCP
Limited Slow-Start.) connection in NS not to use Limited Slow-Start.)
With Limited Slow-Start, when the congestion window is greater than With Limited Slow-Start, when the congestion window is greater than
max_ssthresh the window is increased by at most 1/2 MSS for each max_ssthresh, the window is increased by at most 1/2 MSS for each
arriving ACK, when the congestion window is greater than 1.5 arriving ACK; when the congestion window is greater than 1.5
max_ssthresh the window is increased by at most 1/3 MSS for each max_ssthresh, the window is increased by at most 1/3 MSS for each
arriving ACK, and so on. arriving ACK, and so on.
With Limited Slow-Start it takes: With Limited Slow-Start it takes:
log(max_ssthresh) log(max_ssthresh)
round-trip times to reach a congestion window of max_ssthresh, and it round-trip times to reach a congestion window of max_ssthresh, and it
takes: takes:
log(max_ssthresh) + (cwnd - max_ssthresh)/(max_ssthresh/2) log(max_ssthresh) + (cwnd - max_ssthresh)/(max_ssthresh/2)
round-trip times to reach a congestion window of cwnd, for a round-trip times to reach a congestion window of cwnd, for a
congestion window greater than max_ssthresh. congestion window greater than max_ssthresh.
Thus, with Limited Slow-Start with max_ssthresh set to 100 MSS, it Thus, with Limited Slow-Start with max_ssthresh set to 100 MSS, it
would take 836 round-trip times to reach a congestion window of would take 836 round-trip times to reach a congestion window of
83,000 packets, compared to 16 round-trip times without Limited Slow- 83,000 packets, compared to 16 round-trip times without Limited
Start (assuming no packet drops). With Limited Slow-Start, the Slow-Start (assuming no packet drops). With Limited Slow-Start, the
largest transient queue during slow-start would be 100 packets; largest transient queue during slow-start would be 100 packets;
without Limited Slow-Start, the transient queue during Slow-Start without Limited Slow-Start, the transient queue during Slow-Start
would reach more than 32,000 packets. would reach more than 32,000 packets.
By limiting the maximum increase in the congestion window in a round- By limiting the maximum increase in the congestion window in a
trip time, Limited Slow-Start can reduce the number of drops during round-trip time, Limited Slow-Start can reduce the number of drops
slow-start, and improve the performance of TCP connections with large during slow-start, and improve the performance of TCP connections
congestion windows. with large congestion windows.
3. Experimental Results 3. Experimental Results
Tom Dunigan has added Limited Slow-Start to the Linux 2.4.16 Web100 Tom Dunigan has added Limited Slow-Start to the Linux 2.4.16 Web100
kernel, and performed experiments comparing TCP with and without kernel, and performed experiments comparing TCP with and without
Limited Slow-Start [D02]. Results so far show improved performance Limited Slow-Start [D02]. Results so far show improved performance
for TCPs using Limited Slow-Start. There are also several for TCPs using Limited Slow-Start. There are also several
experiments comparing different values for max_ssthresh. experiments comparing different values for max_ssthresh.
4. Related Proposals 4. Related Proposals
There has been considerable research on mechanisms for the TCP sender There has been considerable research on mechanisms for the TCP sender
to learn about the limitations of the available bandwidth, and to to learn about the limitations of the available bandwidth, and to
exit slow-start before receiving a congestion indication from the exit slow-start before receiving a congestion indication from the
network [VEGAS,H96]. Other proposals set TCP's slow-start parameter network [VEGAS,H96]. Other proposals set TCP's slow-start parameter
ssthresh based on information from previous TCP connections to the ssthresh based on information from previous TCP connections to the
same destination [WS95,G00]. This draft proposes a simple limitation same destination [WS95,G00]. This document proposes a simple
on slow-start that can be effective in some cases even in the absence limitation on slow-start that can be effective in some cases even in
of such mechanisms. The max_ssthresh parameter does not replace the absence of such mechanisms. The max_ssthresh parameter does not
ssthresh, but is an additional parameter. Thus, Limited Slow-Start replace ssthresh, but is an additional parameter. Thus, Limited
could be used in addition to mechanisms for setting ssthresh. Slow-Start could be used in addition to mechanisms for setting
ssthresh.
Rate-based pacing has also been proposed to improve the performance Rate-based pacing has also been proposed to improve the performance
of TCP during slow-start [VH97,AD98,KCRP99,ASA00]. We believe that of TCP during slow-start [VH97,AD98,KCRP99,ASA00]. We believe that
rate-based pacing could be of significant benefit, and could be used rate-based pacing could be of significant benefit, and could be used
in addition to the Limited Slow-Start in this proposal. in addition to the Limited Slow-Start in this proposal.
Appropriate Byte Counting [RFC3465] proposes that TCP increase its Appropriate Byte Counting [RFC3465] proposes that TCP increase its
congestion window as a function of the number of bytes acknowledged, congestion window as a function of the number of bytes acknowledged,
rather than as a function of the number of ACKs received. rather than as a function of the number of ACKs received.
Appropriate Byte Counting is largely orthogonal to this proposal for Appropriate Byte Counting is largely orthogonal to this proposal for
skipping to change at page 5, line 22 skipping to change at page 4, line 52
true that larger values for the MSS would reduce the size of the true that larger values for the MSS would reduce the size of the
congestion window in units of MSS needed to fill a given pipe, and congestion window in units of MSS needed to fill a given pipe, and
therefore would reduce the size of the transient queue in units of therefore would reduce the size of the transient queue in units of
MSS. MSS.
5. Acknowledgements 5. Acknowledgements
This proposal is part of a larger proposal for HighSpeed TCP for TCP This proposal is part of a larger proposal for HighSpeed TCP for TCP
connections with large congestion windows, and resulted from connections with large congestion windows, and resulted from
simulations done by Evandro de Souza, in joint work with Deb Agarwal. simulations done by Evandro de Souza, in joint work with Deb Agarwal.
This proposal for Limited Slow-Start drew in part from discussions This proposal for Limited Slow-Start draws in part from discussions
with Tom Kelly, who has used a similar modified slow-start in his own with Tom Kelly, who has used a similar modified slow-start in his own
research with congestion control for high-bandwidth connections. We research with congestion control for high-bandwidth connections. We
also thank Tom Dunigan for his experiments with Limited Slow-Start. also thank Tom Dunigan for his experiments with Limited Slow-Start.
We thank Andrei Gurtov, Reiner Ludwig, members of the End-to-End We thank Andrei Gurtov, Reiner Ludwig, members of the End-to-End
Research Group, and members of the Transport Area Working Group, for Research Group, and members of the Transport Area Working Group, for
feedback on this document. feedback on this document.
6. Normative References 6. Security Considerations
[RFC2581] M. Allman and V. Paxson, "TCP Congestion Control", RFC This proposal makes no changes to the underlying security of TCP.
2581, April 1999.
[RFC3465] Mark Allman, "TCP Congestion Control with Appropriate Byte 7. References
Counting", RFC 3465, February 2003.
7. Informative References 7.1. Normative References
[RFC2581] Allman, M., Paxson, V. and W. Stevens, "TCP Congestion
Control", RFC 2581, April 1999.
[RFC3465] Allman, M., "TCP Congestion Control with Appropriate Byte
Counting (ABC)", RFC 3465, February 2003.
7.2. Informative References
[AD98] Mohit Aron and Peter Druschel, "TCP: Improving Start-up [AD98] Mohit Aron and Peter Druschel, "TCP: Improving Start-up
Dynamics by Adaptive Timers and Congestion Control"", TR98-318, Rice Dynamics by Adaptive Timers and Congestion Control"",
University, 1998. URL "http://cs- TR98-318, Rice University, 1998. URL "http://cs-
tr.cs.rice.edu/Dienst/UI/2.0/Describe/ncstrl.rice_cs/TR98-318/". tr.cs.rice.edu/Dienst/UI/2.0/Describe/ncstrl.rice_cs/TR98-
318/".
[ASA00] A. Aggarwal, S. Savage, and T. Anderson, "Understanding the [ASA00] A. Aggarwal, S. Savage, and T. Anderson, "Understanding the
Performance of TCP Pacing", Proceedings of the 2000 IEEE Infocom Performance of TCP Pacing", Proceedings of the 2000 IEEE
Conference, Tel-Aviv, Israel, March, 2000. URL Infocom Conference, Tel-Aviv, Israel, March, 2000. URL
"http://www.cs.ucsd.edu/~savage/". "http://www.cs.ucsd.edu/~savage/".
[D02] T. Dunigan, "Floyd's TCP slow-start and AIMD mods", 2002. URL [D02] T. Dunigan, "Floyd's TCP slow-start and AIMD mods", 2002.
"http://www.csm.ornl.gov/~dunigan/net100/floyd.html". URL "http://www.csm.ornl.gov/~dunigan/net100/floyd.html".
[F02] S. Floyd, "Performance Problems with TCP's Slow-Start", 2002. [F02] S. Floyd, "Performance Problems with TCP's Slow-Start",
URL "http://www.icir.org/floyd/hstcp/slowstart/". 2002. URL "http://www.icir.org/floyd/hstcp/slowstart/".
[G00] A. Gurtov, "TCP Performance in the Presence of Congestion and [G00] A. Gurtov, "TCP Performance in the Presence of Congestion
Corruption Losses", Master's Thesis, University of Helsinki, and Corruption Losses", Master's Thesis, University of
Department of Computer Science, Helsinki, December 2000. URL Helsinki, Department of Computer Science, Helsinki,
December 2000. URL
"http://www.cs.helsinki.fi/u/gurtov/papers/ms_thesis.html". "http://www.cs.helsinki.fi/u/gurtov/papers/ms_thesis.html".
[H96] J. C. Hoe, "Improving the Start-up Behavior of a Congestion [H96] J. C. Hoe, "Improving the Start-up Behavior of a Congestion
Control Scheme for TCP", SIGCOMM 96, 1996. URL Control Scheme for TCP", SIGCOMM 96, 1996. URL
"http://www.acm.org/sigcomm/sigcomm96/program.html". "http://www.acm.org/sigcomm/sigcomm96/program.html".
[KCRP99] J. Kulik, R. Coulter, D. Rockwell, and C. Partridge, "A [KCRP99] J. Kulik, R. Coulter, D. Rockwell, and C. Partridge, "A
Simulation Study of Paced TCP", BBN Technical Memorandum No. 1218, Simulation Study of Paced TCP", BBN Technical Memorandum
1999. URL "http://mimas.lcs.mit.edu/~jokulik/tcppacing.html". No. 1218, 1999. URL
"http://www.ir.bbn.com/documents/techmemos/index.html".
[MM96] M. Mathis and J. Mahdavi, "Forward Acknowledgment: Refining [MM96] M. Mathis and J. Mahdavi, "Forward Acknowledgment: Refining
TCP Congestion Control", SIGCOMM, August 1996. TCP Congestion Control", SIGCOMM, August 1996.
[NS] The Network Simulator (NS). URL
"http://www.isi.edu/nsnam/ns/".
[VEGAS] Vegas Web Page, University of Arizona. URL [VEGAS] Vegas Web Page, University of Arizona. URL
"http://www.cs.arizona.edu/protocols/". "http://www.cs.arizona.edu/protocols/".
[VH97] Vikram Visweswaraiah and John Heidemann, "Rate Based Pacing [VH97] Vikram Visweswaraiah and John Heidemann, "Rate Based Pacing
for TCP", 1997. URL for TCP", 1997. URL
"http://www.isi.edu/lsam/publications/rate_based_pacing/". "http://www.isi.edu/lsam/publications/rate_based_pacing/".
[WS95] G. Wright and W. Stevens, "TCP/IP Illustrated", Volume 2, [WS95] G. Wright and W. Stevens, "TCP/IP Illustrated", Volume 2,
Addison-Wesley Publishing Company, 1995. Addison-Wesley Publishing Company, 1995.
8. Security Considerations Authors' Address
This proposal makes no changes to the underlying security of TCP. Sally Floyd
ICIR (ICSI Center for Internet Research)
8. IANA Considerations Phone: +1 (510) 666-2989
EMail: floyd@icir.org
URL: http://www.icir.org/floyd/
There are no IANA considerations regarding this document. Full Copyright Statement
AUTHORS' ADDRESSES Copyright (C) The Internet Society (2004). This document is subject
to the rights, licenses and restrictions contained in BCP 78 and
except as set forth therein, the authors retain all their rights.
Sally Floyd This document and the information contained herein are provided on an
Phone: +1 (510) 666-2989 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE
ICIR (ICSI Center for Internet Research) REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE
Email: floyd@icir.org INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR
URL: http://www.icir.org/floyd/ IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
This draft was first created in June 2002. THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Intellectual Property
The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed
to pertain to the implementation or use of the technology
described in this document or the extent to which any license
under such rights might or might not be available; nor does it
represent that it has made any independent effort to identify any
such rights. Information on the procedures with respect to
rights in RFC documents can be found in BCP 78 and BCP 79.
Copies of IPR disclosures made to the IETF Secretariat and any
assurances of licenses to be made available, or the result of an
attempt made to obtain a general license or permission for the use
of such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository
at http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention
any copyrights, patents or patent applications, or other
proprietary rights that may cover technology that may be required
to implement this standard. Please address the information to the
IETF at ietf-ipr@ietf.org.
Acknowledgement
Funding for the RFC Editor function is currently provided by the
Internet Society.
 End of changes. 

This html diff was produced by rfcdiff 1.25, available from http://www.levkowetz.com/ietf/tools/rfcdiff/