mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-04-28 11:47:48 +02:00
improved congestion control
This commit is contained in:
parent
ff8941af71
commit
199d149bed
2 changed files with 154 additions and 43 deletions
|
@ -52,15 +52,17 @@ namespace stream
|
|||
const size_t STREAMING_MTU_RATCHETS = 1812;
|
||||
const size_t MAX_PACKET_SIZE = 4096;
|
||||
const size_t COMPRESSION_THRESHOLD_SIZE = 66;
|
||||
const int MAX_NUM_RESEND_ATTEMPTS = 9;
|
||||
const int WINDOW_SIZE = 6; // in messages
|
||||
const int MAX_NUM_RESEND_ATTEMPTS = 10;
|
||||
const int MAX_STREAM_SPEED = 1730000000; // 1 - 1730000000 // in bytes/sec // no more than 1.73 Gbytes/s
|
||||
const int MIN_PACING_TIME = 1000000 * STREAMING_MTU / MAX_STREAM_SPEED; // in microseconds
|
||||
const int INITIAL_WINDOW_SIZE = 10;
|
||||
const int MIN_WINDOW_SIZE = 1;
|
||||
const int MAX_WINDOW_SIZE = 128;
|
||||
const int WINDOW_SIZE_DROP_FRACTION = 10; // 1/10
|
||||
const double RTT_EWMA_ALPHA = 0.125;
|
||||
const double RTT_EWMA_ALPHA = 0.9;
|
||||
const int MIN_RTO = 20; // in milliseconds
|
||||
const int INITIAL_RTT = 8000; // in milliseconds
|
||||
const int INITIAL_RTO = 9000; // in milliseconds
|
||||
const int INITIAL_PACING_TIME = 1000 * INITIAL_RTT / INITIAL_WINDOW_SIZE; // in microseconds
|
||||
const int MIN_SEND_ACK_TIMEOUT = 2; // in milliseconds
|
||||
const int SYN_TIMEOUT = 200; // how long we wait for SYN after follow-on, in milliseconds
|
||||
const size_t MAX_PENDING_INCOMING_BACKLOG = 128;
|
||||
|
@ -231,8 +233,11 @@ namespace stream
|
|||
template<typename Buffer, typename ReceiveHandler>
|
||||
void HandleReceiveTimer (const boost::system::error_code& ecode, const Buffer& buffer, ReceiveHandler handler, int remainingTimeout);
|
||||
|
||||
void ScheduleSend ();
|
||||
void HandleSendTimer (const boost::system::error_code& ecode);
|
||||
void ScheduleResend ();
|
||||
void HandleResendTimer (const boost::system::error_code& ecode);
|
||||
void ResendPacket ();
|
||||
void ScheduleAck (int timeout);
|
||||
void HandleAckSendTimer (const boost::system::error_code& ecode);
|
||||
|
||||
|
@ -242,8 +247,12 @@ namespace stream
|
|||
uint32_t m_SendStreamID, m_RecvStreamID, m_SequenceNumber;
|
||||
uint32_t m_TunnelsChangeSequenceNumber;
|
||||
int32_t m_LastReceivedSequenceNumber;
|
||||
int32_t m_PreviousReceivedSequenceNumber;
|
||||
StreamStatus m_Status;
|
||||
bool m_IsAckSendScheduled;
|
||||
bool m_IsNAcked;
|
||||
bool m_IsWinDropped;
|
||||
bool m_IsTimeOutResend;
|
||||
StreamingDestination& m_LocalDestination;
|
||||
std::shared_ptr<const i2p::data::IdentityEx> m_RemoteIdentity;
|
||||
std::shared_ptr<const i2p::crypto::Verifier> m_TransientVerifier; // in case of offline key
|
||||
|
@ -254,14 +263,14 @@ namespace stream
|
|||
std::queue<Packet *> m_ReceiveQueue;
|
||||
std::set<Packet *, PacketCmp> m_SavedPackets;
|
||||
std::set<Packet *, PacketCmp> m_SentPackets;
|
||||
boost::asio::deadline_timer m_ReceiveTimer, m_ResendTimer, m_AckSendTimer;
|
||||
boost::asio::deadline_timer m_ReceiveTimer, m_SendTimer, m_ResendTimer, m_AckSendTimer;
|
||||
size_t m_NumSentBytes, m_NumReceivedBytes;
|
||||
uint16_t m_Port;
|
||||
|
||||
SendBufferQueue m_SendBuffer;
|
||||
double m_RTT;
|
||||
int m_WindowSize, m_RTO, m_AckDelay;
|
||||
uint64_t m_LastWindowSizeIncreaseTime;
|
||||
int m_WindowSize, m_RTO, m_AckDelay, m_PrewRTTSample, m_PrewRTT, m_Jitter;
|
||||
uint64_t m_LastWindowSizeIncreaseTime, m_PacingTime;
|
||||
int m_NumResendAttempts;
|
||||
size_t m_MTU;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue