In uStreamer, add a quic_enable_bandwidth_overestimate_avoidance experiment flag and use it to enable bandwidth overestimate avoidance(connection option BSAO) for BBR and BBRv2.
In a follow up cl, I'll add two more experiments to QuicBbrV2Study, one for BBR+BSAO, another for BBRv2+BSAO.
(n/a) no behavior change.
PiperOrigin-RevId: 321646584
Change-Id: I35e3e037418d12bdd28355e13d3ae2401de4c7c0
diff --git a/quic/core/congestion_control/bbr2_misc.h b/quic/core/congestion_control/bbr2_misc.h
index bf22bc5..de30377 100644
--- a/quic/core/congestion_control/bbr2_misc.h
+++ b/quic/core/congestion_control/bbr2_misc.h
@@ -369,6 +369,10 @@
bandwidth_sampler_.EnableOverestimateAvoidance();
}
+ bool IsBandwidthOverestimateAvoidanceEnabled() const {
+ return bandwidth_sampler_.IsOverestimateAvoidanceEnabled();
+ }
+
void OnPacketNeutered(QuicPacketNumber packet_number) {
bandwidth_sampler_.OnPacketNeutered(packet_number);
}
diff --git a/quic/core/congestion_control/bbr2_sender.cc b/quic/core/congestion_control/bbr2_sender.cc
index 3f80f42..3c7ba2f 100644
--- a/quic/core/congestion_control/bbr2_sender.cc
+++ b/quic/core/congestion_control/bbr2_sender.cc
@@ -95,9 +95,6 @@
if (config.HasClientRequestedIndependentOption(kBBR9, perspective)) {
params_.flexible_app_limited = true;
}
- if (config.HasClientRequestedIndependentOption(kBSAO, perspective)) {
- model_.EnableOverestimateAvoidance();
- }
if (config.HasClientRequestedIndependentOption(kB2NA, perspective)) {
params_.add_ack_height_to_queueing_threshold = false;
}
@@ -139,6 +136,9 @@
params_.startup_cwnd_gain = 2;
params_.drain_cwnd_gain = 2;
}
+ if (ContainsQuicTag(connection_options, kBSAO)) {
+ model_.EnableOverestimateAvoidance();
+ }
}
Limits<QuicByteCount> Bbr2Sender::GetCwndLimitsByMode() const {
diff --git a/quic/core/congestion_control/bbr2_sender.h b/quic/core/congestion_control/bbr2_sender.h
index 60824cd..39964a0 100644
--- a/quic/core/congestion_control/bbr2_sender.h
+++ b/quic/core/congestion_control/bbr2_sender.h
@@ -107,6 +107,10 @@
// Returns the min of BDP and congestion window.
QuicByteCount GetTargetBytesInflight() const;
+ bool IsBandwidthOverestimateAvoidanceEnabled() const {
+ return model_.IsBandwidthOverestimateAvoidanceEnabled();
+ }
+
struct QUIC_EXPORT_PRIVATE DebugState {
Bbr2Mode mode;
diff --git a/quic/core/congestion_control/bbr_sender.cc b/quic/core/congestion_control/bbr_sender.cc
index 11dff8c..b70bb333a 100644
--- a/quic/core/congestion_control/bbr_sender.cc
+++ b/quic/core/congestion_control/bbr_sender.cc
@@ -288,15 +288,16 @@
max_congestion_window_with_network_parameters_adjusted_ =
100 * kDefaultTCPMSS;
}
- if (config.HasClientRequestedIndependentOption(kBSAO, perspective)) {
- sampler_.EnableOverestimateAvoidance();
- }
ApplyConnectionOptions(config.ClientRequestedIndependentOptions(perspective));
}
void BbrSender::ApplyConnectionOptions(
- const QuicTagVector& /*connection_options*/) {}
+ const QuicTagVector& connection_options) {
+ if (ContainsQuicTag(connection_options, kBSAO)) {
+ sampler_.EnableOverestimateAvoidance();
+ }
+}
void BbrSender::AdjustNetworkParameters(const NetworkParams& params) {
const QuicBandwidth& bandwidth = params.bandwidth;