< draft-balasubramanian-tcpm-hystartplusplus-01.txt   draft-balasubramanian-tcpm-hystartplusplus-02.txt >
Network Working Group P. Balasubramanian Network Working Group P. Balasubramanian
Internet-Draft Y. Huang Internet-Draft Y. Huang
Intended status: Informational M. Olson Intended status: Informational M. Olson
Expires: January 23, 2020 Microsoft Expires: July 25, 2020 Microsoft
July 22, 2019 January 22, 2020
HyStart++: Modified Slow Start for TCP HyStart++: Modified Slow Start for TCP
draft-balasubramanian-tcpm-hystartplusplus-01 draft-balasubramanian-tcpm-hystartplusplus-02
Abstract Abstract
This informational memo describes HyStart++, a simple modification to This informational memo describes HyStart++, a simple modification to
the slow start phase of TCP congestion control algorithms. HyStart++ the slow start phase of TCP congestion control algorithms. HyStart++
combines the use of one variant of HyStart and Limited Slow Start combines the use of one variant of HyStart and Limited Slow Start
(LSS) to prevent overshooting of the ideal sending rate value, while (LSS) to prevent overshooting of the ideal sending rate value, while
also mitigating poor performance which can result from false also mitigating poor performance which can result from false
positives when HyStart is used alone. This memo also describes the positives when HyStart is used alone. This memo also describes the
details of the current implementation in the Windows operating details of the current implementation in the Windows operating
skipping to change at page 1, line 38 skipping to change at page 1, line 38
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on January 23, 2020. This Internet-Draft will expire on July 25, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2020 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. HyStart++ Algorithm . . . . . . . . . . . . . . . . . . . . . 3 3. Definitions . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.1. Use of HyStart Delay Increase and Limited Slow Start . . 3 4. HyStart++ Algorithm . . . . . . . . . . . . . . . . . . . . . 3
3.2. Algorithm Details . . . . . . . . . . . . . . . . . . . . 3 4.1. Use of HyStart Delay Increase and Limited Slow Start . . 3
3.3. Constant used and tuning . . . . . . . . . . . . . . . . 5 4.2. Algorithm Details . . . . . . . . . . . . . . . . . . . . 4
4. Security Considerations . . . . . . . . . . . . . . . . . . . 5 4.3. Constants used and tuning . . . . . . . . . . . . . . . . 5
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5 5. Security Considerations . . . . . . . . . . . . . . . . . . . 6
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 5 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 5 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 6
7.1. Normative References . . . . . . . . . . . . . . . . . . 5 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 6
7.2. Informative References . . . . . . . . . . . . . . . . . 6 8.1. Normative References . . . . . . . . . . . . . . . . . . 6
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 6 8.2. Informative References . . . . . . . . . . . . . . . . . 6
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 7
1. Introduction 1. Introduction
[RFC0793] and [RFC5681] describe the slow start mechanism for TCP. [RFC0793] and [RFC5681] describe the slow start mechanism for TCP.
The slow start algorithm is used when congestion window (cwnd) is The slow start algorithm is used when congestion window (cwnd) is
less than the slow start threshold (ssthresh). During slow start, a less than the slow start threshold (ssthresh). During slow start, a
TCP increments cwnd by at most SMSS bytes per ACK. In absence of TCP increments cwnd by at most SMSS bytes per ACK. In absence of
packet loss signals, slow start effectively doubles the congestion packet loss signals, slow start effectively doubles the congestion
window each round trip time. window each round trip time.
skipping to change at page 3, line 14 skipping to change at page 3, line 17
Internet. A precise documentation of running code enables follow-up Internet. A precise documentation of running code enables follow-up
IETF Experimental or Standards Track RFCs. It also enables other IETF Experimental or Standards Track RFCs. It also enables other
implementations and sharing of results for various workloads. implementations and sharing of results for various workloads.
2. Terminology 2. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119]. document are to be interpreted as described in [RFC2119].
3. HyStart++ Algorithm 3. Definitions
3.1. Use of HyStart Delay Increase and Limited Slow Start SENDER MAXIMUM SEGMENT SIZE (SMSS): The SMSS is the size of the
largest segment that the sender can transmit. This value can be
based on the maximum transmission unit of the network, the path MTU
discovery [RFC1191, RFC4821] algorithm, RMSS (see next item), or
other factors. The size does not include the TCP/IP headers and
options.
RECEIVER MAXIMUM SEGMENT SIZE (RMSS): The RMSS is the size of the
largest segment the receiver is willing to accept. This is the value
specified in the MSS option sent by the receiver during connection
startup. Or, if the MSS option is not used, it is 536 bytes
[RFC1122]. The size does not include the TCP/IP headers and options.
CONGESTION WINDOW (cwnd): A TCP state variable that limits the amount
of data a TCP can send. At any given time, a TCP MUST NOT send data
with a sequence number higher than the sum of the highest
acknowledged sequence number and the minimum of cwnd and rwnd.
4. HyStart++ Algorithm
4.1. Use of HyStart Delay Increase and Limited Slow Start
[HyStart] specifies two algorithms (a "Delay Increase" algorithm and [HyStart] specifies two algorithms (a "Delay Increase" algorithm and
an "Inter-Packet Arrival" algorithm) to be run in parallel to detect an "Inter-Packet Arrival" algorithm) to be run in parallel to detect
that the sending rate has reached capacity. In practice, the Inter- that the sending rate has reached capacity. In practice, the Inter-
Packet Arrival algorithm does not perform well and is not able to Packet Arrival algorithm does not perform well and is not able to
detect congestion early, primarily due to ACK compression. The idea detect congestion early, primarily due to ACK compression. The idea
of the Delay Increase algorithm is to look for RTT spikes, which of the Delay Increase algorithm is to look for RTT spikes, which
suggest that the bottleneck buffer is filling up. suggest that the bottleneck buffer is filling up.
After the HyStart "Delay Increase" algorithm triggers an exit from After the HyStart "Delay Increase" algorithm triggers an exit from
slow start, LSS (described in [RFC3742]) is used to increase Cwnd slow start, LSS (described in [RFC3742]) is used to increase Cwnd
until the first packet loss occurs. LSS is used because the HyStart until the first packet loss occurs. LSS is used because the HyStart
exit is often premature as a result of RTT fluctuations or transient exit is often premature as a result of RTT fluctuations or transient
queue buildup. LSS grows the cwnd fast but much slower than queue buildup. LSS grows the cwnd fast but much slower than
traditional slow start. LSS helps avoid massive packet losses and traditional slow start. LSS helps avoid massive packet losses and
subsequent time spent in loss recovery or retransmission timeout. subsequent time spent in loss recovery or retransmission timeout.
3.2. Algorithm Details 4.2. Algorithm Details
A round is chosen to be approximately the Round-Trip Time (RTT). A round is chosen to be approximately the Round-Trip Time (RTT).
Round can be approximated using sequence numbers as follows: Round can be approximated using sequence numbers as follows:
Define windowEnd as a sequence number initialize to SND.UNA Define windowEnd as a sequence number initialize to SND.UNA
When windowEnd is ACKed, the current round ends and windowEnd is When windowEnd is ACKed, the current round ends and windowEnd is
set to SND.NXT set to SND.NXT
At the start of each round during slow start: At the start of each round during slow start:
skipping to change at page 4, line 20 skipping to change at page 4, line 41
cwnd = cwnd + min (N, SMSS) cwnd = cwnd + min (N, SMSS)
Keep track of minimum observed RTT Keep track of minimum observed RTT
currentRoundMinRTT = min(currentRoundMinRTT, currRTT) currentRoundMinRTT = min(currentRoundMinRTT, currRTT)
where currRTT is the measured RTT based on the incoming ACK where currRTT is the measured RTT based on the incoming ACK
rttSampleCount += 1 rttSampleCount += 1
For rounds where cwnd is at or higher than MIN_SSTHRESH and For rounds where cwnd is at or higher than LOW_CWND and
N_RTT_SAMPLE RTT samples have been obtained, check if delay N_RTT_SAMPLE RTT samples have been obtained, check if delay
increase triggers slow start exit increase triggers slow start exit
if (cwnd >= MIN_SSTHRESH AND rttSampleCount >= N_RTT_SAMPLE) if (cwnd >= (LOW_CWND * SMSS) AND rttSampleCount >=
N_RTT_SAMPLE)
Eta = clamp(MIN_ETA, lastRoundMinRTT / 8, MAX_ETA)
if (currentRoundMinRTT >= (lastRoundMinRTT + Eta)) RttThresh = clamp(MIN_RTT_THRESH, lastRoundMinRTT / 8,
MAX_RTT_THRESH)
if (currentRoundMinRTT >= (lastRoundMinRTT + RttThresh))
ssthresh = cwnd ssthresh = cwnd
exit slow start and enter LSS exit slow start and enter LSS
For each arriving ACK in LSS, where N is the number of previously For each arriving ACK in LSS, where N is the number of previously
unacknowledged bytes acknowledged in the arriving ACK: unacknowledged bytes acknowledged in the arriving ACK:
K = cwnd / (LSS_DIVISOR * ssthresh) K = cwnd / (LSS_DIVISOR * ssthresh)
cwnd = max(cwnd + N / K, CA_cwnd()) cwnd = max(cwnd + (N / K), CA_cwnd())
CA_cwnd() denotes the cwnd that a congestion control algorithm would CA_cwnd() denotes the cwnd that a congestion control algorithm would
have increased to if congestion avoidance started instead of LSS. have increased to if congestion avoidance started instead of LSS.
LSS grows cwnd very fast but for long-lived flows in high BDP LSS grows cwnd very fast but for long-lived flows in high BDP
networks, the congestion avoidance algorithm could increase cwnd much networks, the congestion avoidance algorithm could increase cwnd much
faster. For example, CUBIC congestion avoidance [RFC8312] in convex faster. For example, CUBIC congestion avoidance [RFC8312] in convex
region can ramp up cwnd rapidly. Taking the max can help improve region can ramp up cwnd rapidly. Taking the max can help improve
performance when exiting slow start prematurely. performance when exiting slow start prematurely.
HyStart++ ends when cwnd exceeds ssthresh or when congestion is HyStart++ ends when congestion is observed.
observed.
3.3. Constant used and tuning 4.3. Constants used and tuning
The Windows operating system implementation of HyStart++ uses the The Windows operating system implementation of HyStart++ uses the
following constants: following constants:
MIN_SSTHRESH = 16 LOW_CWND = 16
MIN_ETA = 4 msec MIN_RTT_THRESH = 4 msec
MAX_ETA = 16 msec MAX_RTT_THRESH = 16 msec
LSS_DIVISOR = 0.25 LSS_DIVISOR = 0.25
N_RTT_SAMPLE = 8 N_RTT_SAMPLE = 8
An implementation MAY experiment with these constants and tune them An implementation MAY experiment with these constants and tune them
for different network characteristics. Windows operating system for different network characteristics. Windows operating system
implementation uses the same values for all connections. implementation uses the same values for all connections. The maximum
value of LSS_DIVISOR SHOULD NOT exceed 0.5 which is the value
recommended in [RFC3742].
An implementation MAY choose to use HyStart++ for all slow starts An implementation MAY choose to use HyStart++ for all slow starts
including the ones post a retransmission timeout, or a long idle including the ones post a retransmission timeout, or a long idle
period. The Windows operating system implementation uses HyStart++ period. The Windows operating system implementation uses HyStart++
only for the initial slow start and uses traditional slow start for only for the initial slow start and uses traditional slow start for
subsequent ones. This is acceptable because subsequent slow starts subsequent ones. This is acceptable because subsequent slow starts
will use the discovered ssthresh value to exit slow start. will use the discovered ssthresh value to exit slow start.
4. Security Considerations 5. Security Considerations
HyStart++ enhances slow start and inherits the general security HyStart++ enhances slow start and inherits the general security
considerations discussed in [RFC5681]. considerations discussed in [RFC5681].
5. IANA Considerations 6. IANA Considerations
This document has no actions for IANA. This document has no actions for IANA.
6. Acknowledgements 7. Acknowledgements
Neal Cardwell suggested the idea for using the maximum of cwnd value Neal Cardwell suggested the idea for using the maximum of cwnd value
computed by LSS and congestion avoidance after exiting slow start. computed by LSS and congestion avoidance after exiting slow start.
7. References 8. References
7.1. Normative References 8.1. Normative References
[RFC0793] Postel, J., "Transmission Control Protocol", STD 7, [RFC0793] Postel, J., "Transmission Control Protocol", STD 7,
RFC 793, DOI 10.17487/RFC0793, September 1981, RFC 793, DOI 10.17487/RFC0793, September 1981,
<https://www.rfc-editor.org/info/rfc793>. <https://www.rfc-editor.org/info/rfc793>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
[RFC3742] Floyd, S., "Limited Slow-Start for TCP with Large [RFC3742] Floyd, S., "Limited Slow-Start for TCP with Large
Congestion Windows", RFC 3742, DOI 10.17487/RFC3742, March Congestion Windows", RFC 3742, DOI 10.17487/RFC3742, March
2004, <https://www.rfc-editor.org/info/rfc3742>. 2004, <https://www.rfc-editor.org/info/rfc3742>.
[RFC5681] Allman, M., Paxson, V., and E. Blanton, "TCP Congestion [RFC5681] Allman, M., Paxson, V., and E. Blanton, "TCP Congestion
Control", RFC 5681, DOI 10.17487/RFC5681, September 2009, Control", RFC 5681, DOI 10.17487/RFC5681, September 2009,
<https://www.rfc-editor.org/info/rfc5681>. <https://www.rfc-editor.org/info/rfc5681>.
7.2. Informative References 8.2. Informative References
[HyStart] Ha, S. and I. Ree, "Hybrid Slow Start for High-Bandwidth [HyStart] Ha, S. and I. Ree, "Hybrid Slow Start for High-Bandwidth
and Long-Distance Networks", DOI 10.1145/1851182.1851192, and Long-Distance Networks",
International Workshop on Protocols for Fast Long- DOI 10.1145/1851182.1851192, International Workshop on
Distance Networks, March 2010, Protocols for Fast Long-Distance Networks, 2008,
<https://doi.org/10.1016/j.comnet.2011.01.014>. <https://pdfs.semanticscholar.org/25e9/
ef3f03315782c7f1cbcd31b587857adae7d1.pdf>.
[RFC8312] Rhee, I., Xu, L., Ha, S., Zimmermann, A., Eggert, L., and [RFC8312] Rhee, I., Xu, L., Ha, S., Zimmermann, A., Eggert, L., and
R. Scheffenegger, "CUBIC for Fast Long-Distance Networks", R. Scheffenegger, "CUBIC for Fast Long-Distance Networks",
RFC 8312, DOI 10.17487/RFC8312, February 2018, RFC 8312, DOI 10.17487/RFC8312, February 2018,
<https://www.rfc-editor.org/info/rfc8312>. <https://www.rfc-editor.org/info/rfc8312>.
Authors' Addresses Authors' Addresses
Praveen Balasubramanian Praveen Balasubramanian
Microsoft Microsoft
 End of changes. 26 change blocks. 
42 lines changed or deleted 66 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/