I have a question about compute min_rtt in bbrV2
- Dominant language
- C++
- Stars
- 897
- Forks
- 177
- PR merge metrics
- No merged PRs in 30d
Description
BandwidthSampler::OnCongestionEvent(QuicTime ack_time,
const AckedPacketVector& acked_packets,
const LostPacketVector& lost_packets,
QuicBandwidth max_bandwidth,
QuicBandwidth est_bandwidth_upper_bound,
QuicRoundTripCount round_trip_count) {
CongestionEventSample event_sample;
.
.
.
for (const auto& packet : acked_packets) {
BandwidthSample sample =
OnPacketAcknowledged(ack_time, packet.packet_number);
if (!sample.rtt.IsZero()) {
event_sample.sample_rtt = std::min(event_sample.sample_rtt, sample.rtt);
}
I think the bbrv2 get the min_rtt in this code,and it's triggered by one ack frame.And one ack frame may include some packet number to be acked.For example,if one ack frame has three acked packet number : 1,2,3; the 3 is largest ack packet number。And the “acked_packets” contain packet 1,2,3. So when compute min_rtt, the code will loop "acked_packets",for packet 1,2,3, it will get min value. But obviously,the packet 1will get min value becaues the packet 1's send time is smallest ,and ack time is same.
**_So my question is does it will cause the rtt will be smaller than real rtt.I think may be only use packet 3 to compute rtt is more correct?
And the ack frame may contain packet‘s receive timestamp,why it doesn't used in compute rtt? because ietf quic may not contain receive timestamp?_**
Contributor guide
Assessment
This issue has not been assessed yet.