perf(baseliner): bound the reselection channel to prevent memory buildup
Change the reselection channel from unbounded to a size of 1 and use non-blocking sends to avoid unnecessary queuing of reselection triggers.
This commit is contained in:
3 files changed
+5
-5
No files matched your search
+3
-3
@@ -122,9 +122,9 @@ impl Baseliner {
|
|||||||
reflector: Some(time_data.reflector),
|
reflector: Some(time_data.reflector),
|
||||||
tags: &[],
|
tags: &[],
|
||||||
});
|
});
|
||||||
// If reselection is disabled this would trigger an error
|
// The reselect channel is bounded to 1,
|
||||||
// so just ignore the result
|
// so we use try_send to avoid blocking if the channel is full
|
||||||
let _ = self.reselect_trigger.send(true);
|
let _ = self.reselect_trigger.try_send(true);
|
||||||
} else {
|
} else {
|
||||||
owd_baseline.down_ewma = owd_baseline.down_ewma * slow_factor
|
owd_baseline.down_ewma = owd_baseline.down_ewma * slow_factor
|
||||||
+ (1.0 - slow_factor) * time_data.down_time;
|
+ (1.0 - slow_factor) * time_data.down_time;
|
||||||
|
|||||||
+1
-1
@@ -265,7 +265,7 @@ fn run(config: Config) -> anyhow::Result<()> {
|
|||||||
|
|
||||||
let (baseliner_stats_tx, baseliner_stats_rx) = flume::unbounded();
|
let (baseliner_stats_tx, baseliner_stats_rx) = flume::unbounded();
|
||||||
let (error_tx, error_rx) = flume::unbounded::<anyhow::Error>();
|
let (error_tx, error_rx) = flume::unbounded::<anyhow::Error>();
|
||||||
let (reselect_tx, reselect_rx) = flume::unbounded();
|
let (reselect_tx, reselect_rx) = flume::bounded(1);
|
||||||
|
|
||||||
let dropped = Arc::new(AtomicU32::new(0));
|
let dropped = Arc::new(AtomicU32::new(0));
|
||||||
|
|
||||||
|
|||||||
@@ -308,7 +308,7 @@ impl<S: InterfaceStatsProvider, T: TrafficControlBackend> Ratecontroller<S, T> {
|
|||||||
state_dl.deltas.len(),
|
state_dl.deltas.len(),
|
||||||
state_ul.deltas.len()
|
state_ul.deltas.len()
|
||||||
);
|
);
|
||||||
let _ = self.reselect_trigger.send(true);
|
let _ = self.reselect_trigger.try_send(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
Reference in new issue
Block a user