mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-08-08 11:27:29 +00:00
agent: add support for MemAgentMemcgSet and MemAgentCompactSet
Add MemAgentMemcgSet and MemAgentCompactSet to agent API to set the config of mem-agent memcg and compact. Fixes: #10625 Signed-off-by: Hui Zhu <teawater@antgroup.com>
This commit is contained in:
parent
f84ad54d97
commit
692ded8f96
@ -428,7 +428,8 @@ async fn start_sandbox(
|
|||||||
init_attestation_components(logger, config).await?;
|
init_attestation_components(logger, config).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut _oma = None;
|
let mut oma = None;
|
||||||
|
let mut _ort = None;
|
||||||
if let Some(c) = &config.mem_agent {
|
if let Some(c) = &config.mem_agent {
|
||||||
let (ma, rt) =
|
let (ma, rt) =
|
||||||
mem_agent::agent::MemAgent::new(c.memcg_config.clone(), c.compact_config.clone())
|
mem_agent::agent::MemAgent::new(c.memcg_config.clone(), c.compact_config.clone())
|
||||||
@ -437,11 +438,13 @@ async fn start_sandbox(
|
|||||||
e
|
e
|
||||||
})
|
})
|
||||||
.context("start mem-agent")?;
|
.context("start mem-agent")?;
|
||||||
_oma = Some((ma, rt));
|
oma = Some(ma);
|
||||||
|
_ort = Some(rt);
|
||||||
}
|
}
|
||||||
|
|
||||||
// vsock:///dev/vsock, port
|
// vsock:///dev/vsock, port
|
||||||
let mut server = rpc::start(sandbox.clone(), config.server_addr.as_str(), init_mode).await?;
|
let mut server =
|
||||||
|
rpc::start(sandbox.clone(), config.server_addr.as_str(), init_mode, oma).await?;
|
||||||
|
|
||||||
server.start().await?;
|
server.start().await?;
|
||||||
|
|
||||||
|
@ -181,6 +181,7 @@ impl<T> OptionToTtrpcResult<T> for Option<T> {
|
|||||||
pub struct AgentService {
|
pub struct AgentService {
|
||||||
sandbox: Arc<Mutex<Sandbox>>,
|
sandbox: Arc<Mutex<Sandbox>>,
|
||||||
init_mode: bool,
|
init_mode: bool,
|
||||||
|
oma: Option<mem_agent::agent::MemAgent>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AgentService {
|
impl AgentService {
|
||||||
@ -698,6 +699,37 @@ impl AgentService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn mem_agent_memcgconfig_to_memcg_optionconfig(
|
||||||
|
mc: &protocols::agent::MemAgentMemcgConfig,
|
||||||
|
) -> mem_agent::memcg::OptionConfig {
|
||||||
|
mem_agent::memcg::OptionConfig {
|
||||||
|
disabled: mc.disabled,
|
||||||
|
swap: mc.swap,
|
||||||
|
swappiness_max: mc.swappiness_max.map(|x| x as u8),
|
||||||
|
period_secs: mc.period_secs,
|
||||||
|
period_psi_percent_limit: mc.period_psi_percent_limit.map(|x| x as u8),
|
||||||
|
eviction_psi_percent_limit: mc.eviction_psi_percent_limit.map(|x| x as u8),
|
||||||
|
eviction_run_aging_count_min: mc.eviction_run_aging_count_min,
|
||||||
|
..Default::default()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn mem_agent_compactconfig_to_compact_optionconfig(
|
||||||
|
cc: &protocols::agent::MemAgentCompactConfig,
|
||||||
|
) -> mem_agent::compact::OptionConfig {
|
||||||
|
mem_agent::compact::OptionConfig {
|
||||||
|
disabled: cc.disabled,
|
||||||
|
period_secs: cc.period_secs,
|
||||||
|
period_psi_percent_limit: cc.period_psi_percent_limit.map(|x| x as u8),
|
||||||
|
compact_psi_percent_limit: cc.compact_psi_percent_limit.map(|x| x as u8),
|
||||||
|
compact_sec_max: cc.compact_sec_max,
|
||||||
|
compact_order: cc.compact_order.map(|x| x as u8),
|
||||||
|
compact_threshold: cc.compact_threshold,
|
||||||
|
compact_force_times: cc.compact_force_times,
|
||||||
|
..Default::default()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl agent_ttrpc::AgentService for AgentService {
|
impl agent_ttrpc::AgentService for AgentService {
|
||||||
async fn create_container(
|
async fn create_container(
|
||||||
@ -1513,6 +1545,54 @@ impl agent_ttrpc::AgentService for AgentService {
|
|||||||
|
|
||||||
Ok(Empty::new())
|
Ok(Empty::new())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn mem_agent_memcg_set(
|
||||||
|
&self,
|
||||||
|
_ctx: &::ttrpc::r#async::TtrpcContext,
|
||||||
|
config: protocols::agent::MemAgentMemcgConfig,
|
||||||
|
) -> ::ttrpc::Result<Empty> {
|
||||||
|
if let Some(ma) = &self.oma {
|
||||||
|
ma.memcg_set_config_async(mem_agent_memcgconfig_to_memcg_optionconfig(&config))
|
||||||
|
.await
|
||||||
|
.map_err(|e| {
|
||||||
|
let estr = format!("ma.memcg_set_config_async fail: {}", e);
|
||||||
|
error!(sl(), "{}", estr);
|
||||||
|
ttrpc::Error::RpcStatus(ttrpc::get_status(ttrpc::Code::INTERNAL, estr))
|
||||||
|
})?;
|
||||||
|
} else {
|
||||||
|
let estr = "mem-agent is disabled";
|
||||||
|
error!(sl(), "{}", estr);
|
||||||
|
return Err(ttrpc::Error::RpcStatus(ttrpc::get_status(
|
||||||
|
ttrpc::Code::INTERNAL,
|
||||||
|
estr,
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
Ok(Empty::new())
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn mem_agent_compact_set(
|
||||||
|
&self,
|
||||||
|
_ctx: &::ttrpc::r#async::TtrpcContext,
|
||||||
|
config: protocols::agent::MemAgentCompactConfig,
|
||||||
|
) -> ::ttrpc::Result<Empty> {
|
||||||
|
if let Some(ma) = &self.oma {
|
||||||
|
ma.compact_set_config_async(mem_agent_compactconfig_to_compact_optionconfig(&config))
|
||||||
|
.await
|
||||||
|
.map_err(|e| {
|
||||||
|
let estr = format!("ma.compact_set_config_async fail: {}", e);
|
||||||
|
error!(sl(), "{}", estr);
|
||||||
|
ttrpc::Error::RpcStatus(ttrpc::get_status(ttrpc::Code::INTERNAL, estr))
|
||||||
|
})?;
|
||||||
|
} else {
|
||||||
|
let estr = "mem-agent is disabled";
|
||||||
|
error!(sl(), "{}", estr);
|
||||||
|
return Err(ttrpc::Error::RpcStatus(ttrpc::get_status(
|
||||||
|
ttrpc::Code::INTERNAL,
|
||||||
|
estr,
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
Ok(Empty::new())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
@ -1656,10 +1736,12 @@ pub async fn start(
|
|||||||
s: Arc<Mutex<Sandbox>>,
|
s: Arc<Mutex<Sandbox>>,
|
||||||
server_address: &str,
|
server_address: &str,
|
||||||
init_mode: bool,
|
init_mode: bool,
|
||||||
|
oma: Option<mem_agent::agent::MemAgent>,
|
||||||
) -> Result<TtrpcServer> {
|
) -> Result<TtrpcServer> {
|
||||||
let agent_service = Box::new(AgentService {
|
let agent_service = Box::new(AgentService {
|
||||||
sandbox: s,
|
sandbox: s,
|
||||||
init_mode,
|
init_mode,
|
||||||
|
oma,
|
||||||
}) as Box<dyn agent_ttrpc::AgentService + Send + Sync>;
|
}) as Box<dyn agent_ttrpc::AgentService + Send + Sync>;
|
||||||
let aservice = agent_ttrpc::create_agent_service(Arc::new(agent_service));
|
let aservice = agent_ttrpc::create_agent_service(Arc::new(agent_service));
|
||||||
|
|
||||||
@ -2294,6 +2376,7 @@ mod tests {
|
|||||||
let agent_service = Box::new(AgentService {
|
let agent_service = Box::new(AgentService {
|
||||||
sandbox: Arc::new(Mutex::new(sandbox)),
|
sandbox: Arc::new(Mutex::new(sandbox)),
|
||||||
init_mode: true,
|
init_mode: true,
|
||||||
|
oma: None,
|
||||||
});
|
});
|
||||||
|
|
||||||
let req = protocols::agent::UpdateInterfaceRequest::default();
|
let req = protocols::agent::UpdateInterfaceRequest::default();
|
||||||
@ -2311,6 +2394,7 @@ mod tests {
|
|||||||
let agent_service = Box::new(AgentService {
|
let agent_service = Box::new(AgentService {
|
||||||
sandbox: Arc::new(Mutex::new(sandbox)),
|
sandbox: Arc::new(Mutex::new(sandbox)),
|
||||||
init_mode: true,
|
init_mode: true,
|
||||||
|
oma: None,
|
||||||
});
|
});
|
||||||
|
|
||||||
let req = protocols::agent::UpdateRoutesRequest::default();
|
let req = protocols::agent::UpdateRoutesRequest::default();
|
||||||
@ -2328,6 +2412,7 @@ mod tests {
|
|||||||
let agent_service = Box::new(AgentService {
|
let agent_service = Box::new(AgentService {
|
||||||
sandbox: Arc::new(Mutex::new(sandbox)),
|
sandbox: Arc::new(Mutex::new(sandbox)),
|
||||||
init_mode: true,
|
init_mode: true,
|
||||||
|
oma: None,
|
||||||
});
|
});
|
||||||
|
|
||||||
let req = protocols::agent::AddARPNeighborsRequest::default();
|
let req = protocols::agent::AddARPNeighborsRequest::default();
|
||||||
@ -2466,6 +2551,7 @@ mod tests {
|
|||||||
let agent_service = Box::new(AgentService {
|
let agent_service = Box::new(AgentService {
|
||||||
sandbox: Arc::new(Mutex::new(sandbox)),
|
sandbox: Arc::new(Mutex::new(sandbox)),
|
||||||
init_mode: true,
|
init_mode: true,
|
||||||
|
oma: None,
|
||||||
});
|
});
|
||||||
|
|
||||||
let result = agent_service
|
let result = agent_service
|
||||||
@ -2956,6 +3042,7 @@ OtherField:other
|
|||||||
let agent_service = Box::new(AgentService {
|
let agent_service = Box::new(AgentService {
|
||||||
sandbox: Arc::new(Mutex::new(sandbox)),
|
sandbox: Arc::new(Mutex::new(sandbox)),
|
||||||
init_mode: true,
|
init_mode: true,
|
||||||
|
oma: None,
|
||||||
});
|
});
|
||||||
|
|
||||||
let ctx = mk_ttrpc_context();
|
let ctx = mk_ttrpc_context();
|
||||||
|
Loading…
Reference in New Issue
Block a user