1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-08-08 09:42:06 +03:00

When using ACK_FREQUENCY, disable SRTT/4 heuristic.

Summary: We always use an SRTT/4 ACKing heuristic for the ACK delay. This has generally been a useful heuristic, but when using ACK_FREQUENCY we should defer to using the delay by the peer.

Reviewed By: jbeshay

Differential Revision: D40272530

fbshipit-source-id: c7a44e53233c97d0c96bc6f936a7318cf4676aba
This commit is contained in:
Matt Joras
2022-10-11 18:15:24 -07:00
committed by Facebook GitHub Bot
parent c6d9731247
commit 3e57e82400
2 changed files with 35 additions and 0 deletions

View File

@@ -4343,6 +4343,36 @@ TEST_F(QuicTransportTest, ScheduleAckTimeout) {
EXPECT_NEAR(transport_->getAckTimeout()->getTimeRemaining().count(), 25, 5);
}
TEST_F(QuicTransportTest, ScheduleAckTimeoutSRTTFactor) {
transport_->getConnectionState().lossState.srtt = 50ms;
EXPECT_FALSE(transport_->getAckTimeout()->isScheduled());
transport_->getConnectionState().pendingEvents.scheduleAckTimeout = true;
transport_->onNetworkData(
SocketAddress("::1", 10003),
NetworkData(
IOBuf::copyBuffer("Never on time, always timeout"), Clock::now()));
EXPECT_TRUE(transport_->getAckTimeout()->isScheduled());
EXPECT_NEAR(
transport_->getAckTimeout()->getTimeRemaining().count(), 50 / 4, 2);
}
TEST_F(QuicTransportTest, ScheduleAckTimeoutAckFreq) {
transport_->getConnectionState().lossState.srtt = 50ms;
transport_->getConnectionState().transportSettings.minAckDelay = 1ms;
transport_->getConnectionState()
.ackStates.appDataAckState.ackFrequencySequenceNumber = 1;
transport_->getConnectionState().ackStates.maxAckDelay = 50ms / 3;
EXPECT_FALSE(transport_->getAckTimeout()->isScheduled());
transport_->getConnectionState().pendingEvents.scheduleAckTimeout = true;
transport_->onNetworkData(
SocketAddress("::1", 10003),
NetworkData(
IOBuf::copyBuffer("Never on time, always timeout"), Clock::now()));
EXPECT_TRUE(transport_->getAckTimeout()->isScheduled());
EXPECT_NEAR(
transport_->getAckTimeout()->getTimeRemaining().count(), 50 / 3, 2);
}
TEST_F(QuicTransportTest, ScheduleAckTimeoutFromMaxAckDelay) {
// Make srtt large so we will use maxAckDelay
transport_->getConnectionState().lossState.srtt = 25000000us;