From ee1c23eb0260ae52e459f2626e6548991610e1d7 Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Thu, 27 Jul 2023 11:48:22 +0530 Subject: [PATCH] Move congestion controller channel observer params to config (#1910) --- pkg/config/config.go | 42 ++++++++++++++++++---- pkg/sfu/streamallocator/channelobserver.go | 26 ++++++-------- pkg/sfu/streamallocator/streamallocator.go | 42 ++++++++-------------- 3 files changed, 60 insertions(+), 50 deletions(-) diff --git a/pkg/config/config.go b/pkg/config/config.go index f13cd49e4..9de991d08 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -123,13 +123,25 @@ type CongestionControlProbeConfig struct { DurationIncreaseFactor float64 `yaml:"duration_increase_factor,omitempty"` } +type CongestionControlChannelObserverConfig struct { + EstimateRequiredSamples int `yaml:"estimate_required_samples,omitmpety"` + EstimateDownwardTrendThreshold float64 `yaml:"estimate_downward_trend_threshold,omitempty"` + EstimateCollapseThreshold time.Duration `yaml:"estimate_collapse_threshold,omitempty"` + EstimateValidityWindow time.Duration `yaml:"estimate_validity_window,omitempty"` + NackWindowMinDuration time.Duration `yaml:"nack_window_min_duration,omitempty"` + NackWindowMaxDuration time.Duration `yaml:"nack_window_max_duration,omitempty"` + NackRatioThreshold float64 `yaml:"nack_ratio_threshold,omitempty"` +} + type CongestionControlConfig struct { - Enabled bool `yaml:"enabled"` - AllowPause bool `yaml:"allow_pause"` - UseSendSideBWE bool `yaml:"send_side_bandwidth_estimation,omitempty"` - ProbeMode CongestionControlProbeMode `yaml:"padding_mode,omitempty"` - MinChannelCapacity int64 `yaml:"min_channel_capacity,omitempty"` - ProbeConfig CongestionControlProbeConfig `yaml:"probe_config,omitempty"` + Enabled bool `yaml:"enabled"` + AllowPause bool `yaml:"allow_pause"` + UseSendSideBWE bool `yaml:"send_side_bandwidth_estimation,omitempty"` + ProbeMode CongestionControlProbeMode `yaml:"padding_mode,omitempty"` + MinChannelCapacity int64 `yaml:"min_channel_capacity,omitempty"` + ProbeConfig CongestionControlProbeConfig `yaml:"probe_config,omitempty"` + ChannelObserverProbeConfig CongestionControlChannelObserverConfig `yaml:"channel_observer_probe_config,omitempty"` + ChannelObserverNonProbeConfig CongestionControlChannelObserverConfig `yaml:"channel_observer_non_probe_config,omitempty"` } type AudioConfig struct { @@ -303,6 +315,24 @@ var DefaultConfig = Config{ DurationOverflowFactor: 1.25, DurationIncreaseFactor: 1.5, }, + ChannelObserverProbeConfig: CongestionControlChannelObserverConfig{ + EstimateRequiredSamples: 3, + EstimateDownwardTrendThreshold: 0.0, + EstimateCollapseThreshold: 0, + EstimateValidityWindow: 10 * time.Second, + NackWindowMinDuration: 500 * time.Millisecond, + NackWindowMaxDuration: 1 * time.Second, + NackRatioThreshold: 0.04, + }, + ChannelObserverNonProbeConfig: CongestionControlChannelObserverConfig{ + EstimateRequiredSamples: 8, + EstimateDownwardTrendThreshold: -0.5, + EstimateCollapseThreshold: 500 * time.Millisecond, + EstimateValidityWindow: 10 * time.Second, + NackWindowMinDuration: 1 * time.Second, + NackWindowMaxDuration: 2 * time.Second, + NackRatioThreshold: 0.08, + }, }, }, Audio: AudioConfig{ diff --git a/pkg/sfu/streamallocator/channelobserver.go b/pkg/sfu/streamallocator/channelobserver.go index 94b888c57..9776f8c8a 100644 --- a/pkg/sfu/streamallocator/channelobserver.go +++ b/pkg/sfu/streamallocator/channelobserver.go @@ -2,8 +2,8 @@ package streamallocator import ( "fmt" - "time" + "github.com/livekit/livekit-server/pkg/config" "github.com/livekit/protocol/logger" ) @@ -56,14 +56,8 @@ func (c ChannelCongestionReason) String() string { // ------------------------------------------------ type ChannelObserverParams struct { - Name string - EstimateRequiredSamples int - EstimateDownwardTrendThreshold float64 - EstimateCollapseThreshold time.Duration - EstimateValidityWindow time.Duration - NackWindowMinDuration time.Duration - NackWindowMaxDuration time.Duration - NackRatioThreshold float64 + Name string + Config config.CongestionControlChannelObserverConfig } type ChannelObserver struct { @@ -81,17 +75,17 @@ func NewChannelObserver(params ChannelObserverParams, logger logger.Logger) *Cha estimateTrend: NewTrendDetector(TrendDetectorParams{ Name: params.Name + "-estimate", Logger: logger, - RequiredSamples: params.EstimateRequiredSamples, - DownwardTrendThreshold: params.EstimateDownwardTrendThreshold, - CollapseThreshold: params.EstimateCollapseThreshold, - ValidityWindow: params.EstimateValidityWindow, + RequiredSamples: params.Config.EstimateRequiredSamples, + DownwardTrendThreshold: params.Config.EstimateDownwardTrendThreshold, + CollapseThreshold: params.Config.EstimateCollapseThreshold, + ValidityWindow: params.Config.EstimateValidityWindow, }), nackTracker: NewNackTracker(NackTrackerParams{ Name: params.Name + "-nack", Logger: logger, - WindowMinDuration: params.NackWindowMinDuration, - WindowMaxDuration: params.NackWindowMaxDuration, - RatioThreshold: params.NackRatioThreshold, + WindowMinDuration: params.Config.NackWindowMinDuration, + WindowMaxDuration: params.Config.NackWindowMaxDuration, + RatioThreshold: params.Config.NackRatioThreshold, }), } } diff --git a/pkg/sfu/streamallocator/streamallocator.go b/pkg/sfu/streamallocator/streamallocator.go index 7a9302dac..30d7d8616 100644 --- a/pkg/sfu/streamallocator/streamallocator.go +++ b/pkg/sfu/streamallocator/streamallocator.go @@ -39,32 +39,6 @@ const ( // --------------------------------------------------------------------------- -var ( - ChannelObserverParamsProbe = ChannelObserverParams{ - Name: "probe", - EstimateRequiredSamples: 3, - EstimateDownwardTrendThreshold: 0.0, - EstimateCollapseThreshold: 0, - EstimateValidityWindow: 10 * time.Second, - NackWindowMinDuration: 500 * time.Millisecond, - NackWindowMaxDuration: 1 * time.Second, - NackRatioThreshold: 0.04, - } - - ChannelObserverParamsNonProbe = ChannelObserverParams{ - Name: "non-probe", - EstimateRequiredSamples: 8, - EstimateDownwardTrendThreshold: -0.5, - EstimateCollapseThreshold: 500 * time.Millisecond, - EstimateValidityWindow: 10 * time.Second, - NackWindowMinDuration: 1 * time.Second, - NackWindowMaxDuration: 2 * time.Second, - NackRatioThreshold: 0.08, - } -) - -// --------------------------------------------------------------------------- - type streamAllocatorState int const ( @@ -1193,11 +1167,23 @@ func (s *StreamAllocator) getNackDelta() (uint32, uint32) { } func (s *StreamAllocator) newChannelObserverProbe() *ChannelObserver { - return NewChannelObserver(ChannelObserverParamsProbe, s.params.Logger) + return NewChannelObserver( + ChannelObserverParams{ + Name: "probe", + Config: s.params.Config.ChannelObserverProbeConfig, + }, + s.params.Logger, + ) } func (s *StreamAllocator) newChannelObserverNonProbe() *ChannelObserver { - return NewChannelObserver(ChannelObserverParamsNonProbe, s.params.Logger) + return NewChannelObserver( + ChannelObserverParams{ + Name: "non-probe", + Config: s.params.Config.ChannelObserverNonProbeConfig, + }, + s.params.Logger, + ) } func (s *StreamAllocator) initProbe(probeGoalDeltaBps int64) {