Porting PicoTCP WIP
This commit is contained in:
395
kernel/picotcp/RFC/rfc3742.txt
Normal file
395
kernel/picotcp/RFC/rfc3742.txt
Normal file
@ -0,0 +1,395 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Network Working Group S. Floyd
|
||||
Request for Comments: 3742 ICSI
|
||||
Category: Experimental March 2004
|
||||
|
||||
|
||||
Limited Slow-Start for TCP with Large Congestion Windows
|
||||
|
||||
Status of this Memo
|
||||
|
||||
This memo defines an Experimental Protocol for the Internet
|
||||
community. It does not specify an Internet standard of any kind.
|
||||
Discussion and suggestions for improvement are requested.
|
||||
Distribution of this memo is unlimited.
|
||||
|
||||
Copyright Notice
|
||||
|
||||
Copyright (C) The Internet Society (2004). All Rights Reserved.
|
||||
|
||||
Abstract
|
||||
|
||||
This document describes an optional modification for TCP's slow-start
|
||||
for use with TCP connections with large congestion windows. For TCP
|
||||
connections that are able to use congestion windows of thousands (or
|
||||
tens of thousands) of MSS-sized segments (for MSS the sender's
|
||||
MAXIMUM SEGMENT SIZE), the current slow-start procedure can result in
|
||||
increasing the congestion window by thousands of segments in a single
|
||||
round-trip time. Such an increase can easily result in thousands of
|
||||
packets being dropped in one round-trip time. This is often
|
||||
counter-productive for the TCP flow itself, and is also hard on the
|
||||
rest of the traffic sharing the congested link. This note describes
|
||||
Limited Slow-Start as an optional mechanism for limiting the number
|
||||
of segments by which the congestion window is increased for one
|
||||
window of data during slow-start, in order to improve performance for
|
||||
TCP connections with large congestion windows.
|
||||
|
||||
1. Introduction
|
||||
|
||||
This note describes an optional modification for TCP's slow-start for
|
||||
use with TCP connections with large congestion windows. For TCP
|
||||
connections that are able to use congestion windows of thousands (or
|
||||
tens of thousands) of MSS-sized segments (for MSS the sender's
|
||||
MAXIMUM SEGMENT SIZE), the current slow-start procedure can result in
|
||||
increasing the congestion window by thousands of segments in a single
|
||||
round-trip time. Such an increase can easily result in thousands of
|
||||
packets being dropped in one round-trip time. This is often
|
||||
counter-productive for the TCP flow itself, and is also hard on the
|
||||
rest of the traffic sharing the congested link. This note describes
|
||||
Limited Slow-Start, limiting the number of segments by which the
|
||||
|
||||
|
||||
|
||||
Floyd Experimental [Page 1]
|
||||
|
||||
RFC 3742 TCP's Slow-Start with Large Congestion Windows March 2004
|
||||
|
||||
|
||||
congestion window is increased for one window of data during slow-
|
||||
start, in order to improve performance for TCP connections with large
|
||||
congestion windows.
|
||||
|
||||
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
|
||||
the network (even with carefully-tuned active queue management
|
||||
mechanisms in the routers). This drop of a large number of packets
|
||||
in the network can result in unnecessary retransmit timeouts for the
|
||||
TCP connection. The TCP connection could end up in the congestion
|
||||
avoidance phase with a very small congestion window, and could take a
|
||||
large number of round-trip times to recover its old congestion
|
||||
window. This poor performance is illustrated in [F02].
|
||||
|
||||
2. The Proposal for Limited Slow-Start
|
||||
|
||||
Limited Slow-Start introduces a parameter, "max_ssthresh", and
|
||||
modifies the slow-start mechanism for values of the congestion window
|
||||
where "cwnd" is greater than "max_ssthresh". That is, during Slow-
|
||||
Start, when
|
||||
|
||||
cwnd <= max_ssthresh,
|
||||
|
||||
cwnd is increased by one MSS (MAXIMUM SEGMENT SIZE) for every
|
||||
arriving ACK (acknowledgement) during slow-start, as is always the
|
||||
case. During Limited Slow-Start, when
|
||||
|
||||
max_ssthresh < cwnd <= ssthresh,
|
||||
|
||||
the invariant is maintained so that the congestion window is
|
||||
increased during slow-start by at most max_ssthresh/2 MSS per round-
|
||||
trip time. This is done as follows:
|
||||
|
||||
For each arriving ACK in slow-start:
|
||||
If (cwnd <= max_ssthresh)
|
||||
cwnd += MSS;
|
||||
else
|
||||
K = int(cwnd/(0.5 max_ssthresh));
|
||||
cwnd += int(MSS/K);
|
||||
|
||||
Thus, during Limited Slow-Start the window is increased by 1/K MSS
|
||||
for each arriving ACK, for K = int(cwnd/(0.5 max_ssthresh)), instead
|
||||
of by 1 MSS as in standard slow-start [RFC2581].
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Floyd Experimental [Page 2]
|
||||
|
||||
RFC 3742 TCP's Slow-Start with Large Congestion Windows March 2004
|
||||
|
||||
|
||||
When
|
||||
|
||||
ssthresh < cwnd,
|
||||
|
||||
slow-start is exited, and the sender is in the Congestion Avoidance
|
||||
phase.
|
||||
|
||||
Our recommendation would be for max_ssthresh to be set to 100 MSS.
|
||||
(This is illustrated in the NS [NS] simulator, for snapshots after
|
||||
May 1, 2002, in the tests "./test-all-tcpHighspeed tcp1A" and
|
||||
"./test-all-tcpHighspeed tcpHighspeed1" in the subdirectory
|
||||
"tcl/lib". Setting max_ssthresh to Infinity causes the TCP
|
||||
connection in NS not to use Limited Slow-Start.)
|
||||
|
||||
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
|
||||
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
|
||||
arriving ACK, and so on.
|
||||
|
||||
With Limited Slow-Start it takes:
|
||||
|
||||
log(max_ssthresh)
|
||||
|
||||
round-trip times to reach a congestion window of max_ssthresh, and it
|
||||
takes:
|
||||
|
||||
log(max_ssthresh) + (cwnd - max_ssthresh)/(max_ssthresh/2)
|
||||
|
||||
round-trip times to reach a congestion window of cwnd, for a
|
||||
congestion window greater than max_ssthresh.
|
||||
|
||||
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
|
||||
83,000 packets, compared to 16 round-trip times without Limited
|
||||
Slow-Start (assuming no packet drops). With Limited Slow-Start, the
|
||||
largest transient queue during slow-start would be 100 packets;
|
||||
without Limited Slow-Start, the transient queue during Slow-Start
|
||||
would reach more than 32,000 packets.
|
||||
|
||||
By limiting the maximum increase in the congestion window in a
|
||||
round-trip time, Limited Slow-Start can reduce the number of drops
|
||||
during slow-start, and improve the performance of TCP connections
|
||||
with large congestion windows.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Floyd Experimental [Page 3]
|
||||
|
||||
RFC 3742 TCP's Slow-Start with Large Congestion Windows March 2004
|
||||
|
||||
|
||||
3. Experimental Results
|
||||
|
||||
Tom Dunigan has added Limited Slow-Start to the Linux 2.4.16 Web100
|
||||
kernel, and performed experiments comparing TCP with and without
|
||||
Limited Slow-Start [D02]. Results so far show improved performance
|
||||
for TCPs using Limited Slow-Start. There are also several
|
||||
experiments comparing different values for max_ssthresh.
|
||||
|
||||
4. Related Proposals
|
||||
|
||||
There has been considerable research on mechanisms for the TCP sender
|
||||
to learn about the limitations of the available bandwidth, and to
|
||||
exit slow-start before receiving a congestion indication from the
|
||||
network [VEGAS,H96]. Other proposals set TCP's slow-start parameter
|
||||
ssthresh based on information from previous TCP connections to the
|
||||
same destination [WS95,G00]. This document proposes a simple
|
||||
limitation on slow-start that can be effective in some cases even in
|
||||
the absence of such mechanisms. The max_ssthresh parameter does not
|
||||
replace ssthresh, but is an additional parameter. Thus, Limited
|
||||
Slow-Start could be used in addition to mechanisms for setting
|
||||
ssthresh.
|
||||
|
||||
Rate-based pacing has also been proposed to improve the performance
|
||||
of TCP during slow-start [VH97,AD98,KCRP99,ASA00]. We believe that
|
||||
rate-based pacing could be of significant benefit, and could be used
|
||||
in addition to the Limited Slow-Start in this proposal.
|
||||
|
||||
Appropriate Byte Counting [RFC3465] proposes that TCP increase its
|
||||
congestion window as a function of the number of bytes acknowledged,
|
||||
rather than as a function of the number of ACKs received.
|
||||
Appropriate Byte Counting is largely orthogonal to this proposal for
|
||||
Limited Slow-Start.
|
||||
|
||||
Limited Slow-Start is also orthogonal to other proposals to change
|
||||
mechanisms for exiting slow-start. For example, FACK TCP includes an
|
||||
overdamping mechanism to decrease the congestion window somewhat more
|
||||
aggressively when a loss occurs during slow-start [MM96]. It is also
|
||||
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
|
||||
therefore would reduce the size of the transient queue in units of
|
||||
MSS.
|
||||
|
||||
5. Acknowledgements
|
||||
|
||||
This proposal is part of a larger proposal for HighSpeed TCP for TCP
|
||||
connections with large congestion windows, and resulted from
|
||||
simulations done by Evandro de Souza, in joint work with Deb Agarwal.
|
||||
This proposal for Limited Slow-Start draws in part from discussions
|
||||
|
||||
|
||||
|
||||
Floyd Experimental [Page 4]
|
||||
|
||||
RFC 3742 TCP's Slow-Start with Large Congestion Windows March 2004
|
||||
|
||||
|
||||
with Tom Kelly, who has used a similar modified slow-start in his own
|
||||
research with congestion control for high-bandwidth connections. We
|
||||
also thank Tom Dunigan for his experiments with Limited Slow-Start.
|
||||
|
||||
We thank Andrei Gurtov, Reiner Ludwig, members of the End-to-End
|
||||
Research Group, and members of the Transport Area Working Group, for
|
||||
feedback on this document.
|
||||
|
||||
6. Security Considerations
|
||||
|
||||
This proposal makes no changes to the underlying security of TCP.
|
||||
|
||||
7. 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
|
||||
Dynamics by Adaptive Timers and Congestion Control"",
|
||||
TR98-318, Rice University, 1998. URL "http://cs-
|
||||
tr.cs.rice.edu/Dienst/UI/2.0/Describe/ncstrl.rice_cs/TR98-
|
||||
318/".
|
||||
|
||||
[ASA00] A. Aggarwal, S. Savage, and T. Anderson, "Understanding the
|
||||
Performance of TCP Pacing", Proceedings of the 2000 IEEE
|
||||
Infocom Conference, Tel-Aviv, Israel, March, 2000. URL
|
||||
"http://www.cs.ucsd.edu/~savage/".
|
||||
|
||||
[D02] T. Dunigan, "Floyd's TCP slow-start and AIMD mods", 2002.
|
||||
URL "http://www.csm.ornl.gov/~dunigan/net100/floyd.html".
|
||||
|
||||
[F02] S. Floyd, "Performance Problems with TCP's Slow-Start",
|
||||
2002. URL "http://www.icir.org/floyd/hstcp/slowstart/".
|
||||
|
||||
[G00] A. Gurtov, "TCP Performance in the Presence of Congestion
|
||||
and Corruption Losses", Master's Thesis, University of
|
||||
Helsinki, Department of Computer Science, Helsinki,
|
||||
December 2000. URL
|
||||
"http://www.cs.helsinki.fi/u/gurtov/papers/ms_thesis.html".
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Floyd Experimental [Page 5]
|
||||
|
||||
RFC 3742 TCP's Slow-Start with Large Congestion Windows March 2004
|
||||
|
||||
|
||||
[H96] J. C. Hoe, "Improving the Start-up Behavior of a Congestion
|
||||
Control Scheme for TCP", SIGCOMM 96, 1996. URL
|
||||
"http://www.acm.org/sigcomm/sigcomm96/program.html".
|
||||
|
||||
[KCRP99] J. Kulik, R. Coulter, D. Rockwell, and C. Partridge, "A
|
||||
Simulation Study of Paced TCP", BBN Technical Memorandum
|
||||
No. 1218, 1999. URL
|
||||
"http://www.ir.bbn.com/documents/techmemos/index.html".
|
||||
|
||||
[MM96] M. Mathis and J. Mahdavi, "Forward Acknowledgment: Refining
|
||||
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
|
||||
"http://www.cs.arizona.edu/protocols/".
|
||||
|
||||
[VH97] Vikram Visweswaraiah and John Heidemann, "Rate Based Pacing
|
||||
for TCP", 1997. URL
|
||||
"http://www.isi.edu/lsam/publications/rate_based_pacing/".
|
||||
|
||||
[WS95] G. Wright and W. Stevens, "TCP/IP Illustrated", Volume 2,
|
||||
Addison-Wesley Publishing Company, 1995.
|
||||
|
||||
Authors' Address
|
||||
|
||||
Sally Floyd
|
||||
ICIR (ICSI Center for Internet Research)
|
||||
|
||||
Phone: +1 (510) 666-2989
|
||||
EMail: floyd@icir.org
|
||||
URL: http://www.icir.org/floyd/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Floyd Experimental [Page 6]
|
||||
|
||||
RFC 3742 TCP's Slow-Start with Large Congestion Windows March 2004
|
||||
|
||||
|
||||
Full Copyright Statement
|
||||
|
||||
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.
|
||||
|
||||
This document and the information contained herein are provided on an
|
||||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE
|
||||
REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE
|
||||
INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
|
||||
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.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Floyd Experimental [Page 7]
|
||||
|
||||
Reference in New Issue
Block a user