1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389
|
<pre>Network Working Group S. Floyd
Request for Comments: 3742 ICSI
Category: Experimental March 2004
<span class="h1">Limited Slow-Start for TCP with Large Congestion Windows</span>
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.
<span class="h2"><a class="selflink" id="section-1" href="#section-1">1</a>. Introduction</span>
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
<span class="grey">Floyd Experimental [Page 1]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-2" ></span>
<span class="grey"><a href="./rfc3742">RFC 3742</a> TCP's Slow-Start with Large Congestion Windows March 2004</span>
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 [<a href="#ref-F02" title=""Performance Problems with TCP's Slow-Start"">F02</a>].
<span class="h2"><a class="selflink" id="section-2" href="#section-2">2</a>. The Proposal for Limited Slow-Start</span>
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 [<a href="./rfc2581" title=""TCP Congestion Control"">RFC2581</a>].
<span class="grey">Floyd Experimental [Page 2]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-3" ></span>
<span class="grey"><a href="./rfc3742">RFC 3742</a> TCP's Slow-Start with Large Congestion Windows March 2004</span>
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 [<a href="#ref-NS" title=""http://www.isi.edu/nsnam/ns/"">NS</a>] 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.
<span class="grey">Floyd Experimental [Page 3]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-4" ></span>
<span class="grey"><a href="./rfc3742">RFC 3742</a> TCP's Slow-Start with Large Congestion Windows March 2004</span>
<span class="h2"><a class="selflink" id="section-3" href="#section-3">3</a>. Experimental Results</span>
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 [<a href="#ref-D02" title=""Floyd's TCP slow-start and AIMD mods"">D02</a>]. Results so far show improved performance
for TCPs using Limited Slow-Start. There are also several
experiments comparing different values for max_ssthresh.
<span class="h2"><a class="selflink" id="section-4" href="#section-4">4</a>. Related Proposals</span>
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 [<a href="#ref-VEGAS" title=""http://www.cs.arizona.edu/protocols/"">VEGAS</a>,<a href="#ref-H96" title=""Improving the Start-up Behavior of a Congestion Control Scheme for TCP"">H96</a>]. Other proposals set TCP's slow-start parameter
ssthresh based on information from previous TCP connections to the
same destination [<a href="#ref-WS95" title=""TCP/IP Illustrated"">WS95</a>,<a href="#ref-G00" title=""TCP Performance in the Presence of Congestion and Corruption Losses"">G00</a>]. 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 [<a href="#ref-VH97" title=""Rate Based Pacing for TCP"">VH97</a>,<a href="#ref-AD98" title=""TCP: Improving Start-up Dynamics by Adaptive Timers and Congestion Control"">AD98</a>,<a href="#ref-KCRP99" title=""A Simulation Study of Paced TCP"">KCRP99</a>,<a href="#ref-ASA00" title=""Understanding the Performance of TCP Pacing"">ASA00</a>]. 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 [<a href="./rfc3465" title=""TCP Congestion Control with Appropriate Byte Counting (ABC)"">RFC3465</a>] 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 [<a href="#ref-MM96" title=""Forward Acknowledgment: Refining TCP Congestion Control"">MM96</a>]. 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.
<span class="h2"><a class="selflink" id="section-5" href="#section-5">5</a>. Acknowledgements</span>
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
<span class="grey">Floyd Experimental [Page 4]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-5" ></span>
<span class="grey"><a href="./rfc3742">RFC 3742</a> TCP's Slow-Start with Large Congestion Windows March 2004</span>
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.
<span class="h2"><a class="selflink" id="section-6" href="#section-6">6</a>. Security Considerations</span>
This proposal makes no changes to the underlying security of TCP.
<span class="h2"><a class="selflink" id="section-7" href="#section-7">7</a>. References</span>
<span class="h3"><a class="selflink" id="section-7.1" href="#section-7.1">7.1</a>. Normative References</span>
[<a id="ref-RFC2581">RFC2581</a>] Allman, M., Paxson, V. and W. Stevens, "TCP Congestion
Control", <a href="./rfc2581">RFC 2581</a>, April 1999.
[<a id="ref-RFC3465">RFC3465</a>] Allman, M., "TCP Congestion Control with Appropriate Byte
Counting (ABC)", <a href="./rfc3465">RFC 3465</a>, February 2003.
<span class="h3"><a class="selflink" id="section-7.2" href="#section-7.2">7.2</a>. Informative References</span>
[<a id="ref-AD98">AD98</a>] Mohit Aron and Peter Druschel, "TCP: Improving Start-up
Dynamics by Adaptive Timers and Congestion Control"",
TR98-318, Rice University, 1998. URL "<a href="http://cs-tr.cs.rice.edu/Dienst/UI/2.0/Describe/ncstrl.rice_cs/TR98-">http://cs-</a>
<a href="http://cs-tr.cs.rice.edu/Dienst/UI/2.0/Describe/ncstrl.rice_cs/TR98-">tr.cs.rice.edu/Dienst/UI/2.0/Describe/ncstrl.rice_cs/TR98-</a>
318/".
[<a id="ref-ASA00">ASA00</a>] 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
"<a href="http://www.cs.ucsd.edu/~savage/">http://www.cs.ucsd.edu/~savage/</a>".
[<a id="ref-D02">D02</a>] T. Dunigan, "Floyd's TCP slow-start and AIMD mods", 2002.
URL "<a href="http://www.csm.ornl.gov/~dunigan/net100/floyd.html">http://www.csm.ornl.gov/~dunigan/net100/floyd.html</a>".
[<a id="ref-F02">F02</a>] S. Floyd, "Performance Problems with TCP's Slow-Start",
2002. URL "<a href="http://www.icir.org/floyd/hstcp/slowstart/">http://www.icir.org/floyd/hstcp/slowstart/</a>".
[<a id="ref-G00">G00</a>] 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
"<a href="http://www.cs.helsinki.fi/u/gurtov/papers/ms_thesis.html">http://www.cs.helsinki.fi/u/gurtov/papers/ms_thesis.html</a>".
<span class="grey">Floyd Experimental [Page 5]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-6" ></span>
<span class="grey"><a href="./rfc3742">RFC 3742</a> TCP's Slow-Start with Large Congestion Windows March 2004</span>
[<a id="ref-H96">H96</a>] J. C. Hoe, "Improving the Start-up Behavior of a Congestion
Control Scheme for TCP", SIGCOMM 96, 1996. URL
"<a href="http://www.acm.org/sigcomm/sigcomm96/program.html">http://www.acm.org/sigcomm/sigcomm96/program.html</a>".
[<a id="ref-KCRP99">KCRP99</a>] J. Kulik, R. Coulter, D. Rockwell, and C. Partridge, "A
Simulation Study of Paced TCP", BBN Technical Memorandum
No. 1218, 1999. URL
"<a href="http://www.ir.bbn.com/documents/techmemos/index.html">http://www.ir.bbn.com/documents/techmemos/index.html</a>".
[<a id="ref-MM96">MM96</a>] M. Mathis and J. Mahdavi, "Forward Acknowledgment: Refining
TCP Congestion Control", SIGCOMM, August 1996.
[<a id="ref-NS">NS</a>] The Network Simulator (NS). URL
"<a href="http://www.isi.edu/nsnam/ns/">http://www.isi.edu/nsnam/ns/</a>".
[<a id="ref-VEGAS">VEGAS</a>] Vegas Web Page, University of Arizona. URL
"<a href="http://www.cs.arizona.edu/protocols/">http://www.cs.arizona.edu/protocols/</a>".
[<a id="ref-VH97">VH97</a>] Vikram Visweswaraiah and John Heidemann, "Rate Based Pacing
for TCP", 1997. URL
"<a href="http://www.isi.edu/lsam/publications/rate_based_pacing/">http://www.isi.edu/lsam/publications/rate_based_pacing/</a>".
[<a id="ref-WS95">WS95</a>] 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: <a href="http://www.icir.org/floyd/">http://www.icir.org/floyd/</a>
<span class="grey">Floyd Experimental [Page 6]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-7" ></span>
<span class="grey"><a href="./rfc3742">RFC 3742</a> TCP's Slow-Start with Large Congestion Windows March 2004</span>
Full Copyright Statement
Copyright (C) The Internet Society (2004). This document is subject
to the rights, licenses and restrictions contained in <a href="https://www.rfc-editor.org/bcp/bcp78">BCP 78</a> 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 <a href="https://www.rfc-editor.org/bcp/bcp78">BCP 78</a> and <a href="https://www.rfc-editor.org/bcp/bcp79">BCP 79</a>.
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 <a href="http://www.ietf.org/ipr">http://www.ietf.org/ipr</a>.
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]
</pre>
|