From 40aa3cde50fb992bc43cca4cc6b7ffbc7d7a03d9 Mon Sep 17 00:00:00 2001 From: mii Date: Wed, 30 Oct 2024 12:01:45 +0900 Subject: [PATCH] add cpuset.cpus --- src/bin/izoli.rs | 3 ++- src/cgroup/cgroup.rs | 17 +++++++++++++++++ src/cgroup/cgroup_option.rs | 3 ++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/bin/izoli.rs b/src/bin/izoli.rs index 7d1c1fa..5103fc3 100644 --- a/src/bin/izoli.rs +++ b/src/bin/izoli.rs @@ -30,7 +30,8 @@ fn main() { period: 100000, }), memory_max: Some(CGroupLimitValue::Value(1024 * 1024 * 1024)), - pids_max: Some(CGroupLimitValue::Value(3)), + pids_max: Some(CGroupLimitValue::Value(10)), + cpus: Some(vec![0]), ..Default::default() }), new_net: false, diff --git a/src/cgroup/cgroup.rs b/src/cgroup/cgroup.rs index c15ac2b..35c05fb 100644 --- a/src/cgroup/cgroup.rs +++ b/src/cgroup/cgroup.rs @@ -63,6 +63,11 @@ impl CGroup { self.set_pids_max(pids_max)?; } + if let Some(cpus) = &option.cpus { + info!("setting cpuset.cpus"); + self.set_cpuset_cpus(cpus)?; + } + Ok(()) } @@ -249,6 +254,18 @@ impl CGroup { self.write("pids.max", &to_write) } + // cpuset read + + pub fn get_cpuset_cpus(&self) -> Result, std::io::Error> { + self.get_u32_list("cpuset.cpus") + } + + // cpuset write + + pub fn set_cpuset_cpus(&self, cpus: &Vec) -> Result<(), std::io::Error> { + self.write_list("cpuset.cpus", cpus.clone()) + } + fn write_value(&self, name: &str, value: T) -> Result<(), std::io::Error> where T: fmt::Display, diff --git a/src/cgroup/cgroup_option.rs b/src/cgroup/cgroup_option.rs index 666944c..88c470e 100644 --- a/src/cgroup/cgroup_option.rs +++ b/src/cgroup/cgroup_option.rs @@ -1,8 +1,9 @@ use super::{cpu_limit::CpuLimit, limit_value::CGroupLimitValue}; -#[derive(Debug, Clone, Copy, Default)] +#[derive(Debug, Clone, Default)] pub struct CGroupOption { pub cpu_max: Option, + pub cpus: Option>, pub memory_max: Option>, pub pids_max: Option>, }