Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(598)

Side by Side Diff: net/quic/core/congestion_control/bbr_sender.h

Issue 2833673006: Increases inflight limit for QUIC BBR if the ack rate in the past half-rtt was lower than half the… (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | net/quic/core/congestion_control/bbr_sender.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // BBR (Bottleneck Bandwidth and RTT) congestion control algorithm. 5 // BBR (Bottleneck Bandwidth and RTT) congestion control algorithm.
6 6
7 #ifndef NET_QUIC_CORE_CONGESTION_CONTROL_BBR_SENDER_H_ 7 #ifndef NET_QUIC_CORE_CONGESTION_CONTROL_BBR_SENDER_H_
8 #define NET_QUIC_CORE_CONGESTION_CONTROL_BBR_SENDER_H_ 8 #define NET_QUIC_CORE_CONGESTION_CONTROL_BBR_SENDER_H_
9 9
10 #include <cstdint> 10 #include <cstdint>
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 const CongestionVector& acked_packets, 112 const CongestionVector& acked_packets,
113 const CongestionVector& lost_packets) override; 113 const CongestionVector& lost_packets) override;
114 bool OnPacketSent(QuicTime sent_time, 114 bool OnPacketSent(QuicTime sent_time,
115 QuicByteCount bytes_in_flight, 115 QuicByteCount bytes_in_flight,
116 QuicPacketNumber packet_number, 116 QuicPacketNumber packet_number,
117 QuicByteCount bytes, 117 QuicByteCount bytes,
118 HasRetransmittableData is_retransmittable) override; 118 HasRetransmittableData is_retransmittable) override;
119 void OnRetransmissionTimeout(bool packets_retransmitted) override {} 119 void OnRetransmissionTimeout(bool packets_retransmitted) override {}
120 void OnConnectionMigration() override {} 120 void OnConnectionMigration() override {}
121 QuicTime::Delta TimeUntilSend(QuicTime now, 121 QuicTime::Delta TimeUntilSend(QuicTime now,
122 QuicByteCount bytes_in_flight) const override; 122 QuicByteCount bytes_in_flight) override;
123 QuicBandwidth PacingRate(QuicByteCount bytes_in_flight) const override; 123 QuicBandwidth PacingRate(QuicByteCount bytes_in_flight) const override;
124 QuicBandwidth BandwidthEstimate() const override; 124 QuicBandwidth BandwidthEstimate() const override;
125 QuicByteCount GetCongestionWindow() const override; 125 QuicByteCount GetCongestionWindow() const override;
126 QuicByteCount GetSlowStartThreshold() const override; 126 QuicByteCount GetSlowStartThreshold() const override;
127 CongestionControlType GetCongestionControlType() const override; 127 CongestionControlType GetCongestionControlType() const override;
128 std::string GetDebugState() const override; 128 std::string GetDebugState() const override;
129 void OnApplicationLimited(QuicByteCount bytes_in_flight) override; 129 void OnApplicationLimited(QuicByteCount bytes_in_flight) override;
130 // End implementation of SendAlgorithmInterface. 130 // End implementation of SendAlgorithmInterface.
131 131
132 // Gets the number of RTTs BBR remains in STARTUP phase. 132 // Gets the number of RTTs BBR remains in STARTUP phase.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 // Decides whether to enter or exit PROBE_RTT. 189 // Decides whether to enter or exit PROBE_RTT.
190 void MaybeEnterOrExitProbeRtt(QuicTime now, 190 void MaybeEnterOrExitProbeRtt(QuicTime now,
191 bool is_round_start, 191 bool is_round_start,
192 bool min_rtt_expired); 192 bool min_rtt_expired);
193 // Determines whether BBR needs to enter, exit or advance state of the 193 // Determines whether BBR needs to enter, exit or advance state of the
194 // recovery. 194 // recovery.
195 void UpdateRecoveryState(QuicPacketNumber last_acked_packet, 195 void UpdateRecoveryState(QuicPacketNumber last_acked_packet,
196 bool has_losses, 196 bool has_losses,
197 bool is_round_start); 197 bool is_round_start);
198 198
199 // Returns true if recent ack rate has decreased substantially and if sender
200 // is allowed to continue sending when congestion window limited.
201 bool SlowDeliveryAllowsSending(QuicTime now, QuicByteCount bytes_in_flight);
202
203 // Updates history of recently received acks. Acks are considered recent
204 // if received within kRecentlyAckedRttFraction x smoothed RTT in the past.
205 // Adds new ack to recently_acked_ if |newly_acked_bytes| is non-zero.
206 void UpdateRecentlyAcked(QuicTime new_ack_time,
207 QuicByteCount newly_acked_bytes);
208
199 // Updates the ack aggregation max filter in bytes. 209 // Updates the ack aggregation max filter in bytes.
200 void UpdateAckAggregationBytes(QuicTime ack_time, 210 void UpdateAckAggregationBytes(QuicTime ack_time,
201 QuicByteCount newly_acked_bytes); 211 QuicByteCount newly_acked_bytes);
202 212
203 // Determines the appropriate pacing rate for the connection. 213 // Determines the appropriate pacing rate for the connection.
204 void CalculatePacingRate(); 214 void CalculatePacingRate();
205 // Determines the appropriate congestion window for the connection. 215 // Determines the appropriate congestion window for the connection.
206 void CalculateCongestionWindow(QuicByteCount bytes_acked); 216 void CalculateCongestionWindow(QuicByteCount bytes_acked);
207 // Determines the approriate window that constrains the in-flight during 217 // Determines the approriate window that constrains the in-flight during
208 // recovery. 218 // recovery.
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 273
264 // The gain used for the congestion window during PROBE_BW. Latched from 274 // The gain used for the congestion window during PROBE_BW. Latched from
265 // quic_bbr_cwnd_gain flag. 275 // quic_bbr_cwnd_gain flag.
266 const float congestion_window_gain_constant_; 276 const float congestion_window_gain_constant_;
267 // The coefficient by which mean RTT variance is added to the congestion 277 // The coefficient by which mean RTT variance is added to the congestion
268 // window. Latched from quic_bbr_rtt_variation_weight flag. 278 // window. Latched from quic_bbr_rtt_variation_weight flag.
269 const float rtt_variance_weight_; 279 const float rtt_variance_weight_;
270 // The number of RTTs to stay in STARTUP mode. Defaults to 3. 280 // The number of RTTs to stay in STARTUP mode. Defaults to 3.
271 QuicRoundTripCount num_startup_rtts_; 281 QuicRoundTripCount num_startup_rtts_;
272 282
283 // Gain to use when delivery rate is slow.
284 // TODO(jri): Make this a constant if we decide to use this code for BBR.
285 const float congestion_window_gain_for_slow_delivery_;
286 // Threshold multiplier below which delivery is considered slow.
287 // TODO(jri): Make this a constant if we decide to use this code for BBR.
288 const float threshold_multiplier_for_slow_delivery_;
289
273 // Number of round-trips in PROBE_BW mode, used for determining the current 290 // Number of round-trips in PROBE_BW mode, used for determining the current
274 // pacing gain cycle. 291 // pacing gain cycle.
275 int cycle_current_offset_; 292 int cycle_current_offset_;
276 // The time at which the last pacing gain cycle was started. 293 // The time at which the last pacing gain cycle was started.
277 QuicTime last_cycle_start_; 294 QuicTime last_cycle_start_;
278 295
279 // Indicates whether the connection has reached the full bandwidth mode. 296 // Indicates whether the connection has reached the full bandwidth mode.
280 bool is_at_full_bandwidth_; 297 bool is_at_full_bandwidth_;
281 // Number of rounds during which there was no significant bandwidth increase. 298 // Number of rounds during which there was no significant bandwidth increase.
282 QuicRoundTripCount rounds_without_bandwidth_gain_; 299 QuicRoundTripCount rounds_without_bandwidth_gain_;
(...skipping 15 matching lines...) Expand all
298 bool last_sample_is_app_limited_; 315 bool last_sample_is_app_limited_;
299 316
300 // Current state of recovery. 317 // Current state of recovery.
301 RecoveryState recovery_state_; 318 RecoveryState recovery_state_;
302 // Receiving acknowledgement of a packet after |end_recovery_at_| will cause 319 // Receiving acknowledgement of a packet after |end_recovery_at_| will cause
303 // BBR to exit the recovery mode. 320 // BBR to exit the recovery mode.
304 QuicPacketNumber end_recovery_at_; 321 QuicPacketNumber end_recovery_at_;
305 // A window used to limit the number of bytes in flight during loss recovery. 322 // A window used to limit the number of bytes in flight during loss recovery.
306 QuicByteCount recovery_window_; 323 QuicByteCount recovery_window_;
307 324
325 // Records information about a received ack
326 struct DataDelivered {
327 QuicTime ack_time;
328 QuicByteCount acked_bytes;
329 };
330
331 // Data structure to record recently received acks. Used for determining
332 // recently seen ack rate over a short period in the past.
333 std::deque<DataDelivered> recently_acked_;
334 QuicByteCount bytes_recently_acked_;
335
308 DISALLOW_COPY_AND_ASSIGN(BbrSender); 336 DISALLOW_COPY_AND_ASSIGN(BbrSender);
309 }; 337 };
310 338
311 QUIC_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os, 339 QUIC_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
312 const BbrSender::Mode& mode); 340 const BbrSender::Mode& mode);
313 QUIC_EXPORT_PRIVATE std::ostream& operator<<( 341 QUIC_EXPORT_PRIVATE std::ostream& operator<<(
314 std::ostream& os, 342 std::ostream& os,
315 const BbrSender::DebugState& state); 343 const BbrSender::DebugState& state);
316 344
317 } // namespace net 345 } // namespace net
318 346
319 #endif // NET_QUIC_CORE_CONGESTION_CONTROL_BBR_SENDER_H_ 347 #endif // NET_QUIC_CORE_CONGESTION_CONTROL_BBR_SENDER_H_
OLDNEW
« no previous file with comments | « no previous file | net/quic/core/congestion_control/bbr_sender.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698