From 995f383edbac9e5a8aa1cccf6ba99465614ae536 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 26 Sep 2016 15:40:11 -0700 Subject: [PATCH] default EWMA RTT and variance to first value --- libraries/networking/src/udt/TCPVegasCC.cpp | 17 ++++++++++++----- libraries/networking/src/udt/TCPVegasCC.h | 4 ++-- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/libraries/networking/src/udt/TCPVegasCC.cpp b/libraries/networking/src/udt/TCPVegasCC.cpp index 1736c737e1..288fcad430 100644 --- a/libraries/networking/src/udt/TCPVegasCC.cpp +++ b/libraries/networking/src/udt/TCPVegasCC.cpp @@ -41,12 +41,19 @@ bool TCPVegasCC::onACK(SequenceNumber ack) { lastRTT = 1; } - static const int RTT_ESTIMATION_ALPHA_NUMERATOR = 8; - static const int RTT_ESTIMATION_VARIANCE_ALPHA_NUMERATOR = 4; + if (_ewmaRTT == -1) { + _ewmaRTT = lastRTT; + _rttVariance = lastRTT / 2; + } else { + static const int RTT_ESTIMATION_ALPHA_NUMERATOR = 8; + static const int RTT_ESTIMATION_VARIANCE_ALPHA_NUMERATOR = 4; + + _ewmaRTT = (_ewmaRTT * (RTT_ESTIMATION_ALPHA_NUMERATOR - 1) + lastRTT) / RTT_ESTIMATION_ALPHA_NUMERATOR; + _rttVariance = (_rttVariance * (RTT_ESTIMATION_VARIANCE_ALPHA_NUMERATOR - 1) + + abs(lastRTT - _ewmaRTT)) / RTT_ESTIMATION_VARIANCE_ALPHA_NUMERATOR; + } + - _ewmaRTT = (_ewmaRTT * (RTT_ESTIMATION_ALPHA_NUMERATOR - 1) + lastRTT) / RTT_ESTIMATION_ALPHA_NUMERATOR; - _rttVariance = (_rttVariance * (RTT_ESTIMATION_VARIANCE_ALPHA_NUMERATOR - 1) - + abs(lastRTT - _ewmaRTT)) / RTT_ESTIMATION_VARIANCE_ALPHA_NUMERATOR; // keep track of the lowest RTT during connection _baseRTT = std::min(_baseRTT, lastRTT); diff --git a/libraries/networking/src/udt/TCPVegasCC.h b/libraries/networking/src/udt/TCPVegasCC.h index 995e8c56c1..f579654dcf 100644 --- a/libraries/networking/src/udt/TCPVegasCC.h +++ b/libraries/networking/src/udt/TCPVegasCC.h @@ -55,8 +55,8 @@ private: int _currentMinRTT { 0x7FFFFFFF }; // Current RTT, in microseconds int _baseRTT { 0x7FFFFFFF }; // Lowest RTT during connection, in microseconds int _numRTT { 0 }; // Number of RTT collected during last RTT - int _ewmaRTT { 100000 }; // Exponential weighted moving average RTT - int _rttVariance { 50000 }; // Variance in collected RTT values + int _ewmaRTT { -1 }; // Exponential weighted moving average RTT + int _rttVariance { 0 }; // Variance in collected RTT values int _slowStartOddAdjust { 0 }; // Marker for every window adjustment every other RTT in slow-start