use super::*;
impl Lane {
pub(super) fn telemetry_index(&self) -> usize {
match self {
Lane::StartPrefills(_) => 0,
Lane::ContinuePrefills => 1,
Lane::Decode => 2,
}
}
}
impl SchedulerCore {
fn held_output_tokens(&self) -> u64 {
self.active
.iter()
.map(|a| a.output_tokens.len())
.chain(self.preempted.iter().map(|p| p.a.output_tokens.len()))
.chain(self.swapped.iter().map(|s| s.output_tokens.len()))
.sum::<usize>() as u64
}
fn accounted_tokens(&self) -> u64 {
self.held_output_tokens() + self.ctx.io.tel.finished_output_tokens()
}
pub(super) fn execute_lane_measured(&mut self, lane: Lane) -> LaneVerdict {
let index = lane.telemetry_index();
let before = self.ctx.io.tel.enabled().then(|| self.accounted_tokens());
self.ctx.io.tel.lane_begin(index);
let verdict = match lane {
Lane::StartPrefills(new_reqs) => self.start_prefills(new_reqs),
Lane::ContinuePrefills => self.continue_prefills(),
Lane::Decode => self.decode_lane(),
};
self.ctx.io.tel.lane_end(index);
if let Some(before) = before {
let produced = self.accounted_tokens().saturating_sub(before);
self.ctx.io.tel.tokens(produced);
}
verdict
}
}