in rd-agent/src/slices.rs [383:440]
fn fix_overrides(dseqs: &DisableSeqKnobs, cfg: &Config) -> Result<()> {
let seq = super::instance_seq();
let mut disable = String::new();
let mut enable = String::new();
if cfg.enforce.cpu {
if dseqs.cpu < seq {
enable += " +cpu";
} else {
disable += " -cpu";
}
}
if cfg.enforce.io {
enable += " +io";
}
if cfg.enforce.crit_mem_prot {
enable += " +memory";
}
if disable.len() > 0 {
let mut scs: Vec<String> = glob("/sys/fs/cgroup/**/cgroup.subtree_control")
.unwrap()
.filter_map(|x| x.ok())
.map(|x| x.to_str().unwrap().to_string())
.collect();
scs.sort_unstable_by_key(|x| -(x.len() as i64));
let mut nr_failed = 0;
for sc in &scs {
if let Err(e) = write_one_line(sc, &disable) {
if nr_failed == 0 {
warn!(
"resctl: Failed to write {:?} to {:?} ({:?})",
&disable, &sc, &e
);
}
nr_failed += 1;
}
}
if nr_failed > 1 {
warn!(
"resctl: Failed to write {:?} to {} files",
&disable, nr_failed
);
}
}
if enable.len() > 0 {
write_one_line("/sys/fs/cgroup/cgroup.subtree_control", &enable).context(format!(
"Writing {:?} to /sys/fs/cgroup/cgroup.subtree_control",
&enable
))?;
}
Ok(())
}