From f5269067dbfda010d2d10e811ff951d0606ebc3e Mon Sep 17 00:00:00 2001 From: Ilya Zlobintsev Date: Sun, 19 Mar 2023 15:04:39 +0200 Subject: [PATCH] feat: add support for not cleaning up clocks table on shutdown (#133) --- lact-daemon/src/config.rs | 3 +++ lact-daemon/src/server/gpu_controller/mod.rs | 2 ++ lact-daemon/src/server/handler.rs | 11 +++++++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lact-daemon/src/config.rs b/lact-daemon/src/config.rs index a35d945..e23c4a8 100644 --- a/lact-daemon/src/config.rs +++ b/lact-daemon/src/config.rs @@ -20,6 +20,8 @@ pub struct Config { pub struct Daemon { pub log_level: String, pub admin_groups: Vec, + #[serde(default)] + pub disable_clocks_cleanup: bool, } impl Default for Daemon { @@ -27,6 +29,7 @@ impl Default for Daemon { Self { log_level: "info".to_owned(), admin_groups: DEFAULT_ADMIN_GROUPS.map(str::to_owned).to_vec(), + disable_clocks_cleanup: false, } } } diff --git a/lact-daemon/src/server/gpu_controller/mod.rs b/lact-daemon/src/server/gpu_controller/mod.rs index 1287daf..da11af6 100644 --- a/lact-daemon/src/server/gpu_controller/mod.rs +++ b/lact-daemon/src/server/gpu_controller/mod.rs @@ -441,6 +441,8 @@ impl GpuController { table.set_max_voltage(voltage)?; } + debug!("writing clocks commands: {:#?}", table.get_commands()?); + self.handle .set_clocks_table(&table) .context("Could not write clocks table")?; diff --git a/lact-daemon/src/server/handler.rs b/lact-daemon/src/server/handler.rs index 6ea7793..d2f241f 100644 --- a/lact-daemon/src/server/handler.rs +++ b/lact-daemon/src/server/handler.rs @@ -258,10 +258,17 @@ impl<'a> Handler { } pub async fn cleanup(self) { + let disable_clocks_cleanup = self + .config + .try_read() + .map(|config| config.daemon.disable_clocks_cleanup) + .unwrap_or(false); + for (id, controller) in self.gpu_controllers.iter() { - if controller.handle.get_clocks_table().is_ok() { + if !disable_clocks_cleanup && controller.handle.get_clocks_table().is_ok() { + debug!("resetting clocks table"); if let Err(err) = controller.handle.reset_clocks_table() { - error!("Could not reset the clocks table: {err}"); + error!("could not reset the clocks table: {err}"); } }