#[non_exhaustive]pub struct CpuLimits {
pub max_quota_us: Option<u64>,
pub max_period_us: u64,
pub weight: Option<u32>,
}Expand description
CPU controller limits (cpu.max + cpu.weight) for a cgroup. All
fields default to “inherit from parent” — the framework only writes
each knob when its corresponding field is Some.
Set via CgroupDef::cpu_quota_pct / CgroupDef::cpu_quota /
CgroupDef::cpu_weight (clear a cap with
CgroupDef::cpu_unlimited). The kernel allows quota and weight
to coexist (per Documentation/admin-guide/cgroup-v2.rst,
“CPU Interface Files”): weight biases relative CPU share inside
period, quota enforces an absolute ceiling. Surfacing both as
independent options lets a test author express “this cgroup gets
at most 50% of one CPU AND should lose to a heavier sibling under
contention” in a single declaration.
Validation runs at apply_setup time — any violation surfaces as
anyhow::bail! so a misconfigured CgroupDef fails before any
worker spawns.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.max_quota_us: Option<u64>cpu.max quota and period in microseconds. quota = None
means “max” (no upper bound). quota = Some(q) allows the
cgroup q µs of CPU time per period. q > period is
legal: it lets the cgroup use multiple CPUs concurrently
(e.g. quota 200_000 / period 100_000 = up to 2 CPUs of
throughput).
period defaults to 100_000 µs (100 ms) when omitted via
the CgroupDef::cpu_quota_pct convenience builder. Set
via CgroupDef::cpu_quota when a non-default period is
needed (e.g. tighter control loops with 10 ms periods for
latency-sensitive scheduler tests).
max_period_us: u64cpu.max period component. Required whenever max_quota_us
is Some; ignored when max_quota_us is None (the
framework writes "max <period>" so the period stays
recorded for diagnostics).
weight: Option<u32>cpu.weight relative-share weight (range 1..=10000, default
100). None leaves the kernel default in place. Larger
values get a larger share when the parent cgroup’s CPU is
contended.
Trait Implementations§
Source§impl Default for CpuLimits
impl Default for CpuLimits
Source§fn default() -> Self
fn default() -> Self
cpu.max quota off, period 100 ms (the kernel default for
cpu.max’s second column), cpu.weight unset. Matches the
initial state used by the four CgroupDef::cpu_* builders;
changing the default period only edits here.
The derived Default would produce max_period_us: 0 which
apply_setup rejects (kernel requires period > 0). Manual
impl avoids that footgun for ..Default::default() callers.
impl Eq for CpuLimits
impl StructuralPartialEq for CpuLimits
Auto Trait Implementations§
impl Freeze for CpuLimits
impl RefUnwindSafe for CpuLimits
impl Send for CpuLimits
impl Sync for CpuLimits
impl Unpin for CpuLimits
impl UnwindSafe for CpuLimits
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more