blob: 037b78af69f41ccf4d79663871ebb1a54d928781 [file] [log] [blame] [edit]
// Copyright 2024 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use std::path::PathBuf;
use std::time::Duration;
use anyhow::Result;
use log::error;
use crate::common::read_from_file;
const SCHED_BASE_SLICE_PATH: &str = "/sys/kernel/debug/sched/base_slice_ns";
const BASE_SLICE_MIN: Duration = Duration::from_millis(6);
pub fn init_cpu_config() -> Result<()> {
// EEVDF scheduler was added upstream in 6.6 to replace CFS. The scheudler
// is a virtual deadline based scheduler.
// base_slice_ns controls the minimum slice that a task will run for before
// being switched. Based on our testing, anything below 6ms will result in
// some performance regressions.
let base_slice_min = BASE_SLICE_MIN.as_nanos() as u64;
let base_slice_ns: u64 =
read_from_file(&PathBuf::from(SCHED_BASE_SLICE_PATH)).unwrap_or(base_slice_min);
if base_slice_ns < base_slice_min {
if let Err(e) = std::fs::write(SCHED_BASE_SLICE_PATH, base_slice_min.to_string().as_bytes())
{
error!("Failed to write {} {}\n", SCHED_BASE_SLICE_PATH, e);
};
}
Ok(())
}