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() {
|
func (h *sentPacketHandler) qlogMetricsUpdated() {
|
||||||
var metricsUpdatedEvent qlog.MetricsUpdated
|
var metricsUpdatedEvent qlog.MetricsUpdated
|
||||||
var updated bool
|
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()) {
|
if h.lastMetrics.CongestionWindow == nil || *h.lastMetrics.CongestionWindow != int(h.congestion.GetCongestionWindow()) {
|
||||||
metricsUpdatedEvent.CongestionWindow = pointer(int(h.congestion.GetCongestionWindow()))
|
metricsUpdatedEvent.CongestionWindow = pointer(int(h.congestion.GetCongestionWindow()))
|
||||||
h.lastMetrics.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
|
// SetMaxAckDelay sets the max_ack_delay
|
||||||
func (r *RTTStats) SetMaxAckDelay(mad time.Duration) {
|
func (r *RTTStats) SetMaxAckDelay(mad time.Duration) {
|
||||||
r.maxAckDelay.Store(int64(mad))
|
r.maxAckDelay.Store(int64(mad))
|
||||||
|
|||||||
@@ -10,14 +10,17 @@ import (
|
|||||||
|
|
||||||
func TestRTTStatsDefaults(t *testing.T) {
|
func TestRTTStatsDefaults(t *testing.T) {
|
||||||
rttStats := NewRTTStats()
|
rttStats := NewRTTStats()
|
||||||
|
require.False(t, rttStats.HasMeasurement())
|
||||||
require.Equal(t, DefaultInitialRTT, rttStats.MinRTT())
|
require.Equal(t, DefaultInitialRTT, rttStats.MinRTT())
|
||||||
require.Equal(t, DefaultInitialRTT, rttStats.SmoothedRTT())
|
require.Equal(t, DefaultInitialRTT, rttStats.SmoothedRTT())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRTTStatsSmoothedRTT(t *testing.T) {
|
func TestRTTStatsSmoothedRTT(t *testing.T) {
|
||||||
rttStats := NewRTTStats()
|
rttStats := NewRTTStats()
|
||||||
|
require.False(t, rttStats.HasMeasurement())
|
||||||
// verify that ack_delay is ignored in the first measurement
|
// verify that ack_delay is ignored in the first measurement
|
||||||
rttStats.UpdateRTT(300*time.Millisecond, 100*time.Millisecond)
|
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.LatestRTT())
|
||||||
require.Equal(t, 300*time.Millisecond, rttStats.SmoothedRTT())
|
require.Equal(t, 300*time.Millisecond, rttStats.SmoothedRTT())
|
||||||
// verify that smoothed RTT includes max ack delay if it's reasonable
|
// 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.SetMaxAckDelay(42 * time.Millisecond)
|
||||||
rttStats.UpdateRTT(time.Second, 0)
|
rttStats.UpdateRTT(time.Second, 0)
|
||||||
rttStats.UpdateRTT(10*time.Second, 0)
|
rttStats.UpdateRTT(10*time.Second, 0)
|
||||||
|
require.True(t, rttStats.HasMeasurement())
|
||||||
require.Equal(t, time.Second, rttStats.MinRTT())
|
require.Equal(t, time.Second, rttStats.MinRTT())
|
||||||
require.Equal(t, 10*time.Second, rttStats.LatestRTT())
|
require.Equal(t, 10*time.Second, rttStats.LatestRTT())
|
||||||
require.NotZero(t, rttStats.SmoothedRTT())
|
require.NotZero(t, rttStats.SmoothedRTT())
|
||||||
|
|
||||||
rttStats.ResetForPathMigration()
|
rttStats.ResetForPathMigration()
|
||||||
|
require.False(t, rttStats.HasMeasurement())
|
||||||
require.Equal(t, DefaultInitialRTT, rttStats.MinRTT())
|
require.Equal(t, DefaultInitialRTT, rttStats.MinRTT())
|
||||||
require.Equal(t, DefaultInitialRTT, rttStats.LatestRTT())
|
require.Equal(t, DefaultInitialRTT, rttStats.LatestRTT())
|
||||||
require.Equal(t, DefaultInitialRTT, rttStats.SmoothedRTT())
|
require.Equal(t, DefaultInitialRTT, rttStats.SmoothedRTT())
|
||||||
@@ -135,6 +140,7 @@ func TestRTTStatsResetForPathMigration(t *testing.T) {
|
|||||||
require.Equal(t, 42*time.Millisecond, rttStats.MaxAckDelay())
|
require.Equal(t, 42*time.Millisecond, rttStats.MaxAckDelay())
|
||||||
|
|
||||||
rttStats.UpdateRTT(10*time.Millisecond, 0)
|
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.SmoothedRTT())
|
||||||
require.Equal(t, 10*time.Millisecond, rttStats.LatestRTT())
|
require.Equal(t, 10*time.Millisecond, rttStats.LatestRTT())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user