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
|
||||
// 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
|
||||
};
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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_(
|
||||
|
||||
@@ -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.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user