From c077476e0b102325e147659293dd070388b025eb Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 10 Mar 2025 15:55:41 +0100 Subject: [PATCH] improved cpu load trigger --- cpu_governor_auto_adjust.xml | 4 ++- cpu_governor_auto_adjust/triggers/cpu_load.py | 25 +++++++++++++++---- pyproject.toml | 2 +- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/cpu_governor_auto_adjust.xml b/cpu_governor_auto_adjust.xml index f3ac9f6..8e82b3e 100644 --- a/cpu_governor_auto_adjust.xml +++ b/cpu_governor_auto_adjust.xml @@ -46,7 +46,9 @@ 5 performance - 0.01 + 0.3 + 0.2 + 0.1 diff --git a/cpu_governor_auto_adjust/triggers/cpu_load.py b/cpu_governor_auto_adjust/triggers/cpu_load.py index 09460e7..9b9b53e 100644 --- a/cpu_governor_auto_adjust/triggers/cpu_load.py +++ b/cpu_governor_auto_adjust/triggers/cpu_load.py @@ -13,22 +13,37 @@ class CpuLoadTrigger(Trigger): @cached_property def one_minute_load_threshold(self) -> float: return float(self.config.custom_config['oneMinuteLoadThreshold']) + + @cached_property + def five_minute_load_threshold(self) -> float: + return float(self.config.custom_config['fiveMinuteLoadThreshold']) + + @cached_property + def ten_minute_load_threshold(self) -> float: + return float(self.config.custom_config['tenMinuteLoadThreshold']) + + @cached_property + def threshold(self) -> tuple[float, float, float]: + return self.one_minute_load_threshold, self.five_minute_load_threshold, self.ten_minute_load_threshold @property - def current_load(self) -> float: - _current_load = getloadavg()[0] + def current_load(self) -> tuple[float, float, float]: + _current_load = getloadavg() self.log.debug("current load: %s", _current_load) return _current_load + def current_load_average_over_threshold(self) -> bool: + return any(load >= threshold for load, threshold in zip(self.current_load, self.threshold)) + def run(self) -> None: current_active = self.active current_time = datetime.now() - new_active = self.current_load >= self.one_minute_load_threshold + new_active = self.current_load_average_over_threshold() if not current_active and new_active: self.log.info( "activating trigger, load: %s, threshold: %s, governor: %s", - self.current_load, self.one_minute_load_threshold, self.governor.name + self.current_load, self.threshold, self.governor.name ) self.timestamp_last_governor_change = current_time @@ -39,7 +54,7 @@ class CpuLoadTrigger(Trigger): self.log.info( "deactivating trigger, load: %s, threshold: %s, governor: %s", - self.current_load, self.one_minute_load_threshold, self.governor.name + self.current_load, self.threshold, self.governor.name ) self.active = new_active diff --git a/pyproject.toml b/pyproject.toml index 553b818..7d2641d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "cpu_governor_auto_adjust" -version = "0.1.39" +version = "0.1.41" description = "This application has been developed to automatically change cpu governor based on certain triggers." authors = [ { name = "Martin Reurekas", email = "martin@semrks.nl" }