mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-19 01:09:58 +00:00
1. Use EWMA for stream RTT estimation;
2. Drop window size by 10% instead of 50% in case of resend. Change is based on code by onon.
This commit is contained in:
parent
bb702700f7
commit
3ceb64db2e
@ -433,7 +433,10 @@ namespace stream
|
|||||||
LogPrint(eLogError, "Streaming: Packet ", seqn, "sent from the future, sendTime=", sentPacket->sendTime);
|
LogPrint(eLogError, "Streaming: Packet ", seqn, "sent from the future, sendTime=", sentPacket->sendTime);
|
||||||
rtt = 1;
|
rtt = 1;
|
||||||
}
|
}
|
||||||
m_RTT = std::round ((m_RTT*seqn + rtt)/(seqn + 1.0));
|
if (seqn)
|
||||||
|
m_RTT = std::round (RTT_EWMA_ALPHA * m_RTT + (1.0 - RTT_EWMA_ALPHA) * rtt);
|
||||||
|
else
|
||||||
|
m_RTT = rtt;
|
||||||
m_RTO = m_RTT*1.5; // TODO: implement it better
|
m_RTO = m_RTT*1.5; // TODO: implement it better
|
||||||
LogPrint (eLogDebug, "Streaming: Packet ", seqn, " acknowledged rtt=", rtt, " sentTime=", sentPacket->sendTime);
|
LogPrint (eLogDebug, "Streaming: Packet ", seqn, " acknowledged rtt=", rtt, " sentTime=", sentPacket->sendTime);
|
||||||
m_SentPackets.erase (it++);
|
m_SentPackets.erase (it++);
|
||||||
@ -998,8 +1001,8 @@ namespace stream
|
|||||||
m_RTO *= 2;
|
m_RTO *= 2;
|
||||||
switch (m_NumResendAttempts)
|
switch (m_NumResendAttempts)
|
||||||
{
|
{
|
||||||
case 1: // congesion avoidance
|
case 1: // congestion avoidance
|
||||||
m_WindowSize >>= 1; // /2
|
m_WindowSize -= (m_WindowSize + WINDOW_SIZE_DROP_FRACTION) / WINDOW_SIZE_DROP_FRACTION; // adjustment >= 1
|
||||||
if (m_WindowSize < MIN_WINDOW_SIZE) m_WindowSize = MIN_WINDOW_SIZE;
|
if (m_WindowSize < MIN_WINDOW_SIZE) m_WindowSize = MIN_WINDOW_SIZE;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -56,6 +56,8 @@ namespace stream
|
|||||||
const int WINDOW_SIZE = 6; // in messages
|
const int WINDOW_SIZE = 6; // in messages
|
||||||
const int MIN_WINDOW_SIZE = 1;
|
const int MIN_WINDOW_SIZE = 1;
|
||||||
const int MAX_WINDOW_SIZE = 128;
|
const int MAX_WINDOW_SIZE = 128;
|
||||||
|
const int WINDOW_SIZE_DROP_FRACTION = 10; // 1/10
|
||||||
|
const double RTT_EWMA_ALPHA = 0.5;
|
||||||
const int INITIAL_RTT = 8000; // in milliseconds
|
const int INITIAL_RTT = 8000; // in milliseconds
|
||||||
const int INITIAL_RTO = 9000; // in milliseconds
|
const int INITIAL_RTO = 9000; // in milliseconds
|
||||||
const int MIN_SEND_ACK_TIMEOUT = 2; // in milliseconds
|
const int MIN_SEND_ACK_TIMEOUT = 2; // in milliseconds
|
||||||
|
Loading…
x
Reference in New Issue
Block a user