diff --git a/asap-query-engine/Cargo.toml b/asap-query-engine/Cargo.toml index ed413a18..82f306d9 100644 --- a/asap-query-engine/Cargo.toml +++ b/asap-query-engine/Cargo.toml @@ -81,6 +81,10 @@ path = "src/bin/test_e2e_precompute.rs" name = "bench_precompute_sketch" path = "src/bin/bench_precompute_sketch.rs" +[[bin]] +name = "bench_ingest_sender" +path = "src/bin/bench_ingest_sender.rs" + [[bin]] name = "e2e_quickstart_resource_test" path = "src/bin/e2e_quickstart_resource_test.rs" diff --git a/asap-query-engine/src/bin/bench_ingest_sender.rs b/asap-query-engine/src/bin/bench_ingest_sender.rs new file mode 100644 index 00000000..ae8250c2 --- /dev/null +++ b/asap-query-engine/src/bin/bench_ingest_sender.rs @@ -0,0 +1,318 @@ +//! Remote-write load generator for throughput benchmarks of the standalone +//! `precompute_engine` binary. Run it as a separate process on separate cores +//! so its own CPU never counts against the engine. +//! +//! Series `i` carries labels `l0..l4` = the base-10 digits of `i` (`l4` takes +//! the remainder), so grouping by a label prefix gives a known fan-in. Each +//! pass sends one sample per series and advances event time by `step_ms`, so +//! window closes per sample are fixed regardless of send rate. +//! +//! Prints one JSON line: acked samples/sec and engine CPU cores over the +//! measurement window (after warmup). + +use clap::Parser; +use prost::Message; +use query_engine_rust::drivers::ingest::prometheus_remote_write::{ + Label, Sample, TimeSeries, WriteRequest, +}; +use std::ops::Range; +use std::sync::atomic::{AtomicBool, AtomicU64, Ordering}; +use std::sync::Arc; +use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH}; +use tokio::sync::mpsc; + +const METRIC_NAME: &str = "bench_metric"; +const NUM_LABELS: usize = 5; +const LABEL_RADIX: usize = 10; +/// Sample values are uniform in `[0, VALUE_RANGE)`. +const VALUE_RANGE: f64 = 10_000.0; +/// Bodies an encoder thread may build ahead of its sender. +const ENCODE_AHEAD: usize = 8; +/// Max passes a sender may lead the slowest one. Groups span senders and the +/// engine keeps one watermark per group, so `MAX_PASS_SKEW * step_ms` must +/// stay below the engine's `--allowed_lateness_ms`, or the lagging sender's +/// samples are dropped as late. +const MAX_PASS_SKEW: u64 = 2; +const SKEW_POLL_INTERVAL: Duration = Duration::from_micros(200); + +#[derive(Parser, Debug)] +#[command(name = "bench_ingest_sender")] +struct Args { + /// PID of the precompute_engine process to measure. + #[arg(long)] + engine_pid: u32, + + #[arg(long)] + port: u16, + + #[arg(long)] + num_series: usize, + + /// Target samples/sec across all senders; 0 sends open-loop (saturation). + #[arg(long)] + target_rate: f64, + + /// Concurrent senders (capped at --num-series). Each owns a disjoint slice + /// of the series and keeps one request in flight (preserves per-series + /// order). The engine handles a request mostly serially, so this must be + /// at least the engine's core count to saturate it, even if that makes + /// requests smaller at low cardinality. + #[arg(long)] + concurrency: usize, + + /// Max samples per remote-write request (Prometheus' default + /// `max_samples_per_send` is 2000). Smaller when a sender's slice is. + #[arg(long)] + samples_per_request: usize, + + /// Event-time advance per pass (the simulated scrape interval). + #[arg(long)] + step_ms: i64, + + #[arg(long)] + warmup_secs: u64, + + #[arg(long)] + measure_secs: u64, +} + +type Body = (u64, u64, Vec); // (pass, samples, snappy-compressed body) + +fn make_series(i: usize) -> TimeSeries { + let mut labels = vec![Label { + name: "__name__".into(), + value: METRIC_NAME.into(), + }]; + let mut rest = i; + for l in 0..NUM_LABELS { + let digit = if l + 1 == NUM_LABELS { + rest + } else { + rest % LABEL_RADIX + }; + rest /= LABEL_RADIX; + labels.push(Label { + name: format!("l{l}"), + value: format!("v{digit}"), + }); + } + TimeSeries { + labels, + samples: vec![Sample::default()], + } +} + +/// splitmix64; seeded per encoder so senders don't emit identical values. +fn next_value(state: &mut u64) -> f64 { + *state = state.wrapping_add(0x9E37_79B9_7F4A_7C15); + let mut z = *state; + z = (z ^ (z >> 30)).wrapping_mul(0xBF58_476D_1CE4_E5B9); + z = (z ^ (z >> 27)).wrapping_mul(0x94D0_49BB_1331_11EB); + z ^= z >> 31; + (z >> 11) as f64 / (1u64 << 53) as f64 * VALUE_RANGE +} + +/// Builds request bodies pass after pass until the sender hangs up. Labels are +/// built once; each pass only rewrites the sample. +fn encode_loop( + series: Range, + samples_per_request: usize, + start_ms: i64, + step_ms: i64, + tx: mpsc::Sender, +) { + let ids: Vec = series.clone().collect(); + let mut requests: Vec = ids + .chunks(samples_per_request) + .map(|chunk| WriteRequest { + timeseries: chunk.iter().map(|&i| make_series(i)).collect(), + }) + .collect(); + let mut rng = series.start as u64; + let mut encoder = snap::raw::Encoder::new(); + for pass in 0u64.. { + let timestamp = start_ms + pass as i64 * step_ms; + for request in &mut requests { + for ts in &mut request.timeseries { + ts.samples[0] = Sample { + value: next_value(&mut rng), + timestamp, + }; + } + let body = encoder + .compress_vec(&request.encode_to_vec()) + .expect("snappy compression should succeed"); + if tx + .blocking_send((pass, request.timeseries.len() as u64, body)) + .is_err() + { + return; + } + } + } +} + +struct Shared { + client: reqwest::Client, + url: String, + /// Pass each sender is currently on, for the skew bound. + passes: Vec, + acked_samples: AtomicU64, + stop: AtomicBool, +} + +async fn send_loop( + shared: Arc, + idx: usize, + rate: f64, + mut rx: mpsc::Receiver, +) -> Result<(), String> { + let start = Instant::now(); + let mut sent_samples = 0u64; + while let Some((pass, samples, body)) = rx.recv().await { + shared.passes[idx].store(pass, Ordering::Relaxed); + loop { + if shared.stop.load(Ordering::Relaxed) { + return Ok(()); + } + let slowest = shared + .passes + .iter() + .map(|p| p.load(Ordering::Relaxed)) + .min() + .expect("concurrency >= 1"); + if pass <= slowest + MAX_PASS_SKEW { + break; + } + tokio::time::sleep(SKEW_POLL_INTERVAL).await; + } + if rate > 0.0 { + let due = start + Duration::from_secs_f64(sent_samples as f64 / rate); + tokio::time::sleep_until(due.into()).await; + } + let response = shared + .client + .post(&shared.url) + .header("Content-Type", "application/x-protobuf") + .header("Content-Encoding", "snappy") + .body(body) + .send() + .await + .map_err(|e| format!("sender {idx}: request failed: {e}"))?; + if response.status() != reqwest::StatusCode::NO_CONTENT { + return Err(format!("sender {idx}: HTTP {}", response.status())); + } + sent_samples += samples; + shared.acked_samples.fetch_add(samples, Ordering::Relaxed); + } + Ok(()) +} + +fn clock_ticks_per_sec() -> u64 { + let out = std::process::Command::new("getconf") + .arg("CLK_TCK") + .output() + .expect("getconf CLK_TCK should run"); + String::from_utf8(out.stdout) + .expect("getconf output is ASCII") + .trim() + .parse() + .expect("CLK_TCK is an integer") +} + +/// utime + stime of the whole process, in clock ticks. +fn process_cpu_ticks(pid: u32) -> u64 { + let stat = std::fs::read_to_string(format!("/proc/{pid}/stat")) + .unwrap_or_else(|e| panic!("pid {pid} not readable: {e}")); + // Fields after the parenthesised comm; utime/stime are fields 14/15. + let fields: Vec<&str> = stat[stat.rfind(')').expect("stat has comm") + 2..] + .split_whitespace() + .collect(); + let field = |i: usize| -> u64 { fields[i].parse().expect("stat field is an integer") }; + field(11) + field(12) +} + +fn engine_peak_rss_mb(pid: u32) -> f64 { + let status = std::fs::read_to_string(format!("/proc/{pid}/status")) + .unwrap_or_else(|e| panic!("engine pid {pid} not readable: {e}")); + let kb: f64 = status + .lines() + .find_map(|l| l.strip_prefix("VmHWM:")) + .expect("status has VmHWM") + .trim() + .trim_end_matches("kB") + .trim() + .parse() + .expect("VmHWM is a number"); + kb / 1024.0 +} + +#[tokio::main] +async fn main() { + let args = Args::parse(); + assert!(args.num_series > 0 && args.concurrency > 0 && args.samples_per_request > 0); + let concurrency = args.concurrency.min(args.num_series); + let ticks_per_sec = clock_ticks_per_sec(); + let start_ms = SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("clock after epoch") + .as_millis() as i64; + + let shared = Arc::new(Shared { + client: reqwest::Client::new(), + url: format!("http://127.0.0.1:{}/api/v1/write", args.port), + passes: (0..concurrency).map(|_| AtomicU64::new(0)).collect(), + acked_samples: AtomicU64::new(0), + stop: AtomicBool::new(false), + }); + + let mut senders = Vec::with_capacity(concurrency); + for idx in 0..concurrency { + let series = idx * args.num_series / concurrency..(idx + 1) * args.num_series / concurrency; + let rate = args.target_rate * series.len() as f64 / args.num_series as f64; + let (tx, rx) = mpsc::channel(ENCODE_AHEAD); + let step_ms = args.step_ms; + let samples_per_request = args.samples_per_request; + std::thread::spawn(move || encode_loop(series, samples_per_request, start_ms, step_ms, tx)); + senders.push(tokio::spawn(send_loop(shared.clone(), idx, rate, rx))); + } + + tokio::time::sleep(Duration::from_secs(args.warmup_secs)).await; + let acked_0 = shared.acked_samples.load(Ordering::Relaxed); + let ticks_0 = process_cpu_ticks(args.engine_pid); + let sender_ticks_0 = process_cpu_ticks(std::process::id()); + let t0 = Instant::now(); + assert!(acked_0 > 0, "engine acked no samples during warmup"); + + tokio::time::sleep(Duration::from_secs(args.measure_secs)).await; + let acked_1 = shared.acked_samples.load(Ordering::Relaxed); + let ticks_1 = process_cpu_ticks(args.engine_pid); + let sender_ticks_1 = process_cpu_ticks(std::process::id()); + let elapsed = t0.elapsed().as_secs_f64(); + let cores = |ticks: u64| ticks as f64 / ticks_per_sec as f64 / elapsed; + + shared.stop.store(true, Ordering::Relaxed); + for sender in senders { + if let Err(e) = sender.await.expect("sender task panicked") { + panic!("{e}"); + } + } + + println!( + "{}", + serde_json::json!({ + "num_series": args.num_series, + "concurrency": concurrency, + "target_rate": args.target_rate, + "achieved_rate": (acked_1 - acked_0) as f64 / elapsed, + "engine_cpu_cores": cores(ticks_1 - ticks_0), + // Near the sender's core count means the sender, not the engine, + // capped an open-loop run. + "sender_cpu_cores": cores(sender_ticks_1 - sender_ticks_0), + "engine_peak_rss_mb": engine_peak_rss_mb(args.engine_pid), + "measure_secs": elapsed, + }) + ); + // Encoder threads may be parked on a full channel; don't wait for them. + std::process::exit(0); +} diff --git a/asap-query-engine/src/bin/precompute_engine.rs b/asap-query-engine/src/bin/precompute_engine.rs index 8f32d080..af52286c 100644 --- a/asap-query-engine/src/bin/precompute_engine.rs +++ b/asap-query-engine/src/bin/precompute_engine.rs @@ -72,6 +72,11 @@ struct Args { #[arg(long, default_value_t = 5000)] wall_clock_grace_period_ms: i64, + /// Windows the store keeps per aggregation. Without it (and with no + /// inference config to derive it from) the store grows without bound. + #[arg(long)] + num_aggregates_to_retain: Option, + // --- CSV file ingest (alternative to HTTP) --- /// Path to a local CSV file to ingest instead of listening for HTTP writes #[arg(long)] @@ -121,7 +126,13 @@ async fn main() -> Result<(), Box> { let args = Args::parse(); info!("Loading streaming config from: {}", args.streaming_config); - let streaming_config = Arc::new(StreamingConfig::from_yaml_file(&args.streaming_config)?); + let mut streaming_config = StreamingConfig::from_yaml_file(&args.streaming_config)?; + if let Some(retain) = args.num_aggregates_to_retain { + for config in streaming_config.aggregation_configs.values_mut() { + config.num_aggregates_to_retain = Some(retain); + } + } + let streaming_config = Arc::new(streaming_config); info!( "Loaded {} aggregation configs", diff --git a/asap-tools/experiments/microbench/precompute_throughput/HANDOFF.md b/asap-tools/experiments/microbench/precompute_throughput/HANDOFF.md new file mode 100644 index 00000000..1074a283 --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/HANDOFF.md @@ -0,0 +1,141 @@ +# Precompute-engine throughput microbenchmark: how to run + +Measures throughput (samples/s) vs engine CPU of the standalone +`precompute_engine` for several StreamingConfigs and input cardinalities. +No Prometheus involved: a dedicated load generator speaks remote-write +directly to the engine. + +## Pieces + +| File | Role | +|---|---| +| `asap-query-engine/src/bin/bench_ingest_sender.rs` | Load generator (separate process). Pre-encodes remote-write bodies on its own threads, 16 senders each owning a disjoint slice of series with one request in flight, optional rate limit. Prints one JSON line: acked samples/s, engine CPU cores, sender CPU cores, engine peak RSS. | +| `asap-query-engine/src/bin/precompute_engine.rs` | Engine under test. Benchmark relies on `--num-aggregates-to-retain` (added for this) and `--wall-clock-grace-period-ms`. | +| `configs/{kll,ddsketch,cms_heap,hydra_kll}.yaml` | The four pipelines (10s tumbling windows). | +| `sweep.py` | Runs one experiment: per point, starts a fresh engine + sender, appends a JSON line to `--out`, engine log to `results/logs/`. | +| `plot.py` | One figure per experiment. `main` is sized for one column of a two-column paper. | + +Experiments in `sweep.py`: + +- `main`: 4 pipelines (+ `raw`, see caveats) x {1K, 10K, 100K, 1M} series, 8 cores. Open-loop saturation run, then 10/25/50/75/90% of it. 120 points, ~1.5 h. +- `fanin`: KLL at 100K series, grouped by all labels / 2 labels / none. 3 points. +- `window`: KLL and DDSketch at 100K, tumbling 10s vs sliding 60s/1s. 4 points. +- `scaling`: KLL and HydraKLL at 1M, 1/2/4/8/14 cores (workers = cores). 10 points. + +Each point = 15s warmup + 30s measurement + startup, ~50s. + +## Where it ran + +- Node: `milindsr@node5.scratch3.cloudmigration-PG0.clemson.cloudlab.us` + (2x 14-core Xeon E5-2683 v3, 256 GB). Socket 0 = even CPUs, socket 1 = odd; + hyperthread sibling of CPU n is n+28. +- Code there: `/scratch/sketch_db_for_prometheus/code` (plain rsync copy, not a + git checkout; no `ASAPQuery/` subdir). Cargo is at `~/.cargo/bin/cargo` (not on + the non-login PATH). +- Results there: `.../asap-tools/experiments/microbench/precompute_throughput/results/`. + Copied locally to the same path in this repo. + +## Steps + +1. Sync only the benchmark files (the rest of the remote tree matched local; + check with `rsync -anci` before overwriting anything else): + + ```bash + H=milindsr@node5.scratch3.cloudmigration-PG0.clemson.cloudlab.us + R=/scratch/sketch_db_for_prometheus/code + rsync -avR asap-query-engine/Cargo.toml \ + asap-query-engine/src/bin/precompute_engine.rs \ + asap-query-engine/src/bin/bench_ingest_sender.rs \ + asap-tools/experiments/microbench/precompute_throughput/{sweep.py,plot.py,configs} \ + $H:$R/ + ``` + +2. Build on the node: + + ```bash + ssh $H "cd $R/asap-query-engine && ~/.cargo/bin/cargo build --release --bin precompute_engine --bin bench_ingest_sender" + ``` + +3. Run in tmux so it survives disconnects (engine on socket 0, one hyperthread + per physical core; sender on socket 1): + + ```bash + ssh $H "cd $R/asap-tools/experiments/microbench/precompute_throughput && mkdir -p results && \ + tmux new-session -d -s pcbench 'for e in fanin window scaling main; do \ + python3 -u sweep.py --bin-dir ../../../../target/release \ + --engine-cpus \$(seq -s, 0 2 26) --sender-cpus 1-55:2 \ + --experiment \$e --out results/\$e.jsonl > results/\$e.out 2>&1; \ + echo EXIT=\$? >> results/\$e.out; done; sleep 86400'" + ``` + + Run `fanin` alone first as a smoke test (~3 min): it fails loudly if a + config is rejected. Progress: `tail results/.out`. `--out` appends, so + move old `.jsonl` files aside before re-running an experiment. + +4. Plot locally after copying results back: + + ```bash + grep -v '"label": "raw"' results/main.jsonl > results/main_noraw.jsonl + python3 plot.py --input results/main_noraw.jsonl --experiment main --out results/main.pdf + python3 plot.py --input results/fanin.jsonl --experiment fanin --out results/fanin.png + python3 plot.py --input results/window.jsonl --experiment window --out results/window.png + python3 plot.py --input results/scaling.jsonl --experiment scaling --out results/scaling.png + ``` + +## Settings that matter, and why (each fixed a real problem) + +- **Engine pinned to N cores for N workers** (`--engine-cpus`, first N used). + `--num-workers` alone doesn't bound CPU: decode/routing run on the async + runtime across every allowed CPU (4 workers used ~16 cores unpinned). +- **`NUM_AGGREGATES_TO_RETAIN = 1`.** The store keeps retain x 4 windows per + key (`per_key.rs` `max_epochs`). At 10, KLL at 100K series hit 34 GB; 1M + series would exceed the node's RAM. The standalone binary otherwise retains + without bound. +- **`--wall-clock-grace-period-ms 0`.** The engine's wall-clock fallback + force-closes panes idle for window+grace of wall time. With per-series + groups at low rates, one pass over 1M series can exceed that, silently + dropping samples that the sender still counts as acked. +- **16 senders always, 2000 samples/request max.** The engine handles each + request mostly serially, so in-flight requests must exceed engine cores. With + 1 sender at 1K series, measured throughput was 0.13 M/s instead of 1.40 M/s. + More than 16 didn't help at 100K (16 vs 50 senders: same 0.73 M/s). +- **Sender lockstep (`MAX_PASS_SKEW = 2`).** Groups span senders and the engine + keeps one watermark per group, so a sender running ahead would make others' + samples late. Skew x step (2s) must stay below `--allowed-lateness-ms` + (5000). +- **Event time advances 1s per pass over all series, independent of wall + clock**, so window closes per sample are constant across send rates. + +## Sanity checks to look at in results + +- `sender_cpu_cores` should be well below the sender's 28 threads; if near it, + the sender is the bottleneck. +- Rate-limited points should hit their target (`achieved_rate` ≈ + `target_rate`). +- `engine_peak_rss_mb` vs node RAM at 1M series (KLL peaked ~11.5 GB). + +## Caveats / known issues + +- **`raw` is not an overhead floor.** `--pass-raw-samples` stores every + sample individually and is ~7x slower than KLL. It's excluded from the main + plot; a `Sum` pipeline would be a real floor. Consider removing `raw` from + `main_experiment` to save ~25 min. +- **Single run per point.** CPU at low load is noisy (curves zigzag at + 1K/10K). Median of 3 runs would fix it (~3x time). +- **Per-series sketches leave cores idle** (KLL/DDSketch saturate at ~5 of 8 + cores at 100K+ series; KLL stops scaling past 8 cores). Not profiled. + Suspect: the store has one RwLock per aggregation id + (`stores/simple_map_store/per_key.rs`), and per-series grouping emits one + output per series per window. Confirm with a discard-output sink or an + off-CPU profile. +- **HydraKLL at 1K series is slow** because saturating a tiny series set makes + event time race, so expensive window emits dominate. Benchmark artifact. +- **HydraKLL scaling drops at 14 cores**: only 10 groups, so at most 10 + workers have work and hashing can stack groups on one worker. +- When killing runs over ssh, don't `pkill -f bench_ingest_sender` inside an + ssh command line that contains that string: it kills the ssh session itself. + +## Superseded results (kept for reference, don't plot) + +`fanin_retain10.*` (retention 10, unpinned), `fanin_28threads.*` (unpinned), +`main_aborted.*` (before the 16-sender fix). diff --git a/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml b/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml new file mode 100644 index 00000000..7661cd5b --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml @@ -0,0 +1,20 @@ +# P5: keyed top-k. 10 groups (l0); each sketch keys on l1..l4. +aggregations: +- aggregationId: 1 + aggregationType: CountMinSketchWithHeap + aggregationSubType: sum + parameters: + depth: 3 + width: 1024 + heapsize: 20 + labels: + grouping: [l0] + aggregated: [l1, l2, l3, l4] + rollup: [] + metric: bench_metric + spatialFilter: '' + windowType: tumbling + windowSizeMs: 10000 + slideIntervalMs: 10000 +metrics: + bench_metric: [l0, l1, l2, l3, l4] diff --git a/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml b/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml new file mode 100644 index 00000000..2c757e1a --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml @@ -0,0 +1,18 @@ +# P4: per-series quantile sketch (DDSketch alternative to P3). +aggregations: +- aggregationId: 1 + aggregationType: DDSketch + aggregationSubType: '' + parameters: + alpha: 0.01 + labels: + grouping: [l0, l1, l2, l3, l4] + aggregated: [] + rollup: [] + metric: bench_metric + spatialFilter: '' + windowType: tumbling + windowSizeMs: 10000 + slideIntervalMs: 10000 +metrics: + bench_metric: [l0, l1, l2, l3, l4] diff --git a/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml b/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml new file mode 100644 index 00000000..1e6513d2 --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml @@ -0,0 +1,21 @@ +# P6: keyed quantiles (KLL per CMS cell). 10 groups (l0); keys on l1..l4. +# Params are the planner defaults (asap-planner-rs/src/planner/sketch.rs). +aggregations: +- aggregationId: 1 + aggregationType: HydraKLL + aggregationSubType: '' + parameters: + depth: 3 + width: 1024 + K: 20 + labels: + grouping: [l0] + aggregated: [l1, l2, l3, l4] + rollup: [] + metric: bench_metric + spatialFilter: '' + windowType: tumbling + windowSizeMs: 10000 + slideIntervalMs: 10000 +metrics: + bench_metric: [l0, l1, l2, l3, l4] diff --git a/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml b/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml new file mode 100644 index 00000000..58ee3bcb --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml @@ -0,0 +1,18 @@ +# P3: per-series quantile sketch. +aggregations: +- aggregationId: 1 + aggregationType: DatasketchesKLL + aggregationSubType: '' + parameters: + K: 200 + labels: + grouping: [l0, l1, l2, l3, l4] + aggregated: [] + rollup: [] + metric: bench_metric + spatialFilter: '' + windowType: tumbling + windowSizeMs: 10000 + slideIntervalMs: 10000 +metrics: + bench_metric: [l0, l1, l2, l3, l4] diff --git a/asap-tools/experiments/microbench/precompute_throughput/plot.py b/asap-tools/experiments/microbench/precompute_throughput/plot.py new file mode 100644 index 00000000..e513c824 --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/plot.py @@ -0,0 +1,138 @@ +"""Plot sweep.py results. + + python plot.py --input results/main.jsonl --experiment main --out main.pdf +""" + +import argparse +import json +from collections import defaultdict + +import matplotlib.pyplot as plt + +# Fixed per pipeline (color follows the entity, not its rank). Validated +# colorblind-safe; low-contrast slots are backed by markers + legend. +STYLE = { + "kll": ("#2a78d6", "o", "KLL"), + "ddsketch": ("#eb6834", "s", "DDSketch"), + "cms_heap": ("#1baf7a", "^", "CMS+Heap"), + "hydra_kll": ("#eda100", "D", "HydraKLL"), + "raw": ("#8a8a85", "x", "No sketch (raw)"), +} +MSAMPLES = 1e6 +COLUMN_WIDTH_IN = 3.4 # one column of a typical two-column paper + + +def load(path): + with open(path) as f: + return [json.loads(line) for line in f if line.strip()] + + +def style(label): + """Variant labels (e.g. kll_sliding) inherit their base pipeline's style.""" + base = max((k for k in STYLE if label.startswith(k)), key=len) + return STYLE[base] + + +def series_title(n): + return f"{n // 1_000_000}M series" if n >= 1_000_000 else f"{n // 1_000}K series" + + +def plot_main(rows, out): + """2x2 grid sized for one column of a two-column paper.""" + by_series = defaultdict(lambda: defaultdict(list)) + for r in rows: + by_series[r["num_series"]][r["label"]].append(r) + plt.rcParams.update({"font.size": 8, "axes.titlesize": 8, "legend.fontsize": 8}) + fig, axes = plt.subplots( + 2, 2, figsize=(COLUMN_WIDTH_IN, 3.2), sharex=True, sharey=True + ) + for ax, series in zip(axes.flat, sorted(by_series)): + for label, pts in by_series[series].items(): + # Offered-load order; the open-loop saturation run (target 0) is last. + pts.sort(key=lambda r: r["target_rate"] or float("inf")) + color, marker, name = style(label) + ax.plot( + [r["engine_cpu_cores"] for r in pts], + [r["achieved_rate"] / MSAMPLES for r in pts], + color=color, marker=marker, linewidth=1.5, markersize=3.5, label=name, + ) # fmt: skip + ax.set_title(series_title(series), pad=3) + ymax = max(r["achieved_rate"] for r in rows) / MSAMPLES + max_cores = max(r["engine_cpu_cores"] for r in rows) + axes[0][0].set_xlim(0, max_cores * 1.05) + axes[0][0].set_xticks(range(0, int(max_cores) + 1, 2)) + axes[0][0].set_ylim(0, ymax * 1.08) + fig.supxlabel("CPU cores", fontsize=8) + fig.supylabel("Throughput (M samples/s)", fontsize=8) + handles, names = axes[0][0].get_legend_handles_labels() + fig.legend(handles, names, loc="upper center", ncol=2, frameon=False, + handlelength=1.5, columnspacing=1.0, bbox_to_anchor=(0.5, 1.06)) # fmt: skip + finish(fig, axes.flat, out) + + +def plot_bars(rows, out): + rows = sorted(rows, key=lambda r: r["label"]) + fig, ax = plt.subplots(figsize=(5, 0.45 * len(rows) + 1)) + ys = range(len(rows)) + ax.barh( + ys, + [r["achieved_rate"] / MSAMPLES for r in rows], + color=[style(r["label"])[0] for r in rows], + ) + ax.set_yticks(list(ys), [r["label"] for r in rows]) + for y, r in zip(ys, rows): + ax.annotate( + f" {r['engine_cpu_cores']:.1f} cores", + (r["achieved_rate"] / MSAMPLES, y), + va="center", + fontsize=8, + ) + ax.set_xlabel("Saturation throughput (M samples/s)") + ax.margins(x=0.25, y=0.1) # room for the cores annotations + finish(fig, [ax], out) + + +def plot_scaling(rows, out): + by_label = defaultdict(list) + for r in rows: + by_label[r["label"]].append(r) + fig, ax = plt.subplots(figsize=(4, 3)) + for label, pts in by_label.items(): + pts.sort(key=lambda r: r["workers"]) + color, marker, name = style(label) + ax.plot( + [r["workers"] for r in pts], [r["achieved_rate"] / MSAMPLES for r in pts], + color=color, marker=marker, linewidth=2, markersize=6, label=name, + ) # fmt: skip + ax.set_xscale("log", base=2) + ax.set_xticks([r["workers"] for r in rows], [str(r["workers"]) for r in rows]) + ax.set_xlabel("Engine workers") + ax.set_ylabel("Saturation throughput (M samples/s)") + ax.set_ylim(bottom=0) + ax.legend(frameon=False) + finish(fig, [ax], out) + + +def finish(fig, axes, out): + for ax in axes: + ax.grid(alpha=0.3, linewidth=0.5) + ax.spines[["top", "right"]].set_visible(False) + fig.tight_layout(rect=(0, 0, 1, 0.9) if fig.legends else None) + fig.savefig(out, bbox_inches="tight", dpi=300) + print(f"wrote {out}") + + +PLOTS = { + "main": plot_main, + "fanin": plot_bars, + "window": plot_bars, + "scaling": plot_scaling, +} + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--input", required=True) + parser.add_argument("--experiment", required=True, choices=PLOTS) + parser.add_argument("--out", required=True) + args = parser.parse_args() + PLOTS[args.experiment](load(args.input), args.out) diff --git a/asap-tools/experiments/microbench/precompute_throughput/results/fanin.jsonl b/asap-tools/experiments/microbench/precompute_throughput/results/fanin.jsonl new file mode 100644 index 00000000..b1d844dd --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/results/fanin.jsonl @@ -0,0 +1,3 @@ +{"achieved_rate": 724664.2618134102, "concurrency": 16, "engine_cpu_cores": 5.013361771717589, "engine_peak_rss_mb": 1236.45703125, "measure_secs": 30.001824494, "num_series": 100000, "sender_cpu_cores": 0.7302889197415888, "target_rate": 0.0, "label": "kll_fanin_1to1", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/results/configs/kll_fanin_1to1.yaml"} +{"achieved_rate": 2975635.9641726334, "concurrency": 16, "engine_cpu_cores": 7.572355263400521, "engine_peak_rss_mb": 139.35546875, "measure_secs": 30.001233711, "num_series": 100000, "sender_cpu_cores": 3.296864420736621, "target_rate": 0.0, "label": "kll_fanin_100groups", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/results/configs/kll_fanin_100groups.yaml"} +{"achieved_rate": 3747938.791700137, "concurrency": 16, "engine_cpu_cores": 8.000024807309957, "engine_peak_rss_mb": 38.8125, "measure_secs": 30.001156969, "num_series": 100000, "sender_cpu_cores": 3.745855538708774, "target_rate": 0.0, "label": "kll_fanin_1group", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/results/configs/kll_fanin_1group.yaml"} diff --git a/asap-tools/experiments/microbench/precompute_throughput/results/fanin.out b/asap-tools/experiments/microbench/precompute_throughput/results/fanin.out new file mode 100644 index 00000000..334442a5 --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/results/fanin.out @@ -0,0 +1,7 @@ +[kll_fanin_1to1] series=100000 workers=8 rate=0 + achieved=724664/s cpu=5.01 cores sender_cpu=0.73 cores rss=1236MB +[kll_fanin_100groups] series=100000 workers=8 rate=0 + achieved=2975636/s cpu=7.57 cores sender_cpu=3.30 cores rss=139MB +[kll_fanin_1group] series=100000 workers=8 rate=0 + achieved=3747939/s cpu=8.00 cores sender_cpu=3.75 cores rss=39MB +EXIT=0 diff --git a/asap-tools/experiments/microbench/precompute_throughput/results/fanin.png b/asap-tools/experiments/microbench/precompute_throughput/results/fanin.png new file mode 100644 index 00000000..03c21dbb Binary files /dev/null and b/asap-tools/experiments/microbench/precompute_throughput/results/fanin.png differ diff --git a/asap-tools/experiments/microbench/precompute_throughput/results/main.jsonl b/asap-tools/experiments/microbench/precompute_throughput/results/main.jsonl new file mode 100644 index 00000000..8edf0499 --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/results/main.jsonl @@ -0,0 +1,120 @@ +{"achieved_rate": 1401062.3630118137, "concurrency": 16, "engine_cpu_cores": 7.082756822752075, "engine_peak_rss_mb": 40.9765625, "measure_secs": 30.001030011, "num_series": 1000, "sender_cpu_cores": 4.025528455380338, "target_rate": 0.0, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 140093.48978548293, "concurrency": 16, "engine_cpu_cores": 1.398601672947624, "engine_peak_rss_mb": 23.47265625, "measure_secs": 30.001394115, "num_series": 1000, "sender_cpu_cores": 0.4039812267904004, "target_rate": 140106.23630118137, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 350281.1904955484, "concurrency": 16, "engine_cpu_cores": 3.4441483884199275, "engine_peak_rss_mb": 25.21484375, "measure_secs": 30.001610949, "num_series": 1000, "sender_cpu_cores": 1.000946250887936, "target_rate": 350265.59075295343, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 700507.99704564, "concurrency": 16, "engine_cpu_cores": 5.419169821806134, "engine_peak_rss_mb": 25.37109375, "measure_secs": 30.000905184, "num_series": 1000, "sender_cpu_cores": 1.9712738544815769, "target_rate": 700531.1815059069, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 1050766.547262899, "concurrency": 16, "engine_cpu_cores": 5.1894499253119575, "engine_peak_rss_mb": 27.55078125, "measure_secs": 30.001252973, "num_series": 1000, "sender_cpu_cores": 3.0218737891244274, "target_rate": 1050796.7722588603, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 1260933.8494316489, "concurrency": 16, "engine_cpu_cores": 6.116153781406773, "engine_peak_rss_mb": 42.1171875, "measure_secs": 30.00088071, "num_series": 1000, "sender_cpu_cores": 3.565895316011208, "target_rate": 1260956.1267106324, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 1239313.2185562507, "concurrency": 16, "engine_cpu_cores": 6.20845151422808, "engine_peak_rss_mb": 37.20703125, "measure_secs": 30.001039643, "num_series": 1000, "sender_cpu_cores": 3.5305443164771733, "target_rate": 0.0, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 123915.11136071631, "concurrency": 16, "engine_cpu_cores": 1.2552966416819884, "engine_peak_rss_mb": 18.734375, "measure_secs": 30.000876884, "num_series": 1000, "sender_cpu_cores": 0.3603228012900238, "target_rate": 123931.32185562508, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 309862.141839113, "concurrency": 16, "engine_cpu_cores": 3.1165370063649385, "engine_peak_rss_mb": 19.15234375, "measure_secs": 30.001248119, "num_series": 1000, "sender_cpu_cores": 0.8776301537710035, "target_rate": 309828.30463906267, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 619640.4423080456, "concurrency": 16, "engine_cpu_cores": 5.152816572268548, "engine_peak_rss_mb": 21.22265625, "measure_secs": 30.001067927, "num_series": 1000, "sender_cpu_cores": 1.7516043138153319, "target_rate": 619656.6092781253, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 929414.1543222613, "concurrency": 16, "engine_cpu_cores": 5.042138687115671, "engine_peak_rss_mb": 21.3828125, "measure_secs": 30.001158117, "num_series": 1000, "sender_cpu_cores": 2.6048994407224804, "target_rate": 929484.9139171881, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 1115415.7726429123, "concurrency": 16, "engine_cpu_cores": 5.514476851388437, "engine_peak_rss_mb": 26.8359375, "measure_secs": 30.001032638, "num_series": 1000, "sender_cpu_cores": 3.1392252772229394, "target_rate": 1115381.8967006255, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 1930598.9655821766, "concurrency": 16, "engine_cpu_cores": 7.962054262269834, "engine_peak_rss_mb": 14.69140625, "measure_secs": 30.001051504, "num_series": 1000, "sender_cpu_cores": 5.477808002099152, "target_rate": 0.0, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 193070.58128530256, "concurrency": 16, "engine_cpu_cores": 1.6282257912450635, "engine_peak_rss_mb": 14.14453125, "measure_secs": 30.001981459, "num_series": 1000, "sender_cpu_cores": 0.5566299020223656, "target_rate": 193059.89655821768, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 482645.83919293067, "concurrency": 16, "engine_cpu_cores": 4.035527082627511, "engine_peak_rss_mb": 14.4453125, "measure_secs": 30.001037664, "num_series": 1000, "sender_cpu_cores": 1.3929518194681068, "target_rate": 482649.74139554414, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 965268.336404305, "concurrency": 16, "engine_cpu_cores": 5.522497336589666, "engine_peak_rss_mb": 14.82421875, "measure_secs": 30.000919856, "num_series": 1000, "sender_cpu_cores": 2.7409159584003393, "target_rate": 965299.4827910883, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1447947.9391554964, "concurrency": 16, "engine_cpu_cores": 6.090798392745961, "engine_peak_rss_mb": 14.87890625, "measure_secs": 30.000993009, "num_series": 1000, "sender_cpu_cores": 4.196194438038576, "target_rate": 1447949.2241866323, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1737541.3052999876, "concurrency": 16, "engine_cpu_cores": 7.218756563556783, "engine_peak_rss_mb": 14.43359375, "measure_secs": 30.001011683, "num_series": 1000, "sender_cpu_cores": 5.036496822059519, "target_rate": 1737539.0690239589, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 635363.1787275816, "concurrency": 16, "engine_cpu_cores": 6.2511153619415545, "engine_peak_rss_mb": 723.23828125, "measure_secs": 30.001046076, "num_series": 1000, "sender_cpu_cores": 1.7456057987889473, "target_rate": 0.0, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 63563.26602134065, "concurrency": 16, "engine_cpu_cores": 1.1892697072057863, "engine_peak_rss_mb": 566.5390625, "measure_secs": 30.001605005, "num_series": 1000, "sender_cpu_cores": 0.1846567874977594, "target_rate": 63536.31787275817, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 158830.90371288234, "concurrency": 16, "engine_cpu_cores": 2.8009571540385108, "engine_peak_rss_mb": 587.984375, "measure_secs": 30.000458907, "num_series": 1000, "sender_cpu_cores": 0.44299322357695825, "target_rate": 158840.7946818954, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 317673.23826128105, "concurrency": 16, "engine_cpu_cores": 5.118470712157617, "engine_peak_rss_mb": 587.20703125, "measure_secs": 30.001148514, "num_series": 1000, "sender_cpu_cores": 0.9006321870441443, "target_rate": 317681.5893637908, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 476520.8880805265, "concurrency": 16, "engine_cpu_cores": 5.255839939176077, "engine_peak_rss_mb": 616.32421875, "measure_secs": 30.000913617, "num_series": 1000, "sender_cpu_cores": 1.3476256262106088, "target_rate": 476522.3840456862, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 571812.9031464267, "concurrency": 16, "engine_cpu_cores": 5.610820138053437, "engine_peak_rss_mb": 642.07421875, "measure_secs": 30.000961688, "num_series": 1000, "sender_cpu_cores": 1.5916156454111066, "target_rate": 571826.8608548235, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 206635.7768828085, "concurrency": 16, "engine_cpu_cores": 2.7122564628318897, "engine_peak_rss_mb": 28.60546875, "measure_secs": 30.000850257, "num_series": 1000, "sender_cpu_cores": 0.5713171411200515, "target_rate": 0.0, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 20665.839413114958, "concurrency": 16, "engine_cpu_cores": 0.25398983278699355, "engine_peak_rss_mb": 11.34765625, "measure_secs": 30.0012009, "num_series": 1000, "sender_cpu_cores": 0.0626641582204131, "target_rate": 20663.577688280853, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 51664.6197006569, "concurrency": 16, "engine_cpu_cores": 0.6399746440339434, "engine_peak_rss_mb": 11.20703125, "measure_secs": 30.001188608, "num_series": 1000, "sender_cpu_cores": 0.14532757541604135, "target_rate": 51658.94422070213, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 103328.68544718031, "concurrency": 16, "engine_cpu_cores": 1.2852755196268624, "engine_peak_rss_mb": 11.4765625, "measure_secs": 30.001349447, "num_series": 1000, "sender_cpu_cores": 0.2923201843134746, "target_rate": 103317.88844140425, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 154975.6219609241, "concurrency": 16, "engine_cpu_cores": 1.9032898000201675, "engine_peak_rss_mb": 11.80859375, "measure_secs": 30.00068618, "num_series": 1000, "sender_cpu_cores": 0.430990142106143, "target_rate": 154976.83266210638, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 185963.93456512442, "concurrency": 16, "engine_cpu_cores": 2.299299553020664, "engine_peak_rss_mb": 11.41796875, "measure_secs": 30.000440747, "num_series": 1000, "sender_cpu_cores": 0.5179923898802712, "target_rate": 185972.19919452767, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 1356776.1047613262, "concurrency": 16, "engine_cpu_cores": 6.888587656173588, "engine_peak_rss_mb": 165.734375, "measure_secs": 30.000344093, "num_series": 10000, "sender_cpu_cores": 1.6426478258793884, "target_rate": 0.0, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 135659.95561388243, "concurrency": 16, "engine_cpu_cores": 1.295602573639216, "engine_peak_rss_mb": 127.29296875, "measure_secs": 30.00148409, "num_series": 10000, "sender_cpu_cores": 0.17199149163823915, "target_rate": 135677.61047613263, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 339317.2347212069, "concurrency": 16, "engine_cpu_cores": 3.260511974501813, "engine_peak_rss_mb": 136.8515625, "measure_secs": 30.001423324, "num_series": 10000, "sender_cpu_cores": 0.40031434076637473, "target_rate": 339194.02619033155, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 678694.8862630479, "concurrency": 16, "engine_cpu_cores": 5.055078004881861, "engine_peak_rss_mb": 154.9375, "measure_secs": 30.001515279, "num_series": 10000, "sender_cpu_cores": 0.7936265811435916, "target_rate": 678388.0523806631, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 1017459.4613936165, "concurrency": 16, "engine_cpu_cores": 5.156566798749933, "engine_peak_rss_mb": 164.3515625, "measure_secs": 30.000581014, "num_series": 10000, "sender_cpu_cores": 1.2416426196085002, "target_rate": 1017582.0785709947, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 1220930.8803761164, "concurrency": 16, "engine_cpu_cores": 6.179650156203439, "engine_peak_rss_mb": 160.82421875, "measure_secs": 30.001698367, "num_series": 10000, "sender_cpu_cores": 1.4635838099185166, "target_rate": 1221098.4942851937, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 1268864.4643137404, "concurrency": 16, "engine_cpu_cores": 6.338405898309604, "engine_peak_rss_mb": 93.5703125, "measure_secs": 30.00123423, "num_series": 10000, "sender_cpu_cores": 1.511271158126617, "target_rate": 0.0, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 126658.96719470987, "concurrency": 16, "engine_cpu_cores": 1.193594109274358, "engine_peak_rss_mb": 66.26171875, "measure_secs": 30.00182367, "num_series": 10000, "sender_cpu_cores": 0.15632383056399718, "target_rate": 126886.44643137405, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 316993.9574189178, "concurrency": 16, "engine_cpu_cores": 2.9406106123550924, "engine_peak_rss_mb": 73.25390625, "measure_secs": 30.000571864, "num_series": 10000, "sender_cpu_cores": 0.37399287089802924, "target_rate": 317216.1160784351, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 633938.8507549079, "concurrency": 16, "engine_cpu_cores": 4.760030614902351, "engine_peak_rss_mb": 88.56640625, "measure_secs": 30.001907877, "num_series": 10000, "sender_cpu_cores": 0.7306202022173485, "target_rate": 634432.2321568702, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 951649.7437722407, "concurrency": 16, "engine_cpu_cores": 4.715812902481001, "engine_peak_rss_mb": 91.0703125, "measure_secs": 30.001190235, "num_series": 10000, "sender_cpu_cores": 1.1412880533004628, "target_rate": 951648.3482353053, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 1142234.721125731, "concurrency": 16, "engine_cpu_cores": 5.572490490150825, "engine_peak_rss_mb": 96.18359375, "measure_secs": 30.000948462, "num_series": 10000, "sender_cpu_cores": 1.346957415402529, "target_rate": 1141978.0178823664, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 2441448.4253568654, "concurrency": 16, "engine_cpu_cores": 7.993293186703595, "engine_peak_rss_mb": 21.65625, "measure_secs": 30.001401725, "num_series": 10000, "sender_cpu_cores": 2.753538009897769, "target_rate": 0.0, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 244053.1597194978, "concurrency": 16, "engine_cpu_cores": 1.6602697923179768, "engine_peak_rss_mb": 20.94140625, "measure_secs": 30.001148145, "num_series": 10000, "sender_cpu_cores": 0.2859890547698904, "target_rate": 244144.84253568656, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 610316.3143170627, "concurrency": 16, "engine_cpu_cores": 4.143884445434038, "engine_peak_rss_mb": 21.23046875, "measure_secs": 30.000836567, "num_series": 10000, "sender_cpu_cores": 0.717979978721438, "target_rate": 610362.1063392163, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1220785.4068445887, "concurrency": 16, "engine_cpu_cores": 5.220461717952205, "engine_peak_rss_mb": 21.0390625, "measure_secs": 30.001177762, "num_series": 10000, "sender_cpu_cores": 1.366613015170734, "target_rate": 1220724.2126784327, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1831005.9947168515, "concurrency": 16, "engine_cpu_cores": 6.137670920180875, "engine_peak_rss_mb": 21.34375, "measure_secs": 30.001608492, "num_series": 10000, "sender_cpu_cores": 2.1432184216771493, "target_rate": 1831086.3190176492, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 2197246.8569295118, "concurrency": 16, "engine_cpu_cores": 7.3322390517072105, "engine_peak_rss_mb": 21.3359375, "measure_secs": 30.001749595, "num_series": 10000, "sender_cpu_cores": 2.564183790562032, "target_rate": 2197303.5828211787, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1725496.0647779645, "concurrency": 16, "engine_cpu_cores": 7.753368145710985, "engine_peak_rss_mb": 766.015625, "measure_secs": 30.001155063, "num_series": 10000, "sender_cpu_cores": 1.9342588603052682, "target_rate": 0.0, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 172663.750554339, "concurrency": 16, "engine_cpu_cores": 1.4426423019289174, "engine_peak_rss_mb": 551.4453125, "measure_secs": 30.000506669, "num_series": 10000, "sender_cpu_cores": 0.20266324389389598, "target_rate": 172549.60647779645, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 431329.64672646264, "concurrency": 16, "engine_cpu_cores": 3.4974678449462626, "engine_peak_rss_mb": 579.61328125, "measure_secs": 30.00170542, "num_series": 10000, "sender_cpu_cores": 0.49397191901366255, "target_rate": 431374.0161944911, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 862837.1204725292, "concurrency": 16, "engine_cpu_cores": 5.11510877426102, "engine_peak_rss_mb": 592.20703125, "measure_secs": 30.001317034, "num_series": 10000, "sender_cpu_cores": 0.9539581201573726, "target_rate": 862748.0323889822, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1294064.7605830163, "concurrency": 16, "engine_cpu_cores": 5.499499199216752, "engine_peak_rss_mb": 611.46484375, "measure_secs": 30.000913542, "num_series": 10000, "sender_cpu_cores": 1.5029542329394712, "target_rate": 1294122.0485834733, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1552890.3401333166, "concurrency": 16, "engine_cpu_cores": 6.564712564498011, "engine_peak_rss_mb": 640.07421875, "measure_secs": 30.001313548, "num_series": 10000, "sender_cpu_cores": 1.7845885285769156, "target_rate": 1552946.4583001682, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 217410.5223409306, "concurrency": 16, "engine_cpu_cores": 2.534928359375664, "engine_peak_rss_mb": 37.21484375, "measure_secs": 30.000847842, "num_series": 10000, "sender_cpu_cores": 0.25132623050220265, "target_rate": 0.0, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 21665.685418385605, "concurrency": 16, "engine_cpu_cores": 0.2523219055648908, "engine_peak_rss_mb": 21.63671875, "measure_secs": 30.001358713, "num_series": 10000, "sender_cpu_cores": 0.024332231316033064, "target_rate": 21741.052234093062, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 54331.12539608288, "concurrency": 16, "engine_cpu_cores": 0.6373074340939293, "engine_peak_rss_mb": 21.859375, "measure_secs": 30.001219156, "num_series": 10000, "sender_cpu_cores": 0.06166416072561555, "target_rate": 54352.63058523265, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 108892.9187889536, "concurrency": 16, "engine_cpu_cores": 1.296631962009656, "engine_peak_rss_mb": 22.625, "measure_secs": 30.000802957, "num_series": 10000, "sender_cpu_cores": 0.12532997884720581, "target_rate": 108705.2611704653, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 162990.2860234384, "concurrency": 16, "engine_cpu_cores": 1.8402236587636065, "engine_peak_rss_mb": 22.6015625, "measure_secs": 30.001787955, "num_series": 10000, "sender_cpu_cores": 0.18632222880797972, "target_rate": 163057.89175569796, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 195657.79142706783, "concurrency": 16, "engine_cpu_cores": 2.211566347731848, "engine_peak_rss_mb": 23.015625, "measure_secs": 30.001360831, "num_series": 10000, "sender_cpu_cores": 0.22398983958942006, "target_rate": 195669.47010683754, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 709399.390818914, "concurrency": 16, "engine_cpu_cores": 4.973762021237531, "engine_peak_rss_mb": 1249.859375, "measure_secs": 30.001435405, "num_series": 100000, "sender_cpu_cores": 0.697299969737898, "target_rate": 0.0, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 71063.04302708294, "concurrency": 16, "engine_cpu_cores": 0.7956260961803329, "engine_peak_rss_mb": 1090.796875, "measure_secs": 30.001529757, "num_series": 100000, "sender_cpu_cores": 0.07332959411800304, "target_rate": 70939.93908189141, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 177723.392695265, "concurrency": 16, "engine_cpu_cores": 1.9622235798893946, "engine_peak_rss_mb": 1139.359375, "measure_secs": 30.001677996, "num_series": 100000, "sender_cpu_cores": 0.18898942921645773, "target_rate": 177349.8477047285, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 354384.57133611, "concurrency": 16, "engine_cpu_cores": 3.447516573861349, "engine_peak_rss_mb": 1149.12109375, "measure_secs": 30.001306095, "num_series": 100000, "sender_cpu_cores": 0.3683172980872852, "target_rate": 354699.695409457, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 532828.2350500156, "concurrency": 16, "engine_cpu_cores": 4.1574968413742734, "engine_peak_rss_mb": 1155.68359375, "measure_secs": 30.001225439, "num_series": 100000, "sender_cpu_cores": 0.5393113035631825, "target_rate": 532049.5431141856, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 635659.7204471356, "concurrency": 16, "engine_cpu_cores": 4.568710496654023, "engine_peak_rss_mb": 1194.96484375, "measure_secs": 30.001900996, "num_series": 100000, "sender_cpu_cores": 0.6379595747133436, "target_rate": 638459.4517370226, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 571846.5683795284, "concurrency": 16, "engine_cpu_cores": 4.42444668774928, "engine_peak_rss_mb": 447.23828125, "measure_secs": 30.001491569, "num_series": 100000, "sender_cpu_cores": 0.5666384939862721, "target_rate": 0.0, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 57730.618527904815, "concurrency": 16, "engine_cpu_cores": 0.6943006835659683, "engine_peak_rss_mb": 415.84765625, "measure_secs": 30.001410762, "num_series": 100000, "sender_cpu_cores": 0.058997225631865775, "target_rate": 57184.65683795284, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 142260.999140206, "concurrency": 16, "engine_cpu_cores": 1.5752705762338648, "engine_peak_rss_mb": 428.91796875, "measure_secs": 30.001195168, "num_series": 100000, "sender_cpu_cores": 0.14866074418118996, "target_rate": 142961.6420948821, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 288785.7672800953, "concurrency": 16, "engine_cpu_cores": 2.8138613196890176, "engine_peak_rss_mb": 440.6640625, "measure_secs": 30.001478541, "num_series": 100000, "sender_cpu_cores": 0.2966520462595624, "target_rate": 285923.2841897642, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 418300.2493718561, "concurrency": 16, "engine_cpu_cores": 3.5528605586315107, "engine_peak_rss_mb": 459.96875, "measure_secs": 30.001177429, "num_series": 100000, "sender_cpu_cores": 0.42198343814874684, "target_rate": 428884.92628464627, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 528089.2948794035, "concurrency": 16, "engine_cpu_cores": 4.060725446637174, "engine_peak_rss_mb": 449.74609375, "measure_secs": 30.002028357, "num_series": 100000, "sender_cpu_cores": 0.5306307897107758, "target_rate": 514661.9115415755, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 2328141.8682868565, "concurrency": 16, "engine_cpu_cores": 8.000295088961114, "engine_peak_rss_mb": 34.21875, "measure_secs": 30.001393365, "num_series": 100000, "sender_cpu_cores": 2.263894852271639, "target_rate": 0.0, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 233324.4373414009, "concurrency": 16, "engine_cpu_cores": 1.6752694601112583, "engine_peak_rss_mb": 32.59375, "measure_secs": 30.001143814, "num_series": 100000, "sender_cpu_cores": 0.23365775796617433, "target_rate": 232814.18682868566, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 582096.2737471947, "concurrency": 16, "engine_cpu_cores": 3.9604145239716937, "engine_peak_rss_mb": 31.75, "measure_secs": 30.001909972, "num_series": 100000, "sender_cpu_cores": 0.5946288091874686, "target_rate": 582035.4670717141, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1164207.9219767456, "concurrency": 16, "engine_cpu_cores": 4.806090823116896, "engine_peak_rss_mb": 34.33984375, "measure_secs": 30.001513768, "num_series": 100000, "sender_cpu_cores": 1.1942730715880323, "target_rate": 1164070.9341434282, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1746063.2957080328, "concurrency": 16, "engine_cpu_cores": 6.181752039210671, "engine_peak_rss_mb": 35.60546875, "measure_secs": 30.001203352, "num_series": 100000, "sender_cpu_cores": 1.8462592766735633, "target_rate": 1746106.4012151423, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 2095429.8055418716, "concurrency": 16, "engine_cpu_cores": 7.4302026271528785, "engine_peak_rss_mb": 35.140625, "measure_secs": 30.000527736, "num_series": 100000, "sender_cpu_cores": 2.1846282364344343, "target_rate": 2095327.6814581708, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1940464.8402284107, "concurrency": 16, "engine_cpu_cores": 7.787058471453918, "engine_peak_rss_mb": 681.5546875, "measure_secs": 30.001058918, "num_series": 100000, "sender_cpu_cores": 1.9095992630322531, "target_rate": 0.0, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 193323.41438580563, "concurrency": 16, "engine_cpu_cores": 1.5072559997458845, "engine_peak_rss_mb": 373.234375, "measure_secs": 30.001539226, "num_series": 100000, "sender_cpu_cores": 0.1966565767028023, "target_rate": 194046.4840228411, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 484717.77686563163, "concurrency": 16, "engine_cpu_cores": 3.573551977565972, "engine_peak_rss_mb": 419.17578125, "measure_secs": 30.000962816, "num_series": 100000, "sender_cpu_cores": 0.4969840498601683, "target_rate": 485116.21005710267, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 970081.8534822376, "concurrency": 16, "engine_cpu_cores": 4.676085185026907, "engine_peak_rss_mb": 490.68359375, "measure_secs": 30.001592026, "num_series": 100000, "sender_cpu_cores": 0.9852810468985342, "target_rate": 970232.4201142053, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1455276.508326856, "concurrency": 16, "engine_cpu_cores": 5.759108454162029, "engine_peak_rss_mb": 527.12109375, "measure_secs": 30.001171427, "num_series": 100000, "sender_cpu_cores": 1.5212739312880832, "target_rate": 1455348.630171308, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1746574.895940434, "concurrency": 16, "engine_cpu_cores": 6.899703307468006, "engine_peak_rss_mb": 530.08984375, "measure_secs": 30.001290023, "num_series": 100000, "sender_cpu_cores": 1.812588723961885, "target_rate": 1746418.3562055696, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 207097.85833201435, "concurrency": 16, "engine_cpu_cores": 2.5506402896452176, "engine_peak_rss_mb": 58.74609375, "measure_secs": 30.00031024, "num_series": 100000, "sender_cpu_cores": 0.19666463289214306, "target_rate": 0.0, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 19998.747943053902, "concurrency": 16, "engine_cpu_cores": 0.24465134983669276, "engine_peak_rss_mb": 33.31640625, "measure_secs": 30.001878203, "num_series": 100000, "sender_cpu_cores": 0.01966543547733634, "target_rate": 20709.785833201437, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 51196.2819434052, "concurrency": 16, "engine_cpu_cores": 0.6062893024417583, "engine_peak_rss_mb": 34.4609375, "measure_secs": 30.002178707, "num_series": 100000, "sender_cpu_cores": 0.05099629646706377, "target_rate": 51774.46458300359, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 103329.81245263787, "concurrency": 16, "engine_cpu_cores": 1.223958294600278, "engine_peak_rss_mb": 36.4140625, "measure_secs": 30.001022226, "num_series": 100000, "sender_cpu_cores": 0.10432977837959886, "target_rate": 103548.92916600718, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 155459.4785002079, "concurrency": 16, "engine_cpu_cores": 1.844581376544062, "engine_peak_rss_mb": 38.1328125, "measure_secs": 30.001387146, "num_series": 100000, "sender_cpu_cores": 0.15632610509562073, "target_rate": 155323.39374901075, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 186659.5257389642, "concurrency": 16, "engine_cpu_cores": 2.2425808735209842, "engine_peak_rss_mb": 38.37109375, "measure_secs": 30.001147693, "num_series": 100000, "sender_cpu_cores": 0.18699284632064092, "target_rate": 186388.07249881292, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 890078.3175236791, "concurrency": 16, "engine_cpu_cores": 5.747419038351077, "engine_peak_rss_mb": 11503.44921875, "measure_secs": 30.001292554, "num_series": 1000000, "sender_cpu_cores": 0.9292932946078294, "target_rate": 0.0, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 89329.50707064637, "concurrency": 16, "engine_cpu_cores": 1.0202896311315244, "engine_peak_rss_mb": 9719.6953125, "measure_secs": 30.001284994, "num_series": 1000000, "sender_cpu_cores": 0.09099610235181516, "target_rate": 89007.83175236791, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 228523.42462619857, "concurrency": 16, "engine_cpu_cores": 2.4222283062406436, "engine_peak_rss_mb": 10766.3984375, "measure_secs": 30.001300791, "num_series": 1000000, "sender_cpu_cores": 0.23698972419665576, "target_rate": 222519.57938091978, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 462245.1282162439, "concurrency": 16, "engine_cpu_cores": 4.043811577386408, "engine_peak_rss_mb": 11302.48046875, "measure_secs": 30.001397859, "num_series": 1000000, "sender_cpu_cores": 0.4843107667278644, "target_rate": 445039.15876183956, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 667352.7938435884, "concurrency": 16, "engine_cpu_cores": 4.805993374503397, "engine_peak_rss_mb": 11264.828125, "measure_secs": 30.002122093, "num_series": 1000000, "sender_cpu_cores": 0.6852848587266096, "target_rate": 667558.7381427593, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 844365.8580946735, "concurrency": 16, "engine_cpu_cores": 5.566774907642168, "engine_peak_rss_mb": 11218.328125, "measure_secs": 30.001213049, "num_series": 1000000, "sender_cpu_cores": 0.8696315031458247, "target_rate": 801070.4857713112, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 830502.5798228025, "concurrency": 16, "engine_cpu_cores": 5.537128293472626, "engine_peak_rss_mb": 4018.0, "measure_secs": 30.0011109, "num_series": 1000000, "sender_cpu_cores": 0.8569682664650928, "target_rate": 0.0, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 82663.31641889275, "concurrency": 16, "engine_cpu_cores": 1.0436243697885208, "engine_peak_rss_mb": 3066.09765625, "measure_secs": 30.001215865, "num_series": 1000000, "sender_cpu_cores": 0.08532987501305057, "target_rate": 83050.25798228025, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 207457.33546392058, "concurrency": 16, "engine_cpu_cores": 2.3288952488534918, "engine_peak_rss_mb": 3750.0703125, "measure_secs": 30.001349367, "num_series": 1000000, "sender_cpu_cores": 0.21432369328936524, "target_rate": 207625.6449557006, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 398583.26366147824, "concurrency": 16, "engine_cpu_cores": 3.6518466605411906, "engine_peak_rss_mb": 3983.68359375, "measure_secs": 30.001259687, "num_series": 1000000, "sender_cpu_cores": 0.4183157684354869, "target_rate": 415251.2899114012, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 607306.6306883321, "concurrency": 16, "engine_cpu_cores": 4.501802060415265, "engine_peak_rss_mb": 3999.2109375, "measure_secs": 30.001319069, "num_series": 1000000, "sender_cpu_cores": 0.6313055754795286, "target_rate": 622876.9348671018, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 845941.75292754, "concurrency": 16, "engine_cpu_cores": 5.488396896591688, "engine_peak_rss_mb": 3969.19140625, "measure_secs": 30.001474584, "num_series": 1000000, "sender_cpu_cores": 0.8662907527172231, "target_rate": 747452.3218405222, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 2313963.044391897, "concurrency": 16, "engine_cpu_cores": 7.9994236761730795, "engine_peak_rss_mb": 33.98828125, "measure_secs": 30.00091128, "num_series": 1000000, "sender_cpu_cores": 2.231932202827407, "target_rate": 0.0, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 231189.23125184613, "concurrency": 16, "engine_cpu_cores": 1.7075871275997803, "engine_peak_rss_mb": 32.28125, "measure_secs": 30.001397394, "num_series": 1000000, "sender_cpu_cores": 0.22098970634367643, "target_rate": 231396.30443918973, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 578646.2155541821, "concurrency": 16, "engine_cpu_cores": 3.93386096542077, "engine_peak_rss_mb": 32.8125, "measure_secs": 30.001060291, "num_series": 1000000, "sender_cpu_cores": 0.5659799965501159, "target_rate": 578490.7610979743, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1157007.2758633865, "concurrency": 16, "engine_cpu_cores": 4.764088785986225, "engine_peak_rss_mb": 34.40234375, "measure_secs": 30.001539942, "num_series": 1000000, "sender_cpu_cores": 1.1362750067464522, "target_rate": 1156981.5221959485, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1735382.7909886907, "concurrency": 16, "engine_cpu_cores": 6.281696388862336, "engine_peak_rss_mb": 33.1484375, "measure_secs": 30.00144998, "num_series": 1000000, "sender_cpu_cores": 1.7392492707780784, "target_rate": 1735472.283293923, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 2082858.5533652639, "concurrency": 16, "engine_cpu_cores": 7.544395803493372, "engine_peak_rss_mb": 35.55078125, "measure_secs": 30.001077077, "num_series": 1000000, "sender_cpu_cores": 2.066925792058955, "target_rate": 2082566.7399527074, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 2115471.185517008, "concurrency": 16, "engine_cpu_cores": 7.998161378462409, "engine_peak_rss_mb": 397.796875, "measure_secs": 30.000644979, "num_series": 1000000, "sender_cpu_cores": 2.0356229021992056, "target_rate": 0.0, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 211592.17241559824, "concurrency": 16, "engine_cpu_cores": 1.633939554475839, "engine_peak_rss_mb": 299.90625, "measure_secs": 30.001109812, "num_series": 1000000, "sender_cpu_cores": 0.2053257375677513, "target_rate": 211547.1185517008, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 529038.6710159085, "concurrency": 16, "engine_cpu_cores": 3.760134354668891, "engine_peak_rss_mb": 347.2109375, "measure_secs": 30.001587539, "num_series": 1000000, "sender_cpu_cores": 0.5199724841134181, "target_rate": 528867.796379252, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1058089.458595843, "concurrency": 16, "engine_cpu_cores": 4.689138893499975, "engine_peak_rss_mb": 349.1875, "measure_secs": 30.00124398, "num_series": 1000000, "sender_cpu_cores": 1.039956877148132, "target_rate": 1057735.592758504, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1586630.8051612193, "concurrency": 16, "engine_cpu_cores": 6.263858422392779, "engine_peak_rss_mb": 362.66796875, "measure_secs": 30.000678069, "num_series": 1000000, "sender_cpu_cores": 1.578964311774936, "target_rate": 1586603.389137756, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1903699.4978020424, "concurrency": 16, "engine_cpu_cores": 7.538268698093461, "engine_peak_rss_mb": 382.3984375, "measure_secs": 30.001583793000002, "num_series": 1000000, "sender_cpu_cores": 1.8922334364642988, "target_rate": 1903924.066965307, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 206461.8317090814, "concurrency": 16, "engine_cpu_cores": 2.597939161027737, "engine_peak_rss_mb": 54.5, "measure_secs": 30.000702545, "num_series": 1000000, "sender_cpu_cores": 0.18932889959760774, "target_rate": 0.0, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 21199.19509412123, "concurrency": 16, "engine_cpu_cores": 0.26165673190071015, "engine_peak_rss_mb": 32.7421875, "measure_secs": 30.001139061, "num_series": 1000000, "sender_cpu_cores": 0.0193325992996703, "target_rate": 20646.18317090814, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 51664.97091899117, "concurrency": 16, "engine_cpu_cores": 0.6256461317093317, "engine_peak_rss_mb": 34.49609375, "measure_secs": 30.00098466, "num_series": 1000000, "sender_cpu_cores": 0.04999835895386241, "target_rate": 51615.45792727035, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 103729.42498839744, "concurrency": 16, "engine_cpu_cores": 1.2662856218859957, "engine_peak_rss_mb": 36.27734375, "measure_secs": 30.001130348, "num_series": 1000000, "sender_cpu_cores": 0.09832962844337162, "target_rate": 103230.9158545407, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 155257.57927494362, "concurrency": 16, "engine_cpu_cores": 1.894222462472101, "engine_peak_rss_mb": 39.01171875, "measure_secs": 30.001755932, "num_series": 1000000, "sender_cpu_cores": 0.14699139643677575, "target_rate": 154846.37378181104, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 185722.94275995315, "concurrency": 16, "engine_cpu_cores": 2.2265420991322453, "engine_peak_rss_mb": 40.2734375, "measure_secs": 30.001678399, "num_series": 1000000, "sender_cpu_cores": 0.1806565595403708, "target_rate": 185815.64853817326, "label": "raw", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} diff --git a/asap-tools/experiments/microbench/precompute_throughput/results/main.out b/asap-tools/experiments/microbench/precompute_throughput/results/main.out new file mode 100644 index 00000000..6d416731 --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/results/main.out @@ -0,0 +1,241 @@ +[kll] series=1000 workers=8 rate=0 + achieved=1401062/s cpu=7.08 cores sender_cpu=4.03 cores rss=41MB +[kll] series=1000 workers=8 rate=140106 + achieved=140093/s cpu=1.40 cores sender_cpu=0.40 cores rss=23MB +[kll] series=1000 workers=8 rate=350266 + achieved=350281/s cpu=3.44 cores sender_cpu=1.00 cores rss=25MB +[kll] series=1000 workers=8 rate=700531 + achieved=700508/s cpu=5.42 cores sender_cpu=1.97 cores rss=25MB +[kll] series=1000 workers=8 rate=1050797 + achieved=1050767/s cpu=5.19 cores sender_cpu=3.02 cores rss=28MB +[kll] series=1000 workers=8 rate=1260956 + achieved=1260934/s cpu=6.12 cores sender_cpu=3.57 cores rss=42MB +[ddsketch] series=1000 workers=8 rate=0 + achieved=1239313/s cpu=6.21 cores sender_cpu=3.53 cores rss=37MB +[ddsketch] series=1000 workers=8 rate=123931 + achieved=123915/s cpu=1.26 cores sender_cpu=0.36 cores rss=19MB +[ddsketch] series=1000 workers=8 rate=309828 + achieved=309862/s cpu=3.12 cores sender_cpu=0.88 cores rss=19MB +[ddsketch] series=1000 workers=8 rate=619657 + achieved=619640/s cpu=5.15 cores sender_cpu=1.75 cores rss=21MB +[ddsketch] series=1000 workers=8 rate=929485 + achieved=929414/s cpu=5.04 cores sender_cpu=2.60 cores rss=21MB +[ddsketch] series=1000 workers=8 rate=1115382 + achieved=1115416/s cpu=5.51 cores sender_cpu=3.14 cores rss=27MB +[cms_heap] series=1000 workers=8 rate=0 + achieved=1930599/s cpu=7.96 cores sender_cpu=5.48 cores rss=15MB +[cms_heap] series=1000 workers=8 rate=193060 + achieved=193071/s cpu=1.63 cores sender_cpu=0.56 cores rss=14MB +[cms_heap] series=1000 workers=8 rate=482650 + achieved=482646/s cpu=4.04 cores sender_cpu=1.39 cores rss=14MB +[cms_heap] series=1000 workers=8 rate=965299 + achieved=965268/s cpu=5.52 cores sender_cpu=2.74 cores rss=15MB +[cms_heap] series=1000 workers=8 rate=1447949 + achieved=1447948/s cpu=6.09 cores sender_cpu=4.20 cores rss=15MB +[cms_heap] series=1000 workers=8 rate=1737539 + achieved=1737541/s cpu=7.22 cores sender_cpu=5.04 cores rss=14MB +[hydra_kll] series=1000 workers=8 rate=0 + achieved=635363/s cpu=6.25 cores sender_cpu=1.75 cores rss=723MB +[hydra_kll] series=1000 workers=8 rate=63536 + achieved=63563/s cpu=1.19 cores sender_cpu=0.18 cores rss=567MB +[hydra_kll] series=1000 workers=8 rate=158841 + achieved=158831/s cpu=2.80 cores sender_cpu=0.44 cores rss=588MB +[hydra_kll] series=1000 workers=8 rate=317682 + achieved=317673/s cpu=5.12 cores sender_cpu=0.90 cores rss=587MB +[hydra_kll] series=1000 workers=8 rate=476522 + achieved=476521/s cpu=5.26 cores sender_cpu=1.35 cores rss=616MB +[hydra_kll] series=1000 workers=8 rate=571827 + achieved=571813/s cpu=5.61 cores sender_cpu=1.59 cores rss=642MB +[raw] series=1000 workers=8 rate=0 + achieved=206636/s cpu=2.71 cores sender_cpu=0.57 cores rss=29MB +[raw] series=1000 workers=8 rate=20664 + achieved=20666/s cpu=0.25 cores sender_cpu=0.06 cores rss=11MB +[raw] series=1000 workers=8 rate=51659 + achieved=51665/s cpu=0.64 cores sender_cpu=0.15 cores rss=11MB +[raw] series=1000 workers=8 rate=103318 + achieved=103329/s cpu=1.29 cores sender_cpu=0.29 cores rss=11MB +[raw] series=1000 workers=8 rate=154977 + achieved=154976/s cpu=1.90 cores sender_cpu=0.43 cores rss=12MB +[raw] series=1000 workers=8 rate=185972 + achieved=185964/s cpu=2.30 cores sender_cpu=0.52 cores rss=11MB +[kll] series=10000 workers=8 rate=0 + achieved=1356776/s cpu=6.89 cores sender_cpu=1.64 cores rss=166MB +[kll] series=10000 workers=8 rate=135678 + achieved=135660/s cpu=1.30 cores sender_cpu=0.17 cores rss=127MB +[kll] series=10000 workers=8 rate=339194 + achieved=339317/s cpu=3.26 cores sender_cpu=0.40 cores rss=137MB +[kll] series=10000 workers=8 rate=678388 + achieved=678695/s cpu=5.06 cores sender_cpu=0.79 cores rss=155MB +[kll] series=10000 workers=8 rate=1017582 + achieved=1017459/s cpu=5.16 cores sender_cpu=1.24 cores rss=164MB +[kll] series=10000 workers=8 rate=1221098 + achieved=1220931/s cpu=6.18 cores sender_cpu=1.46 cores rss=161MB +[ddsketch] series=10000 workers=8 rate=0 + achieved=1268864/s cpu=6.34 cores sender_cpu=1.51 cores rss=94MB +[ddsketch] series=10000 workers=8 rate=126886 + achieved=126659/s cpu=1.19 cores sender_cpu=0.16 cores rss=66MB +[ddsketch] series=10000 workers=8 rate=317216 + achieved=316994/s cpu=2.94 cores sender_cpu=0.37 cores rss=73MB +[ddsketch] series=10000 workers=8 rate=634432 + achieved=633939/s cpu=4.76 cores sender_cpu=0.73 cores rss=89MB +[ddsketch] series=10000 workers=8 rate=951648 + achieved=951650/s cpu=4.72 cores sender_cpu=1.14 cores rss=91MB +[ddsketch] series=10000 workers=8 rate=1141978 + achieved=1142235/s cpu=5.57 cores sender_cpu=1.35 cores rss=96MB +[cms_heap] series=10000 workers=8 rate=0 + achieved=2441448/s cpu=7.99 cores sender_cpu=2.75 cores rss=22MB +[cms_heap] series=10000 workers=8 rate=244145 + achieved=244053/s cpu=1.66 cores sender_cpu=0.29 cores rss=21MB +[cms_heap] series=10000 workers=8 rate=610362 + achieved=610316/s cpu=4.14 cores sender_cpu=0.72 cores rss=21MB +[cms_heap] series=10000 workers=8 rate=1220724 + achieved=1220785/s cpu=5.22 cores sender_cpu=1.37 cores rss=21MB +[cms_heap] series=10000 workers=8 rate=1831086 + achieved=1831006/s cpu=6.14 cores sender_cpu=2.14 cores rss=21MB +[cms_heap] series=10000 workers=8 rate=2197304 + achieved=2197247/s cpu=7.33 cores sender_cpu=2.56 cores rss=21MB +[hydra_kll] series=10000 workers=8 rate=0 + achieved=1725496/s cpu=7.75 cores sender_cpu=1.93 cores rss=766MB +[hydra_kll] series=10000 workers=8 rate=172550 + achieved=172664/s cpu=1.44 cores sender_cpu=0.20 cores rss=551MB +[hydra_kll] series=10000 workers=8 rate=431374 + achieved=431330/s cpu=3.50 cores sender_cpu=0.49 cores rss=580MB +[hydra_kll] series=10000 workers=8 rate=862748 + achieved=862837/s cpu=5.12 cores sender_cpu=0.95 cores rss=592MB +[hydra_kll] series=10000 workers=8 rate=1294122 + achieved=1294065/s cpu=5.50 cores sender_cpu=1.50 cores rss=611MB +[hydra_kll] series=10000 workers=8 rate=1552946 + achieved=1552890/s cpu=6.56 cores sender_cpu=1.78 cores rss=640MB +[raw] series=10000 workers=8 rate=0 + achieved=217411/s cpu=2.53 cores sender_cpu=0.25 cores rss=37MB +[raw] series=10000 workers=8 rate=21741 + achieved=21666/s cpu=0.25 cores sender_cpu=0.02 cores rss=22MB +[raw] series=10000 workers=8 rate=54353 + achieved=54331/s cpu=0.64 cores sender_cpu=0.06 cores rss=22MB +[raw] series=10000 workers=8 rate=108705 + achieved=108893/s cpu=1.30 cores sender_cpu=0.13 cores rss=23MB +[raw] series=10000 workers=8 rate=163058 + achieved=162990/s cpu=1.84 cores sender_cpu=0.19 cores rss=23MB +[raw] series=10000 workers=8 rate=195669 + achieved=195658/s cpu=2.21 cores sender_cpu=0.22 cores rss=23MB +[kll] series=100000 workers=8 rate=0 + achieved=709399/s cpu=4.97 cores sender_cpu=0.70 cores rss=1250MB +[kll] series=100000 workers=8 rate=70940 + achieved=71063/s cpu=0.80 cores sender_cpu=0.07 cores rss=1091MB +[kll] series=100000 workers=8 rate=177350 + achieved=177723/s cpu=1.96 cores sender_cpu=0.19 cores rss=1139MB +[kll] series=100000 workers=8 rate=354700 + achieved=354385/s cpu=3.45 cores sender_cpu=0.37 cores rss=1149MB +[kll] series=100000 workers=8 rate=532050 + achieved=532828/s cpu=4.16 cores sender_cpu=0.54 cores rss=1156MB +[kll] series=100000 workers=8 rate=638459 + achieved=635660/s cpu=4.57 cores sender_cpu=0.64 cores rss=1195MB +[ddsketch] series=100000 workers=8 rate=0 + achieved=571847/s cpu=4.42 cores sender_cpu=0.57 cores rss=447MB +[ddsketch] series=100000 workers=8 rate=57185 + achieved=57731/s cpu=0.69 cores sender_cpu=0.06 cores rss=416MB +[ddsketch] series=100000 workers=8 rate=142962 + achieved=142261/s cpu=1.58 cores sender_cpu=0.15 cores rss=429MB +[ddsketch] series=100000 workers=8 rate=285923 + achieved=288786/s cpu=2.81 cores sender_cpu=0.30 cores rss=441MB +[ddsketch] series=100000 workers=8 rate=428885 + achieved=418300/s cpu=3.55 cores sender_cpu=0.42 cores rss=460MB +[ddsketch] series=100000 workers=8 rate=514662 + achieved=528089/s cpu=4.06 cores sender_cpu=0.53 cores rss=450MB +[cms_heap] series=100000 workers=8 rate=0 + achieved=2328142/s cpu=8.00 cores sender_cpu=2.26 cores rss=34MB +[cms_heap] series=100000 workers=8 rate=232814 + achieved=233324/s cpu=1.68 cores sender_cpu=0.23 cores rss=33MB +[cms_heap] series=100000 workers=8 rate=582035 + achieved=582096/s cpu=3.96 cores sender_cpu=0.59 cores rss=32MB +[cms_heap] series=100000 workers=8 rate=1164071 + achieved=1164208/s cpu=4.81 cores sender_cpu=1.19 cores rss=34MB +[cms_heap] series=100000 workers=8 rate=1746106 + achieved=1746063/s cpu=6.18 cores sender_cpu=1.85 cores rss=36MB +[cms_heap] series=100000 workers=8 rate=2095328 + achieved=2095430/s cpu=7.43 cores sender_cpu=2.18 cores rss=35MB +[hydra_kll] series=100000 workers=8 rate=0 + achieved=1940465/s cpu=7.79 cores sender_cpu=1.91 cores rss=682MB +[hydra_kll] series=100000 workers=8 rate=194046 + achieved=193323/s cpu=1.51 cores sender_cpu=0.20 cores rss=373MB +[hydra_kll] series=100000 workers=8 rate=485116 + achieved=484718/s cpu=3.57 cores sender_cpu=0.50 cores rss=419MB +[hydra_kll] series=100000 workers=8 rate=970232 + achieved=970082/s cpu=4.68 cores sender_cpu=0.99 cores rss=491MB +[hydra_kll] series=100000 workers=8 rate=1455349 + achieved=1455277/s cpu=5.76 cores sender_cpu=1.52 cores rss=527MB +[hydra_kll] series=100000 workers=8 rate=1746418 + achieved=1746575/s cpu=6.90 cores sender_cpu=1.81 cores rss=530MB +[raw] series=100000 workers=8 rate=0 + achieved=207098/s cpu=2.55 cores sender_cpu=0.20 cores rss=59MB +[raw] series=100000 workers=8 rate=20710 + achieved=19999/s cpu=0.24 cores sender_cpu=0.02 cores rss=33MB +[raw] series=100000 workers=8 rate=51774 + achieved=51196/s cpu=0.61 cores sender_cpu=0.05 cores rss=34MB +[raw] series=100000 workers=8 rate=103549 + achieved=103330/s cpu=1.22 cores sender_cpu=0.10 cores rss=36MB +[raw] series=100000 workers=8 rate=155323 + achieved=155459/s cpu=1.84 cores sender_cpu=0.16 cores rss=38MB +[raw] series=100000 workers=8 rate=186388 + achieved=186660/s cpu=2.24 cores sender_cpu=0.19 cores rss=38MB +[kll] series=1000000 workers=8 rate=0 + achieved=890078/s cpu=5.75 cores sender_cpu=0.93 cores rss=11503MB +[kll] series=1000000 workers=8 rate=89008 + achieved=89330/s cpu=1.02 cores sender_cpu=0.09 cores rss=9720MB +[kll] series=1000000 workers=8 rate=222520 + achieved=228523/s cpu=2.42 cores sender_cpu=0.24 cores rss=10766MB +[kll] series=1000000 workers=8 rate=445039 + achieved=462245/s cpu=4.04 cores sender_cpu=0.48 cores rss=11302MB +[kll] series=1000000 workers=8 rate=667559 + achieved=667353/s cpu=4.81 cores sender_cpu=0.69 cores rss=11265MB +[kll] series=1000000 workers=8 rate=801070 + achieved=844366/s cpu=5.57 cores sender_cpu=0.87 cores rss=11218MB +[ddsketch] series=1000000 workers=8 rate=0 + achieved=830503/s cpu=5.54 cores sender_cpu=0.86 cores rss=4018MB +[ddsketch] series=1000000 workers=8 rate=83050 + achieved=82663/s cpu=1.04 cores sender_cpu=0.09 cores rss=3066MB +[ddsketch] series=1000000 workers=8 rate=207626 + achieved=207457/s cpu=2.33 cores sender_cpu=0.21 cores rss=3750MB +[ddsketch] series=1000000 workers=8 rate=415251 + achieved=398583/s cpu=3.65 cores sender_cpu=0.42 cores rss=3984MB +[ddsketch] series=1000000 workers=8 rate=622877 + achieved=607307/s cpu=4.50 cores sender_cpu=0.63 cores rss=3999MB +[ddsketch] series=1000000 workers=8 rate=747452 + achieved=845942/s cpu=5.49 cores sender_cpu=0.87 cores rss=3969MB +[cms_heap] series=1000000 workers=8 rate=0 + achieved=2313963/s cpu=8.00 cores sender_cpu=2.23 cores rss=34MB +[cms_heap] series=1000000 workers=8 rate=231396 + achieved=231189/s cpu=1.71 cores sender_cpu=0.22 cores rss=32MB +[cms_heap] series=1000000 workers=8 rate=578491 + achieved=578646/s cpu=3.93 cores sender_cpu=0.57 cores rss=33MB +[cms_heap] series=1000000 workers=8 rate=1156982 + achieved=1157007/s cpu=4.76 cores sender_cpu=1.14 cores rss=34MB +[cms_heap] series=1000000 workers=8 rate=1735472 + achieved=1735383/s cpu=6.28 cores sender_cpu=1.74 cores rss=33MB +[cms_heap] series=1000000 workers=8 rate=2082567 + achieved=2082859/s cpu=7.54 cores sender_cpu=2.07 cores rss=36MB +[hydra_kll] series=1000000 workers=8 rate=0 + achieved=2115471/s cpu=8.00 cores sender_cpu=2.04 cores rss=398MB +[hydra_kll] series=1000000 workers=8 rate=211547 + achieved=211592/s cpu=1.63 cores sender_cpu=0.21 cores rss=300MB +[hydra_kll] series=1000000 workers=8 rate=528868 + achieved=529039/s cpu=3.76 cores sender_cpu=0.52 cores rss=347MB +[hydra_kll] series=1000000 workers=8 rate=1057736 + achieved=1058089/s cpu=4.69 cores sender_cpu=1.04 cores rss=349MB +[hydra_kll] series=1000000 workers=8 rate=1586603 + achieved=1586631/s cpu=6.26 cores sender_cpu=1.58 cores rss=363MB +[hydra_kll] series=1000000 workers=8 rate=1903924 + achieved=1903699/s cpu=7.54 cores sender_cpu=1.89 cores rss=382MB +[raw] series=1000000 workers=8 rate=0 + achieved=206462/s cpu=2.60 cores sender_cpu=0.19 cores rss=54MB +[raw] series=1000000 workers=8 rate=20646 + achieved=21199/s cpu=0.26 cores sender_cpu=0.02 cores rss=33MB +[raw] series=1000000 workers=8 rate=51615 + achieved=51665/s cpu=0.63 cores sender_cpu=0.05 cores rss=34MB +[raw] series=1000000 workers=8 rate=103231 + achieved=103729/s cpu=1.27 cores sender_cpu=0.10 cores rss=36MB +[raw] series=1000000 workers=8 rate=154846 + achieved=155258/s cpu=1.89 cores sender_cpu=0.15 cores rss=39MB +[raw] series=1000000 workers=8 rate=185816 + achieved=185723/s cpu=2.23 cores sender_cpu=0.18 cores rss=40MB +EXIT=0 diff --git a/asap-tools/experiments/microbench/precompute_throughput/results/main.pdf b/asap-tools/experiments/microbench/precompute_throughput/results/main.pdf new file mode 100644 index 00000000..99a1895f Binary files /dev/null and b/asap-tools/experiments/microbench/precompute_throughput/results/main.pdf differ diff --git a/asap-tools/experiments/microbench/precompute_throughput/results/main.png b/asap-tools/experiments/microbench/precompute_throughput/results/main.png new file mode 100644 index 00000000..062b788c Binary files /dev/null and b/asap-tools/experiments/microbench/precompute_throughput/results/main.png differ diff --git a/asap-tools/experiments/microbench/precompute_throughput/results/main_noraw.jsonl b/asap-tools/experiments/microbench/precompute_throughput/results/main_noraw.jsonl new file mode 100644 index 00000000..4139d518 --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/results/main_noraw.jsonl @@ -0,0 +1,96 @@ +{"achieved_rate": 1401062.3630118137, "concurrency": 16, "engine_cpu_cores": 7.082756822752075, "engine_peak_rss_mb": 40.9765625, "measure_secs": 30.001030011, "num_series": 1000, "sender_cpu_cores": 4.025528455380338, "target_rate": 0.0, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 140093.48978548293, "concurrency": 16, "engine_cpu_cores": 1.398601672947624, "engine_peak_rss_mb": 23.47265625, "measure_secs": 30.001394115, "num_series": 1000, "sender_cpu_cores": 0.4039812267904004, "target_rate": 140106.23630118137, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 350281.1904955484, "concurrency": 16, "engine_cpu_cores": 3.4441483884199275, "engine_peak_rss_mb": 25.21484375, "measure_secs": 30.001610949, "num_series": 1000, "sender_cpu_cores": 1.000946250887936, "target_rate": 350265.59075295343, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 700507.99704564, "concurrency": 16, "engine_cpu_cores": 5.419169821806134, "engine_peak_rss_mb": 25.37109375, "measure_secs": 30.000905184, "num_series": 1000, "sender_cpu_cores": 1.9712738544815769, "target_rate": 700531.1815059069, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 1050766.547262899, "concurrency": 16, "engine_cpu_cores": 5.1894499253119575, "engine_peak_rss_mb": 27.55078125, "measure_secs": 30.001252973, "num_series": 1000, "sender_cpu_cores": 3.0218737891244274, "target_rate": 1050796.7722588603, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 1260933.8494316489, "concurrency": 16, "engine_cpu_cores": 6.116153781406773, "engine_peak_rss_mb": 42.1171875, "measure_secs": 30.00088071, "num_series": 1000, "sender_cpu_cores": 3.565895316011208, "target_rate": 1260956.1267106324, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 1239313.2185562507, "concurrency": 16, "engine_cpu_cores": 6.20845151422808, "engine_peak_rss_mb": 37.20703125, "measure_secs": 30.001039643, "num_series": 1000, "sender_cpu_cores": 3.5305443164771733, "target_rate": 0.0, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 123915.11136071631, "concurrency": 16, "engine_cpu_cores": 1.2552966416819884, "engine_peak_rss_mb": 18.734375, "measure_secs": 30.000876884, "num_series": 1000, "sender_cpu_cores": 0.3603228012900238, "target_rate": 123931.32185562508, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 309862.141839113, "concurrency": 16, "engine_cpu_cores": 3.1165370063649385, "engine_peak_rss_mb": 19.15234375, "measure_secs": 30.001248119, "num_series": 1000, "sender_cpu_cores": 0.8776301537710035, "target_rate": 309828.30463906267, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 619640.4423080456, "concurrency": 16, "engine_cpu_cores": 5.152816572268548, "engine_peak_rss_mb": 21.22265625, "measure_secs": 30.001067927, "num_series": 1000, "sender_cpu_cores": 1.7516043138153319, "target_rate": 619656.6092781253, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 929414.1543222613, "concurrency": 16, "engine_cpu_cores": 5.042138687115671, "engine_peak_rss_mb": 21.3828125, "measure_secs": 30.001158117, "num_series": 1000, "sender_cpu_cores": 2.6048994407224804, "target_rate": 929484.9139171881, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 1115415.7726429123, "concurrency": 16, "engine_cpu_cores": 5.514476851388437, "engine_peak_rss_mb": 26.8359375, "measure_secs": 30.001032638, "num_series": 1000, "sender_cpu_cores": 3.1392252772229394, "target_rate": 1115381.8967006255, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 1930598.9655821766, "concurrency": 16, "engine_cpu_cores": 7.962054262269834, "engine_peak_rss_mb": 14.69140625, "measure_secs": 30.001051504, "num_series": 1000, "sender_cpu_cores": 5.477808002099152, "target_rate": 0.0, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 193070.58128530256, "concurrency": 16, "engine_cpu_cores": 1.6282257912450635, "engine_peak_rss_mb": 14.14453125, "measure_secs": 30.001981459, "num_series": 1000, "sender_cpu_cores": 0.5566299020223656, "target_rate": 193059.89655821768, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 482645.83919293067, "concurrency": 16, "engine_cpu_cores": 4.035527082627511, "engine_peak_rss_mb": 14.4453125, "measure_secs": 30.001037664, "num_series": 1000, "sender_cpu_cores": 1.3929518194681068, "target_rate": 482649.74139554414, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 965268.336404305, "concurrency": 16, "engine_cpu_cores": 5.522497336589666, "engine_peak_rss_mb": 14.82421875, "measure_secs": 30.000919856, "num_series": 1000, "sender_cpu_cores": 2.7409159584003393, "target_rate": 965299.4827910883, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1447947.9391554964, "concurrency": 16, "engine_cpu_cores": 6.090798392745961, "engine_peak_rss_mb": 14.87890625, "measure_secs": 30.000993009, "num_series": 1000, "sender_cpu_cores": 4.196194438038576, "target_rate": 1447949.2241866323, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1737541.3052999876, "concurrency": 16, "engine_cpu_cores": 7.218756563556783, "engine_peak_rss_mb": 14.43359375, "measure_secs": 30.001011683, "num_series": 1000, "sender_cpu_cores": 5.036496822059519, "target_rate": 1737539.0690239589, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 635363.1787275816, "concurrency": 16, "engine_cpu_cores": 6.2511153619415545, "engine_peak_rss_mb": 723.23828125, "measure_secs": 30.001046076, "num_series": 1000, "sender_cpu_cores": 1.7456057987889473, "target_rate": 0.0, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 63563.26602134065, "concurrency": 16, "engine_cpu_cores": 1.1892697072057863, "engine_peak_rss_mb": 566.5390625, "measure_secs": 30.001605005, "num_series": 1000, "sender_cpu_cores": 0.1846567874977594, "target_rate": 63536.31787275817, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 158830.90371288234, "concurrency": 16, "engine_cpu_cores": 2.8009571540385108, "engine_peak_rss_mb": 587.984375, "measure_secs": 30.000458907, "num_series": 1000, "sender_cpu_cores": 0.44299322357695825, "target_rate": 158840.7946818954, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 317673.23826128105, "concurrency": 16, "engine_cpu_cores": 5.118470712157617, "engine_peak_rss_mb": 587.20703125, "measure_secs": 30.001148514, "num_series": 1000, "sender_cpu_cores": 0.9006321870441443, "target_rate": 317681.5893637908, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 476520.8880805265, "concurrency": 16, "engine_cpu_cores": 5.255839939176077, "engine_peak_rss_mb": 616.32421875, "measure_secs": 30.000913617, "num_series": 1000, "sender_cpu_cores": 1.3476256262106088, "target_rate": 476522.3840456862, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 571812.9031464267, "concurrency": 16, "engine_cpu_cores": 5.610820138053437, "engine_peak_rss_mb": 642.07421875, "measure_secs": 30.000961688, "num_series": 1000, "sender_cpu_cores": 1.5916156454111066, "target_rate": 571826.8608548235, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1356776.1047613262, "concurrency": 16, "engine_cpu_cores": 6.888587656173588, "engine_peak_rss_mb": 165.734375, "measure_secs": 30.000344093, "num_series": 10000, "sender_cpu_cores": 1.6426478258793884, "target_rate": 0.0, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 135659.95561388243, "concurrency": 16, "engine_cpu_cores": 1.295602573639216, "engine_peak_rss_mb": 127.29296875, "measure_secs": 30.00148409, "num_series": 10000, "sender_cpu_cores": 0.17199149163823915, "target_rate": 135677.61047613263, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 339317.2347212069, "concurrency": 16, "engine_cpu_cores": 3.260511974501813, "engine_peak_rss_mb": 136.8515625, "measure_secs": 30.001423324, "num_series": 10000, "sender_cpu_cores": 0.40031434076637473, "target_rate": 339194.02619033155, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 678694.8862630479, "concurrency": 16, "engine_cpu_cores": 5.055078004881861, "engine_peak_rss_mb": 154.9375, "measure_secs": 30.001515279, "num_series": 10000, "sender_cpu_cores": 0.7936265811435916, "target_rate": 678388.0523806631, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 1017459.4613936165, "concurrency": 16, "engine_cpu_cores": 5.156566798749933, "engine_peak_rss_mb": 164.3515625, "measure_secs": 30.000581014, "num_series": 10000, "sender_cpu_cores": 1.2416426196085002, "target_rate": 1017582.0785709947, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 1220930.8803761164, "concurrency": 16, "engine_cpu_cores": 6.179650156203439, "engine_peak_rss_mb": 160.82421875, "measure_secs": 30.001698367, "num_series": 10000, "sender_cpu_cores": 1.4635838099185166, "target_rate": 1221098.4942851937, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 1268864.4643137404, "concurrency": 16, "engine_cpu_cores": 6.338405898309604, "engine_peak_rss_mb": 93.5703125, "measure_secs": 30.00123423, "num_series": 10000, "sender_cpu_cores": 1.511271158126617, "target_rate": 0.0, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 126658.96719470987, "concurrency": 16, "engine_cpu_cores": 1.193594109274358, "engine_peak_rss_mb": 66.26171875, "measure_secs": 30.00182367, "num_series": 10000, "sender_cpu_cores": 0.15632383056399718, "target_rate": 126886.44643137405, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 316993.9574189178, "concurrency": 16, "engine_cpu_cores": 2.9406106123550924, "engine_peak_rss_mb": 73.25390625, "measure_secs": 30.000571864, "num_series": 10000, "sender_cpu_cores": 0.37399287089802924, "target_rate": 317216.1160784351, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 633938.8507549079, "concurrency": 16, "engine_cpu_cores": 4.760030614902351, "engine_peak_rss_mb": 88.56640625, "measure_secs": 30.001907877, "num_series": 10000, "sender_cpu_cores": 0.7306202022173485, "target_rate": 634432.2321568702, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 951649.7437722407, "concurrency": 16, "engine_cpu_cores": 4.715812902481001, "engine_peak_rss_mb": 91.0703125, "measure_secs": 30.001190235, "num_series": 10000, "sender_cpu_cores": 1.1412880533004628, "target_rate": 951648.3482353053, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 1142234.721125731, "concurrency": 16, "engine_cpu_cores": 5.572490490150825, "engine_peak_rss_mb": 96.18359375, "measure_secs": 30.000948462, "num_series": 10000, "sender_cpu_cores": 1.346957415402529, "target_rate": 1141978.0178823664, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 2441448.4253568654, "concurrency": 16, "engine_cpu_cores": 7.993293186703595, "engine_peak_rss_mb": 21.65625, "measure_secs": 30.001401725, "num_series": 10000, "sender_cpu_cores": 2.753538009897769, "target_rate": 0.0, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 244053.1597194978, "concurrency": 16, "engine_cpu_cores": 1.6602697923179768, "engine_peak_rss_mb": 20.94140625, "measure_secs": 30.001148145, "num_series": 10000, "sender_cpu_cores": 0.2859890547698904, "target_rate": 244144.84253568656, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 610316.3143170627, "concurrency": 16, "engine_cpu_cores": 4.143884445434038, "engine_peak_rss_mb": 21.23046875, "measure_secs": 30.000836567, "num_series": 10000, "sender_cpu_cores": 0.717979978721438, "target_rate": 610362.1063392163, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1220785.4068445887, "concurrency": 16, "engine_cpu_cores": 5.220461717952205, "engine_peak_rss_mb": 21.0390625, "measure_secs": 30.001177762, "num_series": 10000, "sender_cpu_cores": 1.366613015170734, "target_rate": 1220724.2126784327, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1831005.9947168515, "concurrency": 16, "engine_cpu_cores": 6.137670920180875, "engine_peak_rss_mb": 21.34375, "measure_secs": 30.001608492, "num_series": 10000, "sender_cpu_cores": 2.1432184216771493, "target_rate": 1831086.3190176492, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 2197246.8569295118, "concurrency": 16, "engine_cpu_cores": 7.3322390517072105, "engine_peak_rss_mb": 21.3359375, "measure_secs": 30.001749595, "num_series": 10000, "sender_cpu_cores": 2.564183790562032, "target_rate": 2197303.5828211787, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1725496.0647779645, "concurrency": 16, "engine_cpu_cores": 7.753368145710985, "engine_peak_rss_mb": 766.015625, "measure_secs": 30.001155063, "num_series": 10000, "sender_cpu_cores": 1.9342588603052682, "target_rate": 0.0, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 172663.750554339, "concurrency": 16, "engine_cpu_cores": 1.4426423019289174, "engine_peak_rss_mb": 551.4453125, "measure_secs": 30.000506669, "num_series": 10000, "sender_cpu_cores": 0.20266324389389598, "target_rate": 172549.60647779645, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 431329.64672646264, "concurrency": 16, "engine_cpu_cores": 3.4974678449462626, "engine_peak_rss_mb": 579.61328125, "measure_secs": 30.00170542, "num_series": 10000, "sender_cpu_cores": 0.49397191901366255, "target_rate": 431374.0161944911, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 862837.1204725292, "concurrency": 16, "engine_cpu_cores": 5.11510877426102, "engine_peak_rss_mb": 592.20703125, "measure_secs": 30.001317034, "num_series": 10000, "sender_cpu_cores": 0.9539581201573726, "target_rate": 862748.0323889822, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1294064.7605830163, "concurrency": 16, "engine_cpu_cores": 5.499499199216752, "engine_peak_rss_mb": 611.46484375, "measure_secs": 30.000913542, "num_series": 10000, "sender_cpu_cores": 1.5029542329394712, "target_rate": 1294122.0485834733, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1552890.3401333166, "concurrency": 16, "engine_cpu_cores": 6.564712564498011, "engine_peak_rss_mb": 640.07421875, "measure_secs": 30.001313548, "num_series": 10000, "sender_cpu_cores": 1.7845885285769156, "target_rate": 1552946.4583001682, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 709399.390818914, "concurrency": 16, "engine_cpu_cores": 4.973762021237531, "engine_peak_rss_mb": 1249.859375, "measure_secs": 30.001435405, "num_series": 100000, "sender_cpu_cores": 0.697299969737898, "target_rate": 0.0, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 71063.04302708294, "concurrency": 16, "engine_cpu_cores": 0.7956260961803329, "engine_peak_rss_mb": 1090.796875, "measure_secs": 30.001529757, "num_series": 100000, "sender_cpu_cores": 0.07332959411800304, "target_rate": 70939.93908189141, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 177723.392695265, "concurrency": 16, "engine_cpu_cores": 1.9622235798893946, "engine_peak_rss_mb": 1139.359375, "measure_secs": 30.001677996, "num_series": 100000, "sender_cpu_cores": 0.18898942921645773, "target_rate": 177349.8477047285, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 354384.57133611, "concurrency": 16, "engine_cpu_cores": 3.447516573861349, "engine_peak_rss_mb": 1149.12109375, "measure_secs": 30.001306095, "num_series": 100000, "sender_cpu_cores": 0.3683172980872852, "target_rate": 354699.695409457, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 532828.2350500156, "concurrency": 16, "engine_cpu_cores": 4.1574968413742734, "engine_peak_rss_mb": 1155.68359375, "measure_secs": 30.001225439, "num_series": 100000, "sender_cpu_cores": 0.5393113035631825, "target_rate": 532049.5431141856, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 635659.7204471356, "concurrency": 16, "engine_cpu_cores": 4.568710496654023, "engine_peak_rss_mb": 1194.96484375, "measure_secs": 30.001900996, "num_series": 100000, "sender_cpu_cores": 0.6379595747133436, "target_rate": 638459.4517370226, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 571846.5683795284, "concurrency": 16, "engine_cpu_cores": 4.42444668774928, "engine_peak_rss_mb": 447.23828125, "measure_secs": 30.001491569, "num_series": 100000, "sender_cpu_cores": 0.5666384939862721, "target_rate": 0.0, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 57730.618527904815, "concurrency": 16, "engine_cpu_cores": 0.6943006835659683, "engine_peak_rss_mb": 415.84765625, "measure_secs": 30.001410762, "num_series": 100000, "sender_cpu_cores": 0.058997225631865775, "target_rate": 57184.65683795284, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 142260.999140206, "concurrency": 16, "engine_cpu_cores": 1.5752705762338648, "engine_peak_rss_mb": 428.91796875, "measure_secs": 30.001195168, "num_series": 100000, "sender_cpu_cores": 0.14866074418118996, "target_rate": 142961.6420948821, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 288785.7672800953, "concurrency": 16, "engine_cpu_cores": 2.8138613196890176, "engine_peak_rss_mb": 440.6640625, "measure_secs": 30.001478541, "num_series": 100000, "sender_cpu_cores": 0.2966520462595624, "target_rate": 285923.2841897642, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 418300.2493718561, "concurrency": 16, "engine_cpu_cores": 3.5528605586315107, "engine_peak_rss_mb": 459.96875, "measure_secs": 30.001177429, "num_series": 100000, "sender_cpu_cores": 0.42198343814874684, "target_rate": 428884.92628464627, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 528089.2948794035, "concurrency": 16, "engine_cpu_cores": 4.060725446637174, "engine_peak_rss_mb": 449.74609375, "measure_secs": 30.002028357, "num_series": 100000, "sender_cpu_cores": 0.5306307897107758, "target_rate": 514661.9115415755, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 2328141.8682868565, "concurrency": 16, "engine_cpu_cores": 8.000295088961114, "engine_peak_rss_mb": 34.21875, "measure_secs": 30.001393365, "num_series": 100000, "sender_cpu_cores": 2.263894852271639, "target_rate": 0.0, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 233324.4373414009, "concurrency": 16, "engine_cpu_cores": 1.6752694601112583, "engine_peak_rss_mb": 32.59375, "measure_secs": 30.001143814, "num_series": 100000, "sender_cpu_cores": 0.23365775796617433, "target_rate": 232814.18682868566, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 582096.2737471947, "concurrency": 16, "engine_cpu_cores": 3.9604145239716937, "engine_peak_rss_mb": 31.75, "measure_secs": 30.001909972, "num_series": 100000, "sender_cpu_cores": 0.5946288091874686, "target_rate": 582035.4670717141, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1164207.9219767456, "concurrency": 16, "engine_cpu_cores": 4.806090823116896, "engine_peak_rss_mb": 34.33984375, "measure_secs": 30.001513768, "num_series": 100000, "sender_cpu_cores": 1.1942730715880323, "target_rate": 1164070.9341434282, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1746063.2957080328, "concurrency": 16, "engine_cpu_cores": 6.181752039210671, "engine_peak_rss_mb": 35.60546875, "measure_secs": 30.001203352, "num_series": 100000, "sender_cpu_cores": 1.8462592766735633, "target_rate": 1746106.4012151423, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 2095429.8055418716, "concurrency": 16, "engine_cpu_cores": 7.4302026271528785, "engine_peak_rss_mb": 35.140625, "measure_secs": 30.000527736, "num_series": 100000, "sender_cpu_cores": 2.1846282364344343, "target_rate": 2095327.6814581708, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1940464.8402284107, "concurrency": 16, "engine_cpu_cores": 7.787058471453918, "engine_peak_rss_mb": 681.5546875, "measure_secs": 30.001058918, "num_series": 100000, "sender_cpu_cores": 1.9095992630322531, "target_rate": 0.0, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 193323.41438580563, "concurrency": 16, "engine_cpu_cores": 1.5072559997458845, "engine_peak_rss_mb": 373.234375, "measure_secs": 30.001539226, "num_series": 100000, "sender_cpu_cores": 0.1966565767028023, "target_rate": 194046.4840228411, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 484717.77686563163, "concurrency": 16, "engine_cpu_cores": 3.573551977565972, "engine_peak_rss_mb": 419.17578125, "measure_secs": 30.000962816, "num_series": 100000, "sender_cpu_cores": 0.4969840498601683, "target_rate": 485116.21005710267, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 970081.8534822376, "concurrency": 16, "engine_cpu_cores": 4.676085185026907, "engine_peak_rss_mb": 490.68359375, "measure_secs": 30.001592026, "num_series": 100000, "sender_cpu_cores": 0.9852810468985342, "target_rate": 970232.4201142053, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1455276.508326856, "concurrency": 16, "engine_cpu_cores": 5.759108454162029, "engine_peak_rss_mb": 527.12109375, "measure_secs": 30.001171427, "num_series": 100000, "sender_cpu_cores": 1.5212739312880832, "target_rate": 1455348.630171308, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1746574.895940434, "concurrency": 16, "engine_cpu_cores": 6.899703307468006, "engine_peak_rss_mb": 530.08984375, "measure_secs": 30.001290023, "num_series": 100000, "sender_cpu_cores": 1.812588723961885, "target_rate": 1746418.3562055696, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 890078.3175236791, "concurrency": 16, "engine_cpu_cores": 5.747419038351077, "engine_peak_rss_mb": 11503.44921875, "measure_secs": 30.001292554, "num_series": 1000000, "sender_cpu_cores": 0.9292932946078294, "target_rate": 0.0, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 89329.50707064637, "concurrency": 16, "engine_cpu_cores": 1.0202896311315244, "engine_peak_rss_mb": 9719.6953125, "measure_secs": 30.001284994, "num_series": 1000000, "sender_cpu_cores": 0.09099610235181516, "target_rate": 89007.83175236791, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 228523.42462619857, "concurrency": 16, "engine_cpu_cores": 2.4222283062406436, "engine_peak_rss_mb": 10766.3984375, "measure_secs": 30.001300791, "num_series": 1000000, "sender_cpu_cores": 0.23698972419665576, "target_rate": 222519.57938091978, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 462245.1282162439, "concurrency": 16, "engine_cpu_cores": 4.043811577386408, "engine_peak_rss_mb": 11302.48046875, "measure_secs": 30.001397859, "num_series": 1000000, "sender_cpu_cores": 0.4843107667278644, "target_rate": 445039.15876183956, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 667352.7938435884, "concurrency": 16, "engine_cpu_cores": 4.805993374503397, "engine_peak_rss_mb": 11264.828125, "measure_secs": 30.002122093, "num_series": 1000000, "sender_cpu_cores": 0.6852848587266096, "target_rate": 667558.7381427593, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 844365.8580946735, "concurrency": 16, "engine_cpu_cores": 5.566774907642168, "engine_peak_rss_mb": 11218.328125, "measure_secs": 30.001213049, "num_series": 1000000, "sender_cpu_cores": 0.8696315031458247, "target_rate": 801070.4857713112, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 830502.5798228025, "concurrency": 16, "engine_cpu_cores": 5.537128293472626, "engine_peak_rss_mb": 4018.0, "measure_secs": 30.0011109, "num_series": 1000000, "sender_cpu_cores": 0.8569682664650928, "target_rate": 0.0, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 82663.31641889275, "concurrency": 16, "engine_cpu_cores": 1.0436243697885208, "engine_peak_rss_mb": 3066.09765625, "measure_secs": 30.001215865, "num_series": 1000000, "sender_cpu_cores": 0.08532987501305057, "target_rate": 83050.25798228025, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 207457.33546392058, "concurrency": 16, "engine_cpu_cores": 2.3288952488534918, "engine_peak_rss_mb": 3750.0703125, "measure_secs": 30.001349367, "num_series": 1000000, "sender_cpu_cores": 0.21432369328936524, "target_rate": 207625.6449557006, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 398583.26366147824, "concurrency": 16, "engine_cpu_cores": 3.6518466605411906, "engine_peak_rss_mb": 3983.68359375, "measure_secs": 30.001259687, "num_series": 1000000, "sender_cpu_cores": 0.4183157684354869, "target_rate": 415251.2899114012, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 607306.6306883321, "concurrency": 16, "engine_cpu_cores": 4.501802060415265, "engine_peak_rss_mb": 3999.2109375, "measure_secs": 30.001319069, "num_series": 1000000, "sender_cpu_cores": 0.6313055754795286, "target_rate": 622876.9348671018, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 845941.75292754, "concurrency": 16, "engine_cpu_cores": 5.488396896591688, "engine_peak_rss_mb": 3969.19140625, "measure_secs": 30.001474584, "num_series": 1000000, "sender_cpu_cores": 0.8662907527172231, "target_rate": 747452.3218405222, "label": "ddsketch", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 2313963.044391897, "concurrency": 16, "engine_cpu_cores": 7.9994236761730795, "engine_peak_rss_mb": 33.98828125, "measure_secs": 30.00091128, "num_series": 1000000, "sender_cpu_cores": 2.231932202827407, "target_rate": 0.0, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 231189.23125184613, "concurrency": 16, "engine_cpu_cores": 1.7075871275997803, "engine_peak_rss_mb": 32.28125, "measure_secs": 30.001397394, "num_series": 1000000, "sender_cpu_cores": 0.22098970634367643, "target_rate": 231396.30443918973, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 578646.2155541821, "concurrency": 16, "engine_cpu_cores": 3.93386096542077, "engine_peak_rss_mb": 32.8125, "measure_secs": 30.001060291, "num_series": 1000000, "sender_cpu_cores": 0.5659799965501159, "target_rate": 578490.7610979743, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1157007.2758633865, "concurrency": 16, "engine_cpu_cores": 4.764088785986225, "engine_peak_rss_mb": 34.40234375, "measure_secs": 30.001539942, "num_series": 1000000, "sender_cpu_cores": 1.1362750067464522, "target_rate": 1156981.5221959485, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 1735382.7909886907, "concurrency": 16, "engine_cpu_cores": 6.281696388862336, "engine_peak_rss_mb": 33.1484375, "measure_secs": 30.00144998, "num_series": 1000000, "sender_cpu_cores": 1.7392492707780784, "target_rate": 1735472.283293923, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 2082858.5533652639, "concurrency": 16, "engine_cpu_cores": 7.544395803493372, "engine_peak_rss_mb": 35.55078125, "measure_secs": 30.001077077, "num_series": 1000000, "sender_cpu_cores": 2.066925792058955, "target_rate": 2082566.7399527074, "label": "cms_heap", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/cms_heap.yaml"} +{"achieved_rate": 2115471.185517008, "concurrency": 16, "engine_cpu_cores": 7.998161378462409, "engine_peak_rss_mb": 397.796875, "measure_secs": 30.000644979, "num_series": 1000000, "sender_cpu_cores": 2.0356229021992056, "target_rate": 0.0, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 211592.17241559824, "concurrency": 16, "engine_cpu_cores": 1.633939554475839, "engine_peak_rss_mb": 299.90625, "measure_secs": 30.001109812, "num_series": 1000000, "sender_cpu_cores": 0.2053257375677513, "target_rate": 211547.1185517008, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 529038.6710159085, "concurrency": 16, "engine_cpu_cores": 3.760134354668891, "engine_peak_rss_mb": 347.2109375, "measure_secs": 30.001587539, "num_series": 1000000, "sender_cpu_cores": 0.5199724841134181, "target_rate": 528867.796379252, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1058089.458595843, "concurrency": 16, "engine_cpu_cores": 4.689138893499975, "engine_peak_rss_mb": 349.1875, "measure_secs": 30.00124398, "num_series": 1000000, "sender_cpu_cores": 1.039956877148132, "target_rate": 1057735.592758504, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1586630.8051612193, "concurrency": 16, "engine_cpu_cores": 6.263858422392779, "engine_peak_rss_mb": 362.66796875, "measure_secs": 30.000678069, "num_series": 1000000, "sender_cpu_cores": 1.578964311774936, "target_rate": 1586603.389137756, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1903699.4978020424, "concurrency": 16, "engine_cpu_cores": 7.538268698093461, "engine_peak_rss_mb": 382.3984375, "measure_secs": 30.001583793000002, "num_series": 1000000, "sender_cpu_cores": 1.8922334364642988, "target_rate": 1903924.066965307, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} diff --git a/asap-tools/experiments/microbench/precompute_throughput/results/scaling.jsonl b/asap-tools/experiments/microbench/precompute_throughput/results/scaling.jsonl new file mode 100644 index 00000000..7c95e714 --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/results/scaling.jsonl @@ -0,0 +1,10 @@ +{"achieved_rate": 87929.36503712453, "concurrency": 16, "engine_cpu_cores": 0.9999548715366702, "engine_peak_rss_mb": 9997.1875, "measure_secs": 30.001353915, "num_series": 1000000, "sender_cpu_cores": 0.08099634459447029, "target_rate": 0.0, "label": "kll", "workers": 1, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 201570.53225401265, "concurrency": 16, "engine_cpu_cores": 1.7005586697973916, "engine_peak_rss_mb": 10953.75390625, "measure_secs": 30.001905201, "num_series": 1000000, "sender_cpu_cores": 0.18598818850390914, "target_rate": 0.0, "label": "kll", "workers": 2, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 417425.7815861193, "concurrency": 16, "engine_cpu_cores": 3.06561120597903, "engine_peak_rss_mb": 11470.6953125, "measure_secs": 30.000542737, "num_series": 1000000, "sender_cpu_cores": 0.400659418243644, "target_rate": 0.0, "label": "kll", "workers": 4, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 762419.7390335905, "concurrency": 16, "engine_cpu_cores": 5.2835724581040715, "engine_peak_rss_mb": 11399.6171875, "measure_secs": 30.000534914, "num_series": 1000000, "sender_cpu_cores": 0.7849860033332338, "target_rate": 0.0, "label": "kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 970471.9564582388, "concurrency": 16, "engine_cpu_cores": 6.856586286677075, "engine_peak_rss_mb": 11195.80078125, "measure_secs": 30.000351691, "num_series": 1000000, "sender_cpu_cores": 0.9439889335862653, "target_rate": 0.0, "label": "kll", "workers": 14, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 252921.85809158641, "concurrency": 16, "engine_cpu_cores": 0.9999546313584071, "engine_peak_rss_mb": 268.5, "measure_secs": 30.001361121, "num_series": 1000000, "sender_cpu_cores": 0.23165615626469765, "target_rate": 0.0, "label": "hydra_kll", "workers": 1, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 547227.7955755212, "concurrency": 16, "engine_cpu_cores": 1.9922524952976337, "engine_peak_rss_mb": 486.20703125, "measure_secs": 30.001217286, "num_series": 1000000, "sender_cpu_cores": 0.5146457842963938, "target_rate": 0.0, "label": "hydra_kll", "workers": 2, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 974031.594073765, "concurrency": 16, "engine_cpu_cores": 3.699136840116569, "engine_peak_rss_mb": 565.875, "measure_secs": 30.00159356, "num_series": 1000000, "sender_cpu_cores": 0.9776147370753195, "target_rate": 0.0, "label": "hydra_kll", "workers": 4, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 2135904.6589227486, "concurrency": 16, "engine_cpu_cores": 7.999038694875603, "engine_peak_rss_mb": 397.89453125, "measure_secs": 30.001105027, "num_series": 1000000, "sender_cpu_cores": 2.04292475043306, "target_rate": 0.0, "label": "hydra_kll", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} +{"achieved_rate": 1660196.5322728995, "concurrency": 16, "engine_cpu_cores": 9.6492590372567, "engine_peak_rss_mb": 651.4765625, "measure_secs": 30.001267339, "num_series": 1000000, "sender_cpu_cores": 1.5799332562988964, "target_rate": 0.0, "label": "hydra_kll", "workers": 14, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/hydra_kll.yaml"} diff --git a/asap-tools/experiments/microbench/precompute_throughput/results/scaling.out b/asap-tools/experiments/microbench/precompute_throughput/results/scaling.out new file mode 100644 index 00000000..fbde5e31 --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/results/scaling.out @@ -0,0 +1,21 @@ +[kll] series=1000000 workers=1 rate=0 + achieved=87929/s cpu=1.00 cores sender_cpu=0.08 cores rss=9997MB +[kll] series=1000000 workers=2 rate=0 + achieved=201571/s cpu=1.70 cores sender_cpu=0.19 cores rss=10954MB +[kll] series=1000000 workers=4 rate=0 + achieved=417426/s cpu=3.07 cores sender_cpu=0.40 cores rss=11471MB +[kll] series=1000000 workers=8 rate=0 + achieved=762420/s cpu=5.28 cores sender_cpu=0.78 cores rss=11400MB +[kll] series=1000000 workers=14 rate=0 + achieved=970472/s cpu=6.86 cores sender_cpu=0.94 cores rss=11196MB +[hydra_kll] series=1000000 workers=1 rate=0 + achieved=252922/s cpu=1.00 cores sender_cpu=0.23 cores rss=268MB +[hydra_kll] series=1000000 workers=2 rate=0 + achieved=547228/s cpu=1.99 cores sender_cpu=0.51 cores rss=486MB +[hydra_kll] series=1000000 workers=4 rate=0 + achieved=974032/s cpu=3.70 cores sender_cpu=0.98 cores rss=566MB +[hydra_kll] series=1000000 workers=8 rate=0 + achieved=2135905/s cpu=8.00 cores sender_cpu=2.04 cores rss=398MB +[hydra_kll] series=1000000 workers=14 rate=0 + achieved=1660197/s cpu=9.65 cores sender_cpu=1.58 cores rss=651MB +EXIT=0 diff --git a/asap-tools/experiments/microbench/precompute_throughput/results/scaling.png b/asap-tools/experiments/microbench/precompute_throughput/results/scaling.png new file mode 100644 index 00000000..4026b8b3 Binary files /dev/null and b/asap-tools/experiments/microbench/precompute_throughput/results/scaling.png differ diff --git a/asap-tools/experiments/microbench/precompute_throughput/results/window.jsonl b/asap-tools/experiments/microbench/precompute_throughput/results/window.jsonl new file mode 100644 index 00000000..34b4fca6 --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/results/window.jsonl @@ -0,0 +1,4 @@ +{"achieved_rate": 693173.5589862084, "concurrency": 16, "engine_cpu_cores": 4.914871609464262, "engine_peak_rss_mb": 1274.0546875, "measure_secs": 30.000783686, "num_series": 100000, "sender_cpu_cores": 0.6919819234484781, "target_rate": 0.0, "label": "kll_tumbling", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/kll.yaml"} +{"achieved_rate": 58624.4632578642, "concurrency": 16, "engine_cpu_cores": 6.98693603040848, "engine_peak_rss_mb": 29719.15234375, "measure_secs": 30.000274668, "num_series": 100000, "sender_cpu_cores": 0.0616661020765025, "target_rate": 0.0, "label": "kll_sliding", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/results/configs/kll_sliding.yaml"} +{"achieved_rate": 598237.6917580235, "concurrency": 16, "engine_cpu_cores": 4.496574153400606, "engine_peak_rss_mb": 454.75390625, "measure_secs": 30.000617225, "num_series": 100000, "sender_cpu_cores": 0.6013209616556481, "target_rate": 0.0, "label": "ddsketch_tumbling", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/configs/ddsketch.yaml"} +{"achieved_rate": 108662.67405954534, "concurrency": 16, "engine_cpu_cores": 5.8527849503421985, "engine_peak_rss_mb": 6150.16015625, "measure_secs": 30.001102294, "num_series": 100000, "sender_cpu_cores": 0.1053294631988231, "target_rate": 0.0, "label": "ddsketch_sliding", "workers": 8, "config": "/scratch/sketch_db_for_prometheus/code/asap-tools/experiments/microbench/precompute_throughput/results/configs/ddsketch_sliding.yaml"} diff --git a/asap-tools/experiments/microbench/precompute_throughput/results/window.out b/asap-tools/experiments/microbench/precompute_throughput/results/window.out new file mode 100644 index 00000000..31e9c764 --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/results/window.out @@ -0,0 +1,9 @@ +[kll_tumbling] series=100000 workers=8 rate=0 + achieved=693174/s cpu=4.91 cores sender_cpu=0.69 cores rss=1274MB +[kll_sliding] series=100000 workers=8 rate=0 + achieved=58624/s cpu=6.99 cores sender_cpu=0.06 cores rss=29719MB +[ddsketch_tumbling] series=100000 workers=8 rate=0 + achieved=598238/s cpu=4.50 cores sender_cpu=0.60 cores rss=455MB +[ddsketch_sliding] series=100000 workers=8 rate=0 + achieved=108663/s cpu=5.85 cores sender_cpu=0.11 cores rss=6150MB +EXIT=0 diff --git a/asap-tools/experiments/microbench/precompute_throughput/results/window.png b/asap-tools/experiments/microbench/precompute_throughput/results/window.png new file mode 100644 index 00000000..31bddb90 Binary files /dev/null and b/asap-tools/experiments/microbench/precompute_throughput/results/window.png differ diff --git a/asap-tools/experiments/microbench/precompute_throughput/sweep.py b/asap-tools/experiments/microbench/precompute_throughput/sweep.py new file mode 100644 index 00000000..9e22c31f --- /dev/null +++ b/asap-tools/experiments/microbench/precompute_throughput/sweep.py @@ -0,0 +1,270 @@ +"""Precompute-engine throughput microbenchmark sweep. + +Each point starts a fresh `precompute_engine` with N workers pinned to the +first N of --engine-cpus, drives it with `bench_ingest_sender` pinned to +--sender-cpus, and appends the sender's JSON result (plus the point's +parameters) to --out as one line. Give --engine-cpus one hyperthread per +physical core so workers never share a core. + +Build first (in asap-query-engine): + cargo build --release --bin precompute_engine --bin bench_ingest_sender + +Usage: + python sweep.py --bin-dir ../../../../target/release \ + --engine-cpus $(seq -s, 0 2 26) --sender-cpus 1-55:2 \ + --experiment main --out results/main.jsonl + +Experiments: + main every pipeline x cardinality: saturation, then RATE_FRACTIONS of it + fanin KLL with grouping by all labels / l0,l1 / nothing + window KLL and DDSketch, tumbling vs sliding + scaling KLL and HydraKLL at 1M series over WORKER_COUNTS +""" + +import argparse +import json +import os +import socket +import subprocess +import time + +import yaml + +CONFIG_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "configs") +PIPELINES = ["kll", "ddsketch", "cms_heap", "hydra_kll"] +# Engine with --pass-raw-samples: decode/route/store cost with no sketching. +RAW_PIPELINE = "raw" +RAW_BASE_CONFIG = "kll" +AGGREGATION_ID = 1 # every config in CONFIG_DIR uses this id + +SERIES_COUNTS = [1_000, 10_000, 100_000, 1_000_000] +DEFAULT_SERIES = 100_000 +# The engine is pinned to as many CPUs as it has workers (taskset), so +# decode/routing on the async runtime can't spill onto extra cores. +DEFAULT_WORKERS = 8 +RATE_FRACTIONS = [0.1, 0.25, 0.5, 0.75, 0.9] +WORKER_COUNTS = [1, 2, 4, 8, 14] +SCALING_SERIES = 1_000_000 +FANIN_GROUPINGS = { + "1to1": ["l0", "l1", "l2", "l3", "l4"], + "100groups": ["l0", "l1"], + "1group": [], +} +SLIDING_WINDOW_MS = 60_000 +SLIDING_SLIDE_MS = 1_000 + +STEP_MS = 1_000 # simulated scrape interval +# The engine handles each request mostly serially, so in-flight requests +# (one per sender) must exceed engine cores or low-cardinality runs measure +# request latency, not throughput. +SENDER_CONCURRENCY = 16 +SAMPLES_PER_REQUEST = 2_000 # Prometheus' default max_samples_per_send +# Must exceed the sender's MAX_PASS_SKEW (2) * STEP_MS, or skewed senders' +# samples are dropped as late. +ALLOWED_LATENESS_MS = 5_000 +# Disables the engine's wall-clock fallback that force-closes panes idle for +# window + grace of wall time. With per-series groups at low rates, one pass +# over all series can exceed that, so it would drop samples the sender still +# counts as acked. The sender always advances event time, so it isn't needed. +WALL_CLOCK_GRACE_PERIOD_MS = 0 +# Store keeps this many x4 windows per key (per_key.rs max_epochs). Memory is +# ~ series x 4 x sketch size, so 1M per-series KLLs stay in tens of GB. +NUM_AGGREGATES_TO_RETAIN = 1 +WARMUP_SECS = 15 +MEASURE_SECS = 30 +BASE_PORT = 19500 +ENGINE_READY_TIMEOUT_SECS = 30 +ENGINE_READY_POLL_SECS = 0.2 +ENGINE_STOP_TIMEOUT_SECS = 10 +SENDER_TIMEOUT_SECS = WARMUP_SECS + MEASURE_SECS + 120 + + +def config_variant(base, out_dir, name, **overrides): + """Write CONFIG_DIR/.yaml with aggregation fields overridden.""" + with open(os.path.join(CONFIG_DIR, f"{base}.yaml")) as f: + cfg = yaml.safe_load(f) + agg = cfg["aggregations"][0] + for key, value in overrides.items(): + if key == "grouping": + agg["labels"]["grouping"] = value + else: + agg[key] = value + path = os.path.join(out_dir, "configs", f"{name}.yaml") + os.makedirs(os.path.dirname(path), exist_ok=True) + with open(path, "w") as f: + yaml.safe_dump(cfg, f) + return path + + +def wait_for_port(port, proc): + deadline = time.monotonic() + ENGINE_READY_TIMEOUT_SECS + while time.monotonic() < deadline: + if proc.poll() is not None: + raise RuntimeError(f"engine exited with {proc.returncode} before ready") + with socket.socket() as s: + if s.connect_ex(("127.0.0.1", port)) == 0: + return + time.sleep(ENGINE_READY_POLL_SECS) + raise RuntimeError( + f"engine not listening on {port} after {ENGINE_READY_TIMEOUT_SECS}s" + ) + + +class Runner: + def __init__(self, args): + self.args = args + self.port = BASE_PORT + os.makedirs(os.path.join(args.out_dir, "logs"), exist_ok=True) + + def run(self, label, config_path, series, workers, rate, raw=False): + """One engine + sender run; returns the result dict (also appended to --out).""" + a = self.args + self.port += 1 # fresh port per run sidesteps TIME_WAIT on rebind + engine_cmd = [ + "taskset", "-c", ",".join(a.engine_cpus[:workers]), + os.path.join(a.bin_dir, "precompute_engine"), + "--streaming-config", config_path, + "--num-workers", str(workers), + "--ingest-port", str(self.port), + "--query-port", "0", + "--allowed-lateness-ms", str(ALLOWED_LATENESS_MS), + "--wall-clock-grace-period-ms", str(WALL_CLOCK_GRACE_PERIOD_MS), + "--num-aggregates-to-retain", str(NUM_AGGREGATES_TO_RETAIN), + ] # fmt: skip + if raw: + engine_cmd += [ + "--pass-raw-samples", + "--raw-mode-aggregation-id", + str(AGGREGATION_ID), + ] + log_path = os.path.join( + a.out_dir, "logs", f"{label}_s{series}_w{workers}_r{int(rate)}.log" + ) + print( + f"[{label}] series={series} workers={workers} rate={rate:.0f}", flush=True + ) + with open(log_path, "w") as log: + engine = subprocess.Popen( + engine_cmd, stdout=log, stderr=subprocess.STDOUT, + env={**os.environ, "RUST_LOG": "warn"}, + ) # fmt: skip + try: + wait_for_port(self.port, engine) + sender = subprocess.run( + [ + "taskset", "-c", a.sender_cpus, + os.path.join(a.bin_dir, "bench_ingest_sender"), + "--engine-pid", str(engine.pid), + "--port", str(self.port), + "--num-series", str(series), + "--target-rate", str(rate), + "--concurrency", str(SENDER_CONCURRENCY), + "--samples-per-request", str(SAMPLES_PER_REQUEST), + "--step-ms", str(STEP_MS), + "--warmup-secs", str(WARMUP_SECS), + "--measure-secs", str(MEASURE_SECS), + ], # fmt: skip + capture_output=True, text=True, timeout=SENDER_TIMEOUT_SECS, check=True, + ) # fmt: skip + finally: + engine.terminate() + engine.wait(timeout=ENGINE_STOP_TIMEOUT_SECS) + result = json.loads(sender.stdout.strip().splitlines()[-1]) + result.update(label=label, workers=workers, config=config_path) + with open(a.out, "a") as f: + f.write(json.dumps(result) + "\n") + print( + f" achieved={result['achieved_rate']:.0f}/s " + f"cpu={result['engine_cpu_cores']:.2f} cores " + f"sender_cpu={result['sender_cpu_cores']:.2f} cores " + f"rss={result['engine_peak_rss_mb']:.0f}MB", + flush=True, + ) + return result + + def saturation_then_fractions(self, label, config_path, series, workers, raw=False): + sat = self.run(label, config_path, series, workers, 0, raw) + for frac in RATE_FRACTIONS: + self.run( + label, config_path, series, workers, frac * sat["achieved_rate"], raw + ) + + +def main_experiment(r): + for series in SERIES_COUNTS: + for p in PIPELINES: + r.saturation_then_fractions( + p, os.path.join(CONFIG_DIR, f"{p}.yaml"), series, DEFAULT_WORKERS + ) + raw_cfg = os.path.join(CONFIG_DIR, f"{RAW_BASE_CONFIG}.yaml") + r.saturation_then_fractions( + RAW_PIPELINE, raw_cfg, series, DEFAULT_WORKERS, raw=True + ) + + +def fanin_experiment(r): + for name, grouping in FANIN_GROUPINGS.items(): + cfg = config_variant( + "kll", r.args.out_dir, f"kll_fanin_{name}", grouping=grouping + ) + r.run(f"kll_fanin_{name}", cfg, DEFAULT_SERIES, DEFAULT_WORKERS, 0) + + +def window_experiment(r): + for p in ["kll", "ddsketch"]: + r.run( + f"{p}_tumbling", + os.path.join(CONFIG_DIR, f"{p}.yaml"), + DEFAULT_SERIES, + DEFAULT_WORKERS, + 0, + ) + cfg = config_variant( + p, r.args.out_dir, f"{p}_sliding", + windowType="sliding", windowSizeMs=SLIDING_WINDOW_MS, slideIntervalMs=SLIDING_SLIDE_MS, + ) # fmt: skip + r.run(f"{p}_sliding", cfg, DEFAULT_SERIES, DEFAULT_WORKERS, 0) + + +def scaling_experiment(r): + for p in ["kll", "hydra_kll"]: + for workers in WORKER_COUNTS: + r.run(p, os.path.join(CONFIG_DIR, f"{p}.yaml"), SCALING_SERIES, workers, 0) + + +EXPERIMENTS = { + "main": main_experiment, + "fanin": fanin_experiment, + "window": window_experiment, + "scaling": scaling_experiment, +} + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter + ) + parser.add_argument( + "--bin-dir", + required=True, + help="dir with precompute_engine and bench_ingest_sender", + ) + parser.add_argument( + "--engine-cpus", required=True, type=lambda s: s.split(","), + help="comma list, one CPU per physical core; a run with N workers uses the first N", + ) # fmt: skip + parser.add_argument( + "--sender-cpus", required=True, help="taskset list, disjoint from engine cpus" + ) + parser.add_argument("--experiment", required=True, choices=EXPERIMENTS) + parser.add_argument("--out", required=True, help="results .jsonl (appended)") + args = parser.parse_args() + args.out_dir = os.path.dirname(os.path.abspath(args.out)) + needed = max( + [DEFAULT_WORKERS] + (WORKER_COUNTS if args.experiment == "scaling" else []) + ) + if len(args.engine_cpus) < needed: + parser.error( + f"--engine-cpus has {len(args.engine_cpus)} CPUs; {args.experiment} needs {needed}" + ) + EXPERIMENTS[args.experiment](Runner(args))