mirror of
https://github.com/containers/youki
synced 2024-05-21 15:06:07 +02:00
75 lines
1.9 KiB
Rust
75 lines
1.9 KiB
Rust
use anyhow::Result;
|
|
use std::path::Path;
|
|
|
|
use crate::common;
|
|
use oci_spec::{LinuxCpu, LinuxResources};
|
|
|
|
use super::controller::Controller;
|
|
|
|
const CGROUP_CPUSET_CPUS: &str = "cpuset.cpus";
|
|
const CGROUP_CPUSET_MEMS: &str = "cpuset.mems";
|
|
|
|
pub struct CpuSet {}
|
|
|
|
impl Controller for CpuSet {
|
|
fn apply(linux_resources: &LinuxResources, cgroup_path: &Path) -> Result<()> {
|
|
if let Some(cpuset) = &linux_resources.cpu {
|
|
Self::apply(cgroup_path, cpuset)?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
impl CpuSet {
|
|
fn apply(path: &Path, cpuset: &LinuxCpu) -> Result<()> {
|
|
if let Some(cpus) = &cpuset.cpus {
|
|
common::write_cgroup_file_str(path.join(CGROUP_CPUSET_CPUS), cpus)?;
|
|
}
|
|
|
|
if let Some(mems) = &cpuset.mems {
|
|
common::write_cgroup_file_str(path.join(CGROUP_CPUSET_MEMS), mems)?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use std::fs;
|
|
|
|
use super::*;
|
|
use crate::test::{setup, LinuxCpuBuilder};
|
|
|
|
#[test]
|
|
fn test_set_cpus() {
|
|
// arrange
|
|
let (tmp, cpus) = setup("test_set_cpus", CGROUP_CPUSET_CPUS);
|
|
let cpuset = LinuxCpuBuilder::new().with_cpus("1-3".to_owned()).build();
|
|
|
|
// act
|
|
CpuSet::apply(&tmp, &cpuset).expect("apply cpuset");
|
|
|
|
// assert
|
|
let content = fs::read_to_string(&cpus)
|
|
.unwrap_or_else(|_| panic!("read {} file content", CGROUP_CPUSET_CPUS));
|
|
assert_eq!(content, "1-3");
|
|
}
|
|
|
|
#[test]
|
|
fn test_set_mems() {
|
|
// arrange
|
|
let (tmp, mems) = setup("test_set_mems", CGROUP_CPUSET_MEMS);
|
|
let cpuset = LinuxCpuBuilder::new().with_mems("1-3".to_owned()).build();
|
|
|
|
// act
|
|
CpuSet::apply(&tmp, &cpuset).expect("apply cpuset");
|
|
|
|
// assert
|
|
let content = fs::read_to_string(&mems)
|
|
.unwrap_or_else(|_| panic!("read {} file content", CGROUP_CPUSET_MEMS));
|
|
assert_eq!(content, "1-3");
|
|
}
|
|
}
|