feat: new router and benchmark setup

This commit is contained in:
2026-04-16 14:23:53 +08:00
parent c86d931d8f
commit 996511f300
35 changed files with 1480 additions and 76 deletions

View File

@@ -123,6 +123,10 @@ enum Cmd {
/// routers are then run at that cluster size.
#[arg(long, default_value = "cache_score")]
auto_probe_router: String,
/// Maximum number of routers to simulate concurrently.
/// `0` means auto-detect from available CPU parallelism.
#[arg(long, default_value_t = 0)]
jobs: usize,
#[command(flatten)]
overrides: ConfigOverrides,
},
@@ -168,6 +172,7 @@ fn main() -> Result<()> {
auto_target_ttft_mean,
auto_candidates,
auto_probe_router,
jobs,
overrides,
} => cmd_ablate(
&config,
@@ -177,6 +182,7 @@ fn main() -> Result<()> {
auto_target_ttft_mean,
&auto_candidates,
&auto_probe_router,
jobs,
&overrides,
),
Cmd::Validate { config, overrides } => cmd_validate(&config, &overrides),
@@ -218,6 +224,7 @@ fn cmd_ablate(
auto_target_ttft_mean: f64,
auto_candidates: &str,
auto_probe_router: &str,
jobs: usize,
overrides: &ConfigOverrides,
) -> Result<()> {
let mut base = load(path, overrides)?;
@@ -254,12 +261,7 @@ fn cmd_ablate(
sorted.sort_unstable();
let probe_mode = RouterMode::parse(auto_probe_router)
.with_context(|| format!("parsing --auto-probe-router='{auto_probe_router}'"))?;
let chosen = auto_select_instances(
&base,
&sorted,
probe_mode,
auto_target_ttft_mean,
)?;
let chosen = auto_select_instances(&base, &sorted, probe_mode, auto_target_ttft_mean)?;
eprintln!(
"[ablate] auto-instances chose num_instances={} (target ttft_mean ≤ {:.3}s, probe_router={})",
chosen,
@@ -270,7 +272,7 @@ fn cmd_ablate(
}
eprintln!(
"[ablate] routers={} evict_policies={} num_instances={}",
"[ablate] routers={} evict_policies={} num_instances={} jobs={}",
modes
.iter()
.map(RouterMode::as_str)
@@ -282,8 +284,13 @@ fn cmd_ablate(
.collect::<Vec<_>>()
.join(","),
base.cluster.num_instances,
if jobs == 0 {
"auto".to_string()
} else {
jobs.to_string()
},
);
let all = driver::ablate_fixed_placement(&base, &modes, &policies)?;
let all = driver::ablate_fixed_placement_with_parallelism(&base, &modes, &policies, jobs)?;
let agg_path = std::path::Path::new(&base.sim.output_dir).join("ablation.json");
std::fs::create_dir_all(&base.sim.output_dir)?;
std::fs::write(&agg_path, serde_json::to_string_pretty(&all)?)?;
@@ -479,7 +486,9 @@ fn cmd_oracle(
eprintln!(
"[oracle] input_length filter [{}, {}] kept {}/{} requests",
cfg.sim.input_length_min.unwrap_or(0),
cfg.sim.input_length_max.map_or("".to_string(), |v| v.to_string()),
cfg.sim
.input_length_max
.map_or("".to_string(), |v| v.to_string()),
records.len(),
raw_count,
);