20190725追記
draft-01 で計算式に変更が入っています
TCP Slow Startを改善する 「HyStart++: Modified Slow Start for TCP」というdraftがMicrosoftの方より提出されている。
HyStart++はすでにWindowsで実装されている他、HyStartもLinuxのCubicに実装されている。
Slow StartとHyStart++
TCPはコネクション開始直後は送信するデータ量は少なく、徐々に2倍にしていく。パケットロスが発生したタイミングでこのスロースタートは終わることになる。
2倍, 2倍で送信するデータ量を増やしていくと適切な送信量を大幅に超えてしまいうる。大きく超えると多くのパケットロスが発生してしまい、デメリットが大きいため適切なタイミングで線型的にデータ量を増やしていきたい。特定の閾値ではなく、RTTの悪化をトリガーとして線型増加するLimited Slow-Start(RFC3742)に移行するのがHyStart++です。
各ラウンド毎に、前回のRTTよりもEta(今回のRTT/8 を 4~16msec 以内に収めた値) msec RTTが悪化していた場合はLimited Slow-Startに移行する。
MIN_SSTHRESH = 16 MIN_ETA = 4 msec MAX_ETA = 16 msec
if (cwnd is >= MIN_SSTHRESH) Eta = clamp(MIN_ETA, currentRoundMinRTT / 8, MAX_ETA) if (currentRoundMinRTT >= (lastRoundMinRTT + Eta)) exit slow start and enter LSS
HyStart++?
参照されているHyStartのドキュメントが有料で読めず、Kernelに貼られているURLもリンク切れになっていた
- Taming the elephants: New TCP slow start - ScienceDirect
- linux/tcp_cubic.c at master · torvalds/linux · GitHub
HyStartで定義されているアルゴリズムが2つあるが、有効だったそのうち一つがHyStart++として改良されている?わからなかった。