Increase QUIC BBRv2 inflight_hi by bytes_delevered instead of inflight_at_send. Enabled by B2DL. Protected by -quic_reloadable_flag_quic_bbr2_use_bytes_delivered. PiperOrigin-RevId: 343922245 Change-Id: I308eb74f1bcc3c5e3e67cce00beb440516243393
diff --git a/quic/core/congestion_control/bbr2_misc.h b/quic/core/congestion_control/bbr2_misc.h index 1109e08..0b65f9d 100644 --- a/quic/core/congestion_control/bbr2_misc.h +++ b/quic/core/congestion_control/bbr2_misc.h
@@ -189,6 +189,9 @@ // Can be enabled by connection option 'B2SL'. bool startup_loss_exit_use_max_delivered_for_inflight_hi = false; + + // Can be enabled by connection option 'B2DL'. + bool use_bytes_delivered_for_inflight_hi = false; }; class QUIC_EXPORT_PRIVATE RoundTripCounter {
diff --git a/quic/core/congestion_control/bbr2_probe_bw.cc b/quic/core/congestion_control/bbr2_probe_bw.cc index e91339f..f76b5f4 100644 --- a/quic/core/congestion_control/bbr2_probe_bw.cc +++ b/quic/core/congestion_control/bbr2_probe_bw.cc
@@ -195,14 +195,28 @@ return NOT_ADAPTED_INVALID_SAMPLE; } + // TODO(ianswett): Rename to bytes_delivered if + // use_bytes_delivered_for_inflight_hi is default enabled. + QuicByteCount inflight_at_send = BytesInFlight(send_state); + if (Params().use_bytes_delivered_for_inflight_hi) { + if (congestion_event.last_packet_send_state.total_bytes_acked <= + model_->total_bytes_acked()) { + inflight_at_send = + model_->total_bytes_acked() - + congestion_event.last_packet_send_state.total_bytes_acked; + } else { + QUIC_BUG << "Total_bytes_acked(" << model_->total_bytes_acked() + << ") < send_state.total_bytes_acked(" + << congestion_event.last_packet_send_state.total_bytes_acked + << ")"; + } + } if (model_->IsInflightTooHigh(congestion_event, Params().probe_bw_full_loss_count)) { if (cycle_.is_sample_from_probing) { cycle_.is_sample_from_probing = false; if (!send_state.is_app_limited) { - const QuicByteCount inflight_at_send = BytesInFlight(send_state); - const QuicByteCount inflight_target = sender_->GetTargetBytesInflight() * (1.0 - Params().beta); if (inflight_at_send >= inflight_target) { @@ -248,8 +262,6 @@ return NOT_ADAPTED_INFLIGHT_HIGH_NOT_SET; } - const QuicByteCount inflight_at_send = BytesInFlight(send_state); - // Raise the upper bound for inflight. if (inflight_at_send > model_->inflight_hi()) { QUIC_DVLOG(3)
diff --git a/quic/core/congestion_control/bbr2_sender.cc b/quic/core/congestion_control/bbr2_sender.cc index 6cd3037..bea4f9d 100644 --- a/quic/core/congestion_control/bbr2_sender.cc +++ b/quic/core/congestion_control/bbr2_sender.cc
@@ -150,6 +150,11 @@ ContainsQuicTag(connection_options, kB2H2)) { params_.limit_inflight_hi_by_max_delivered = true; } + if (GetQuicReloadableFlag(quic_bbr2_use_bytes_delivered) && + ContainsQuicTag(connection_options, kB2DL)) { + QUIC_RELOADABLE_FLAG_COUNT(quic_bbr2_use_bytes_delivered); + params_.use_bytes_delivered_for_inflight_hi = true; + } if (ContainsQuicTag(connection_options, kBSAO)) { model_.EnableOverestimateAvoidance(); }
diff --git a/quic/core/crypto/crypto_protocol.h b/quic/core/crypto/crypto_protocol.h index 8093a68..853c42a 100644 --- a/quic/core/crypto/crypto_protocol.h +++ b/quic/core/crypto/crypto_protocol.h
@@ -140,6 +140,8 @@ const QuicTag kBSAO = TAG('B', 'S', 'A', 'O'); // Avoid Overestimation in // Bandwidth Sampler with ack // aggregation +const QuicTag kB2DL = TAG('B', '2', 'D', 'L'); // Increase inflight_hi based + // on delievered, not inflight. const QuicTag kNTLP = TAG('N', 'T', 'L', 'P'); // No tail loss probe const QuicTag k1TLP = TAG('1', 'T', 'L', 'P'); // 1 tail loss probe const QuicTag k1RTO = TAG('1', 'R', 'T', 'O'); // Send 1 packet upon RTO
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h index c5d0a9f..55036ee 100644 --- a/quic/core/quic_flags_list.h +++ b/quic/core/quic_flags_list.h
@@ -15,6 +15,7 @@ QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_bbr2_no_exit_startup_on_loss_with_bw_growth, true) QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_bbr2_startup_loss_exit_use_max_delivered, true) QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_bbr2_support_max_bootstrap_cwnd, true) +QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_bbr2_use_bytes_delivered, false) QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_can_send_ack_frequency, true) QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_close_connection_in_on_can_write_with_blocked_writer, true) QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_connection_set_initial_self_address, true)