use anyhow::Result;
use ktstr::assert::AssertResult;
use ktstr::ktstr_test;
use ktstr::scenario::Ctx;
use ktstr::workload::{WorkType, WorkloadConfig, WorkloadHandle};
#[ktstr_test(
sockets = 1,
cores = 4,
threads = 2,
memory_mb = 2048,
max_gap_ms = 2000,
max_spread_pct = 80.0
)]
fn eevdf_spinlock_contention(ctx: &Ctx) -> Result<AssertResult> {
let total_cpus = ctx.topo.total_cpus();
let num_workers = total_cpus * 2;
let config = WorkloadConfig {
num_workers,
affinity: ktstr::workload::AffinityMode::None,
work_type: WorkType::Bursty {
burst_ms: 1,
sleep_ms: 0,
},
sched_policy: ktstr::workload::SchedPolicy::Normal,
};
let mut handle = WorkloadHandle::spawn(&config)?;
handle.start();
std::thread::sleep(ctx.duration);
let reports = handle.stop_and_collect();
let checks = ktstr::assert::Assert::default_checks()
.max_gap_ms(2000)
.max_spread_pct(80.0);
Ok(checks.assert_cgroup(&reports, None))
}