1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-11-24 04:01:07 +03:00

Add ccaConfig param for startup pace gain

Summary: As title.

Reviewed By: mjoras

Differential Revision: D56425968

fbshipit-source-id: 79d6566ae66aa1c63d44d33e83565d9b11e8d329
This commit is contained in:
Joseph Beshay
2024-04-22 18:46:43 -07:00
committed by Facebook GitHub Bot
parent c5478153a9
commit 6e1db76335
7 changed files with 27 additions and 5 deletions

View File

@@ -348,6 +348,7 @@ enum class QuicVersion : uint32_t {
// MVFST_EXPERIMENTAL2 enables including and using cwnd hints in 0-rtt session
// tickets in QuicServerWorker.cpp
MVFST_EXPERIMENTAL2 = 0xfaceb011, // Experimental alias for MVFST
// MVFST_EXPERIMENTAL3 is used to apply a 2x pace scaling for BBRv2
MVFST_EXPERIMENTAL3 = 0xfaceb013, // Experimental alias for MVFST
};

View File

@@ -948,7 +948,10 @@ void Bbr2CongestionController::getStats(
void Bbr2CongestionController::updatePacingAndCwndGain() {
switch (state_) {
case State::Startup:
pacingGain_ = kStartupPacingGain;
pacingGain_ =
conn_.transportSettings.ccaConfig.overrideStartupPacingGain > 0
? conn_.transportSettings.ccaConfig.overrideStartupPacingGain
: kStartupPacingGain;
cwndGain_ = kStartupCwndGain;
break;
case State::Drain:

View File

@@ -653,6 +653,11 @@ QuicServerTransport::Ptr QuicServerWorker::makeTransport(
if (quicVersion == QuicVersion::MVFST_EXPERIMENTAL) {
transportSettings_.initCwndInMss = 30;
}
if (quicVersion == QuicVersion::MVFST_EXPERIMENTAL3) {
// Use twice the default pacing gain to make BBRv2's startup behavior
// similar to BBRv1's.
transportSettings_.ccaConfig.overrideStartupPacingGain = 2 * 2.89;
}
auto transportSettings = transportSettingsOverrideFn_
? transportSettingsOverrideFn_(

View File

@@ -97,6 +97,8 @@ void maybeSetExperimentalSettings(QuicServerConnectionState& conn) {
// QuicServerWorker.cpp before CC is initialized.
} else if (conn.version == QuicVersion::MVFST_EXPERIMENTAL2) {
} else if (conn.version == QuicVersion::MVFST_EXPERIMENTAL3) {
// MVFST_EXPERIMENTAL3 is used to apply a 2x pace scaling for BBRv2
// QuicServerWorker.cpp before CC is initialized.
}
}

View File

@@ -89,6 +89,11 @@ struct CongestionControlConfig {
// Use a different cwnd gain during ProbeBW Cruise and Refill.
// If value < 0, use the default cwnd gain.
float overrideCruiseCwndGain{-1.0};
// Used by: BBR2
// Use a different pacing gain during Startup.
// If value < 0, use the default pacing gain.
float overrideStartupPacingGain{-1.0};
};
struct DatagramConfig {

View File

@@ -85,9 +85,10 @@ quic::CongestionControlConfig parseCongestionControlConfig(
}
// Parse optional float fields
const std::array<std::pair<std::string, float&>, 2> floatFields = {
const std::array<std::pair<std::string, float&>, 3> floatFields = {
{{"overrideCruisePacingGain", ccaConfig.overrideCruisePacingGain},
{"overrideCruiseCwndGain", ccaConfig.overrideCruiseCwndGain}}};
{"overrideCruiseCwndGain", ccaConfig.overrideCruiseCwndGain},
{"overrideStartupPacingGain", ccaConfig.overrideStartupPacingGain}}};
for (const auto& [name, field] : floatFields) {
if (auto val = ccaConfigDyn.get_ptr(name)) {

View File

@@ -38,11 +38,13 @@ TEST_F(TransportSettingsFunctionsTest, ParseFloats) {
std::string testString =
"{"
"\"overrideCruisePacingGain\": 7.9, "
"\"overrideCruiseCwndGain\": -0.1 "
"\"overrideCruiseCwndGain\": -0.1, "
"\"overrideStartupPacingGain\": 2.1 "
"}";
auto config = parseCongestionControlConfig(testString);
EXPECT_EQ(config.overrideCruisePacingGain, 7.9f);
EXPECT_EQ(config.overrideCruiseCwndGain, -0.1f);
EXPECT_EQ(config.overrideStartupPacingGain, 2.1f);
}
TEST_F(TransportSettingsFunctionsTest, FullConfig) {
@@ -66,7 +68,8 @@ TEST_F(TransportSettingsFunctionsTest, FullConfig) {
"\"ignoreLoss\": true, "
"\"enableRenoCoexistence\": true, "
"\"overrideCruisePacingGain\": 7.9, "
"\"overrideCruiseCwndGain\": -0.1 "
"\"overrideCruiseCwndGain\": -0.1, "
"\"overrideStartupPacingGain\": -0.5 "
"}";
auto config = parseCongestionControlConfig(testString);
EXPECT_EQ(config.conservativeRecovery, true);
@@ -82,6 +85,7 @@ TEST_F(TransportSettingsFunctionsTest, FullConfig) {
EXPECT_EQ(config.enableRenoCoexistence, true);
EXPECT_EQ(config.overrideCruisePacingGain, 7.9f);
EXPECT_EQ(config.overrideCruiseCwndGain, -0.1f);
EXPECT_EQ(config.overrideStartupPacingGain, -0.5f);
ASSERT_TRUE(config.ackFrequencyConfig.has_value());
EXPECT_EQ(config.ackFrequencyConfig->ackElicitingThreshold, 99);
@@ -109,6 +113,7 @@ TEST_F(TransportSettingsFunctionsTest, UnspecifiedFieldsAreDefaulted) {
EXPECT_EQ(config.enableRenoCoexistence, false);
EXPECT_EQ(config.overrideCruisePacingGain, -1.0f);
EXPECT_EQ(config.overrideCruiseCwndGain, -1.0f);
EXPECT_EQ(config.overrideStartupPacingGain, -1.0f);
ASSERT_TRUE(config.ackFrequencyConfig.has_value());
EXPECT_EQ(