pub struct Sizing {
pub since: u64,
pub until: u64,
pub margin: u32,
pub sample_interval: u64,
pub min_jobs: u32,
pub memory_max: Option<u64>,
pub admission: AdmissionPolicy,
pub profiles: Vec<ProfileSizing>,
pub auto: bool,
pub changes: Vec<SizingChange>,
pub auto_plan: Option<AutoPlan>,
}Expand description
GET /v1/sizing: what the job history says each configured profile needs.
Fields§
§since: u64The start of the history read: since, or the first runner recorded after it.
until: u64When it was computed.
margin: u32The percent added to a sampled peak, [sizing] margin: peaks are sampled every sample_interval
seconds, so a shorter spike between two samples goes unseen.
sample_interval: u64Seconds between two samples of a job’s container.
min_jobs: u32The fewest jobs a profile or job needs before its percentiles become advice, [sizing] min_jobs.
memory_max: Option<u64>The slice’s MemoryMax; None when it is unlimited.
admission: AdmissionPolicy[host] admission, which the advice budgets MemoryMax by.
profiles: Vec<ProfileSizing>Every configured profile, by name.
auto: boolWhether the daemon applies advice itself, [sizing] auto.
changes: Vec<SizingChange>The changes auto sizing made since since, oldest first.
auto_plan: Option<AutoPlan>Under auto sizing, what it does next and when. None while it is off.
Implementations§
Source§impl Sizing
impl Sizing
Sourcepub fn need(&self, peaks: &Peaks, advice: Advice) -> Need
pub fn need(&self, peaks: &Peaks, advice: Advice) -> Need
What peaks need: the advice’s memory, or with too few jobs for advice, what it would size for.
Sourcepub fn method_line(&self) -> String
pub fn method_line(&self) -> String
How the advice is made, as every client explains it: peaks are sampled every 2 s, so a shorter spike goes unseen: advice sizes for the largest + 15%, at least 1G for page cache, rounded up to 256M, once a profile ran 10 jobs.
Sourcepub fn method_parts(&self) -> Vec<String>
pub fn method_parts(&self) -> Vec<String>
Sizing::method_line in short parts for a heading, the sampling caveat first: peaks sampled every 2 s,
+15%, at least 1G, in 256M steps and advice after 10 jobs.
Sourcepub fn covered(&self) -> u64
pub fn covered(&self) -> u64
The history it was computed from: since to when it was computed, however long ago that was.
Sourcepub fn doctor_check(&self) -> Check
pub fn doctor_check(&self) -> Check
Doctor’s check of it: a warning while a profile needs more memory than its cap, else the profiles whose advice changes something, or that all fit.
Source§impl Sizing
impl Sizing
Sourcepub fn advice_line(&self, profile: &ProfileSizing) -> String
pub fn advice_line(&self, profile: &ProfileSizing) -> String
One line on what to do with a profile and why, as runnerctl sizing, the dashboard and runnerd doctor
say it, such as lower memory to 2.5G from 7G, its largest peak + 15%; 5 slots fit in the same 14G.
Under measured admission, when jobs wanted more slots, it adds that slots is not bought with caps there, or
with auto sizing on, that it adds them.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Sizing
impl<'de> Deserialize<'de> for Sizing
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for Sizing
impl StructuralPartialEq for Sizing
Auto Trait Implementations§
impl Freeze for Sizing
impl RefUnwindSafe for Sizing
impl Send for Sizing
impl Sync for Sizing
impl Unpin for Sizing
impl UnsafeUnpin for Sizing
impl UnwindSafe for Sizing
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<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.