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:
committed by
Facebook GitHub Bot
parent
c5478153a9
commit
6e1db76335
@@ -348,6 +348,7 @@ enum class QuicVersion : uint32_t {
|
|||||||
// MVFST_EXPERIMENTAL2 enables including and using cwnd hints in 0-rtt session
|
// MVFST_EXPERIMENTAL2 enables including and using cwnd hints in 0-rtt session
|
||||||
// tickets in QuicServerWorker.cpp
|
// tickets in QuicServerWorker.cpp
|
||||||
MVFST_EXPERIMENTAL2 = 0xfaceb011, // Experimental alias for MVFST
|
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
|
MVFST_EXPERIMENTAL3 = 0xfaceb013, // Experimental alias for MVFST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -948,7 +948,10 @@ void Bbr2CongestionController::getStats(
|
|||||||
void Bbr2CongestionController::updatePacingAndCwndGain() {
|
void Bbr2CongestionController::updatePacingAndCwndGain() {
|
||||||
switch (state_) {
|
switch (state_) {
|
||||||
case State::Startup:
|
case State::Startup:
|
||||||
pacingGain_ = kStartupPacingGain;
|
pacingGain_ =
|
||||||
|
conn_.transportSettings.ccaConfig.overrideStartupPacingGain > 0
|
||||||
|
? conn_.transportSettings.ccaConfig.overrideStartupPacingGain
|
||||||
|
: kStartupPacingGain;
|
||||||
cwndGain_ = kStartupCwndGain;
|
cwndGain_ = kStartupCwndGain;
|
||||||
break;
|
break;
|
||||||
case State::Drain:
|
case State::Drain:
|
||||||
|
|||||||
@@ -653,6 +653,11 @@ QuicServerTransport::Ptr QuicServerWorker::makeTransport(
|
|||||||
if (quicVersion == QuicVersion::MVFST_EXPERIMENTAL) {
|
if (quicVersion == QuicVersion::MVFST_EXPERIMENTAL) {
|
||||||
transportSettings_.initCwndInMss = 30;
|
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_
|
auto transportSettings = transportSettingsOverrideFn_
|
||||||
? transportSettingsOverrideFn_(
|
? transportSettingsOverrideFn_(
|
||||||
|
|||||||
@@ -97,6 +97,8 @@ void maybeSetExperimentalSettings(QuicServerConnectionState& conn) {
|
|||||||
// QuicServerWorker.cpp before CC is initialized.
|
// QuicServerWorker.cpp before CC is initialized.
|
||||||
} else if (conn.version == QuicVersion::MVFST_EXPERIMENTAL2) {
|
} else if (conn.version == QuicVersion::MVFST_EXPERIMENTAL2) {
|
||||||
} else if (conn.version == QuicVersion::MVFST_EXPERIMENTAL3) {
|
} 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.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -89,6 +89,11 @@ struct CongestionControlConfig {
|
|||||||
// Use a different cwnd gain during ProbeBW Cruise and Refill.
|
// Use a different cwnd gain during ProbeBW Cruise and Refill.
|
||||||
// If value < 0, use the default cwnd gain.
|
// If value < 0, use the default cwnd gain.
|
||||||
float overrideCruiseCwndGain{-1.0};
|
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 {
|
struct DatagramConfig {
|
||||||
|
|||||||
@@ -85,9 +85,10 @@ quic::CongestionControlConfig parseCongestionControlConfig(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Parse optional float fields
|
// 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},
|
{{"overrideCruisePacingGain", ccaConfig.overrideCruisePacingGain},
|
||||||
{"overrideCruiseCwndGain", ccaConfig.overrideCruiseCwndGain}}};
|
{"overrideCruiseCwndGain", ccaConfig.overrideCruiseCwndGain},
|
||||||
|
{"overrideStartupPacingGain", ccaConfig.overrideStartupPacingGain}}};
|
||||||
|
|
||||||
for (const auto& [name, field] : floatFields) {
|
for (const auto& [name, field] : floatFields) {
|
||||||
if (auto val = ccaConfigDyn.get_ptr(name)) {
|
if (auto val = ccaConfigDyn.get_ptr(name)) {
|
||||||
|
|||||||
@@ -38,11 +38,13 @@ TEST_F(TransportSettingsFunctionsTest, ParseFloats) {
|
|||||||
std::string testString =
|
std::string testString =
|
||||||
"{"
|
"{"
|
||||||
"\"overrideCruisePacingGain\": 7.9, "
|
"\"overrideCruisePacingGain\": 7.9, "
|
||||||
"\"overrideCruiseCwndGain\": -0.1 "
|
"\"overrideCruiseCwndGain\": -0.1, "
|
||||||
|
"\"overrideStartupPacingGain\": 2.1 "
|
||||||
"}";
|
"}";
|
||||||
auto config = parseCongestionControlConfig(testString);
|
auto config = parseCongestionControlConfig(testString);
|
||||||
EXPECT_EQ(config.overrideCruisePacingGain, 7.9f);
|
EXPECT_EQ(config.overrideCruisePacingGain, 7.9f);
|
||||||
EXPECT_EQ(config.overrideCruiseCwndGain, -0.1f);
|
EXPECT_EQ(config.overrideCruiseCwndGain, -0.1f);
|
||||||
|
EXPECT_EQ(config.overrideStartupPacingGain, 2.1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(TransportSettingsFunctionsTest, FullConfig) {
|
TEST_F(TransportSettingsFunctionsTest, FullConfig) {
|
||||||
@@ -66,7 +68,8 @@ TEST_F(TransportSettingsFunctionsTest, FullConfig) {
|
|||||||
"\"ignoreLoss\": true, "
|
"\"ignoreLoss\": true, "
|
||||||
"\"enableRenoCoexistence\": true, "
|
"\"enableRenoCoexistence\": true, "
|
||||||
"\"overrideCruisePacingGain\": 7.9, "
|
"\"overrideCruisePacingGain\": 7.9, "
|
||||||
"\"overrideCruiseCwndGain\": -0.1 "
|
"\"overrideCruiseCwndGain\": -0.1, "
|
||||||
|
"\"overrideStartupPacingGain\": -0.5 "
|
||||||
"}";
|
"}";
|
||||||
auto config = parseCongestionControlConfig(testString);
|
auto config = parseCongestionControlConfig(testString);
|
||||||
EXPECT_EQ(config.conservativeRecovery, true);
|
EXPECT_EQ(config.conservativeRecovery, true);
|
||||||
@@ -82,6 +85,7 @@ TEST_F(TransportSettingsFunctionsTest, FullConfig) {
|
|||||||
EXPECT_EQ(config.enableRenoCoexistence, true);
|
EXPECT_EQ(config.enableRenoCoexistence, true);
|
||||||
EXPECT_EQ(config.overrideCruisePacingGain, 7.9f);
|
EXPECT_EQ(config.overrideCruisePacingGain, 7.9f);
|
||||||
EXPECT_EQ(config.overrideCruiseCwndGain, -0.1f);
|
EXPECT_EQ(config.overrideCruiseCwndGain, -0.1f);
|
||||||
|
EXPECT_EQ(config.overrideStartupPacingGain, -0.5f);
|
||||||
|
|
||||||
ASSERT_TRUE(config.ackFrequencyConfig.has_value());
|
ASSERT_TRUE(config.ackFrequencyConfig.has_value());
|
||||||
EXPECT_EQ(config.ackFrequencyConfig->ackElicitingThreshold, 99);
|
EXPECT_EQ(config.ackFrequencyConfig->ackElicitingThreshold, 99);
|
||||||
@@ -109,6 +113,7 @@ TEST_F(TransportSettingsFunctionsTest, UnspecifiedFieldsAreDefaulted) {
|
|||||||
EXPECT_EQ(config.enableRenoCoexistence, false);
|
EXPECT_EQ(config.enableRenoCoexistence, false);
|
||||||
EXPECT_EQ(config.overrideCruisePacingGain, -1.0f);
|
EXPECT_EQ(config.overrideCruisePacingGain, -1.0f);
|
||||||
EXPECT_EQ(config.overrideCruiseCwndGain, -1.0f);
|
EXPECT_EQ(config.overrideCruiseCwndGain, -1.0f);
|
||||||
|
EXPECT_EQ(config.overrideStartupPacingGain, -1.0f);
|
||||||
|
|
||||||
ASSERT_TRUE(config.ackFrequencyConfig.has_value());
|
ASSERT_TRUE(config.ackFrequencyConfig.has_value());
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
|
|||||||
Reference in New Issue
Block a user