default EWMA RTT and variance to first value

This commit is contained in:
Stephen Birarda 2016-09-26 15:40:11 -07:00
parent f0dcc54a18
commit 995f383edb
2 changed files with 14 additions and 7 deletions

View file

@ -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);

View file

@ -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