diff --git a/src/libs/kata-types/src/config/agent.rs b/src/libs/kata-types/src/config/agent.rs index 7f1fae555a..ecb03fff34 100644 --- a/src/libs/kata-types/src/config/agent.rs +++ b/src/libs/kata-types/src/config/agent.rs @@ -18,6 +18,44 @@ use crate::eother; /// agent name of Kata agent. pub const AGENT_NAME_KATA: &str = "kata"; +#[derive(Default, Debug, Deserialize, Serialize, Clone)] +pub struct MemAgent { + #[serde(default, alias = "mem_agent_enable")] + pub enable: bool, + + #[serde(default)] + pub memcg_disable: Option, + #[serde(default)] + pub memcg_swap: Option, + #[serde(default)] + pub memcg_swappiness_max: Option, + #[serde(default)] + pub memcg_period_secs: Option, + #[serde(default)] + pub memcg_period_psi_percent_limit: Option, + #[serde(default)] + pub memcg_eviction_psi_percent_limit: Option, + #[serde(default)] + pub memcg_eviction_run_aging_count_min: Option, + + #[serde(default)] + pub compact_disable: Option, + #[serde(default)] + pub compact_period_secs: Option, + #[serde(default)] + pub compact_period_psi_percent_limit: Option, + #[serde(default)] + pub compact_psi_percent_limit: Option, + #[serde(default)] + pub compact_sec_max: Option, + #[serde(default)] + pub compact_order: Option, + #[serde(default)] + pub compact_threshold: Option, + #[serde(default)] + pub compact_force_times: Option, +} + /// Kata agent configuration information. #[derive(Debug, Deserialize, Serialize, Clone)] pub struct Agent { @@ -98,6 +136,10 @@ pub struct Agent { /// container pipe size #[serde(default)] pub container_pipe_size: u32, + + /// Memory agent configuration + #[serde(default)] + pub mem_agent: MemAgent, } impl std::default::Default for Agent { @@ -116,6 +158,7 @@ impl std::default::Default for Agent { health_check_request_timeout_ms: 90_000, kernel_modules: Default::default(), container_pipe_size: 0, + mem_agent: MemAgent::default(), } } } diff --git a/src/libs/kata-types/src/config/mod.rs b/src/libs/kata-types/src/config/mod.rs index a5928cd10c..d893c212aa 100644 --- a/src/libs/kata-types/src/config/mod.rs +++ b/src/libs/kata-types/src/config/mod.rs @@ -115,6 +115,14 @@ pub struct TomlConfig { pub runtime: Runtime, } +macro_rules! mem_agent_kv_insert { + ($ma_cfg:expr, $key:expr, $map:expr) => { + if let Some(n) = $ma_cfg { + $map.insert($key.to_string(), n.to_string()); + } + }; +} + impl TomlConfig { /// Load Kata configuration information from configuration files. /// @@ -204,6 +212,83 @@ impl TomlConfig { DEFAULT_AGENT_DBG_CONSOLE_PORT.to_string(), ); } + if cfg.mem_agent.enable { + kv.insert("psi".to_string(), "1".to_string()); + kv.insert("agent.mem_agent_enable".to_string(), "1".to_string()); + + mem_agent_kv_insert!( + cfg.mem_agent.memcg_disable, + "agent.mem_agent_memcg_disable", + kv + ); + mem_agent_kv_insert!(cfg.mem_agent.memcg_swap, "agent.mem_agent_memcg_swap", kv); + mem_agent_kv_insert!( + cfg.mem_agent.memcg_swappiness_max, + "agent.mem_agent_memcg_swappiness_max", + kv + ); + mem_agent_kv_insert!( + cfg.mem_agent.memcg_period_secs, + "agent.mem_agent_memcg_period_secs", + kv + ); + mem_agent_kv_insert!( + cfg.mem_agent.memcg_period_psi_percent_limit, + "agent.mem_agent_memcg_period_psi_percent_limit", + kv + ); + mem_agent_kv_insert!( + cfg.mem_agent.memcg_eviction_psi_percent_limit, + "agent.mem_agent_memcg_eviction_psi_percent_limit", + kv + ); + mem_agent_kv_insert!( + cfg.mem_agent.memcg_eviction_run_aging_count_min, + "agent.mem_agent_memcg_eviction_run_aging_count_min", + kv + ); + + mem_agent_kv_insert!( + cfg.mem_agent.compact_disable, + "agent.mem_agent_compact_disable", + kv + ); + mem_agent_kv_insert!( + cfg.mem_agent.compact_period_secs, + "agent.mem_agent_compact_period_secs", + kv + ); + mem_agent_kv_insert!( + cfg.mem_agent.compact_period_psi_percent_limit, + "agent.mem_agent_compact_period_psi_percent_limit", + kv + ); + mem_agent_kv_insert!( + cfg.mem_agent.compact_psi_percent_limit, + "agent.mem_agent_compact_psi_percent_limit", + kv + ); + mem_agent_kv_insert!( + cfg.mem_agent.compact_sec_max, + "agent.mem_agent_compact_sec_max", + kv + ); + mem_agent_kv_insert!( + cfg.mem_agent.compact_order, + "agent.mem_agent_compact_order", + kv + ); + mem_agent_kv_insert!( + cfg.mem_agent.compact_threshold, + "agent.mem_agent_compact_threshold", + kv + ); + mem_agent_kv_insert!( + cfg.mem_agent.compact_force_times, + "agent.mem_agent_compact_force_times", + kv + ); + } } Ok(kv) }