forked from quic-go/quic-go
ackhandler: fix qlogging of RTT values (#5418)
This commit is contained in:
@@ -333,6 +333,28 @@ func (h *sentPacketHandler) SentPacket(
|
||||
func (h *sentPacketHandler) qlogMetricsUpdated() {
|
||||
var metricsUpdatedEvent qlog.MetricsUpdated
|
||||
var updated bool
|
||||
if h.rttStats.HasMeasurement() {
|
||||
if h.lastMetrics.MinRTT == nil || *h.lastMetrics.MinRTT != h.rttStats.MinRTT() {
|
||||
metricsUpdatedEvent.MinRTT = pointer(h.rttStats.MinRTT())
|
||||
h.lastMetrics.MinRTT = pointer(h.rttStats.MinRTT())
|
||||
updated = true
|
||||
}
|
||||
if h.lastMetrics.SmoothedRTT == nil || *h.lastMetrics.SmoothedRTT != h.rttStats.SmoothedRTT() {
|
||||
metricsUpdatedEvent.SmoothedRTT = pointer(h.rttStats.SmoothedRTT())
|
||||
h.lastMetrics.SmoothedRTT = pointer(h.rttStats.SmoothedRTT())
|
||||
updated = true
|
||||
}
|
||||
if h.lastMetrics.LatestRTT == nil || *h.lastMetrics.LatestRTT != h.rttStats.LatestRTT() {
|
||||
metricsUpdatedEvent.LatestRTT = pointer(h.rttStats.LatestRTT())
|
||||
h.lastMetrics.LatestRTT = pointer(h.rttStats.LatestRTT())
|
||||
updated = true
|
||||
}
|
||||
if h.lastMetrics.RTTVariance == nil || *h.lastMetrics.RTTVariance != h.rttStats.MeanDeviation() {
|
||||
metricsUpdatedEvent.RTTVariance = pointer(h.rttStats.MeanDeviation())
|
||||
h.lastMetrics.RTTVariance = pointer(h.rttStats.MeanDeviation())
|
||||
updated = true
|
||||
}
|
||||
}
|
||||
if h.lastMetrics.CongestionWindow == nil || *h.lastMetrics.CongestionWindow != int(h.congestion.GetCongestionWindow()) {
|
||||
metricsUpdatedEvent.CongestionWindow = pointer(int(h.congestion.GetCongestionWindow()))
|
||||
h.lastMetrics.CongestionWindow = pointer(int(h.congestion.GetCongestionWindow()))
|
||||
|
||||
@@ -115,6 +115,10 @@ func (r *RTTStats) UpdateRTT(sendDelta, ackDelay time.Duration) {
|
||||
}
|
||||
}
|
||||
|
||||
func (r *RTTStats) HasMeasurement() bool {
|
||||
return r.hasMeasurement
|
||||
}
|
||||
|
||||
// SetMaxAckDelay sets the max_ack_delay
|
||||
func (r *RTTStats) SetMaxAckDelay(mad time.Duration) {
|
||||
r.maxAckDelay.Store(int64(mad))
|
||||
|
||||
@@ -10,14 +10,17 @@ import (
|
||||
|
||||
func TestRTTStatsDefaults(t *testing.T) {
|
||||
rttStats := NewRTTStats()
|
||||
require.False(t, rttStats.HasMeasurement())
|
||||
require.Equal(t, DefaultInitialRTT, rttStats.MinRTT())
|
||||
require.Equal(t, DefaultInitialRTT, rttStats.SmoothedRTT())
|
||||
}
|
||||
|
||||
func TestRTTStatsSmoothedRTT(t *testing.T) {
|
||||
rttStats := NewRTTStats()
|
||||
require.False(t, rttStats.HasMeasurement())
|
||||
// verify that ack_delay is ignored in the first measurement
|
||||
rttStats.UpdateRTT(300*time.Millisecond, 100*time.Millisecond)
|
||||
require.True(t, rttStats.HasMeasurement())
|
||||
require.Equal(t, 300*time.Millisecond, rttStats.LatestRTT())
|
||||
require.Equal(t, 300*time.Millisecond, rttStats.SmoothedRTT())
|
||||
// verify that smoothed RTT includes max ack delay if it's reasonable
|
||||
@@ -122,11 +125,13 @@ func TestRTTStatsResetForPathMigration(t *testing.T) {
|
||||
rttStats.SetMaxAckDelay(42 * time.Millisecond)
|
||||
rttStats.UpdateRTT(time.Second, 0)
|
||||
rttStats.UpdateRTT(10*time.Second, 0)
|
||||
require.True(t, rttStats.HasMeasurement())
|
||||
require.Equal(t, time.Second, rttStats.MinRTT())
|
||||
require.Equal(t, 10*time.Second, rttStats.LatestRTT())
|
||||
require.NotZero(t, rttStats.SmoothedRTT())
|
||||
|
||||
rttStats.ResetForPathMigration()
|
||||
require.False(t, rttStats.HasMeasurement())
|
||||
require.Equal(t, DefaultInitialRTT, rttStats.MinRTT())
|
||||
require.Equal(t, DefaultInitialRTT, rttStats.LatestRTT())
|
||||
require.Equal(t, DefaultInitialRTT, rttStats.SmoothedRTT())
|
||||
@@ -135,6 +140,7 @@ func TestRTTStatsResetForPathMigration(t *testing.T) {
|
||||
require.Equal(t, 42*time.Millisecond, rttStats.MaxAckDelay())
|
||||
|
||||
rttStats.UpdateRTT(10*time.Millisecond, 0)
|
||||
require.True(t, rttStats.HasMeasurement())
|
||||
require.Equal(t, 10*time.Millisecond, rttStats.SmoothedRTT())
|
||||
require.Equal(t, 10*time.Millisecond, rttStats.LatestRTT())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user