eval(real-workload): google cluster trace fetcher + OTLP mapper + queries - #260
Merged
Merged
Conversation
…ries Adds datasets_eval/google_cluster/ — the real-workload evidence backing the five evaluation claims in docs/paper-outline.md. Without this dataset, every claim rests on synthetic data; this directory is the workload-credibility hook for paper blocker #6. Contents: - fetcher.py: streaming download + sha256-checksummed cache of documented head subsamples of the public Google cluster traces (2011 task_usage CSV.gz, 2019 instance_usage JSON-Lines.gz). Idempotent: cache hit short-circuits the download. - otlp_mapper.py: deterministic projection from trace rows to OTLP-shaped JSONL matching deploy/fake-exporter/'s {zone, rack, host, service, task} attribute schema. Cardinality cap N folds (machine, service, task) tuples onto an N-element hashed subset for the 1k/10k/100k sweep matrix; bias documented in the docstring. - queries.json: ten PromQL queries grouped by claim (quantile / topk / sum / count_unique), each with an expected_ground_truth_query for the accuracy reducer. - run.py: orchestrator with fetch/map/replay/validate subcommands. Replay defaults to dry-run; OTLP/gRPC sender is opt-in via --endpoint when opentelemetry-proto+grpcio are installed. - README.md: subset selection rationale, cardinality scaling, disk + wall-time budget, one-command smoke entrypoint. - tests/: 16 unit tests covering golden mapper output across both years + queries.json schema match against deploy/scripts/queries-e2e.json. Constraints respected: only datasets_eval/google_cluster/ touched; no changes to deploy/scripts/run_e2e_sweep.sh, deploy/scripts/measure-baseline.py, deploy/fake-exporter/, processor/, controller/, or ASAPQuery-backend/. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
datasets_eval/google_cluster/— fetcher + OTLP mapper + matching PromQL log for the public Google cluster traces (2011task_usage+ 2019instance_usage). Closes paper blocker add CountMinSKetch in processor #6.gsutil); sha256-checksummed cache + manifest for idempotence; documented head-subsample so the smoke flow stays under 50 MB of network traffic.deploy/fake-exporter/'s{zone, rack, host, service, task}attribute schema;--cardinality-cap Nprojects tuples onto an N-element hashed subset for the 1k/10k/100k sweep matrix.queries.jsoncovering all five evaluation claims (quantile / topk / sum / count_unique), schema-compatible withdeploy/scripts/queries-e2e.jsonplus anexpected_ground_truth_queryper entry for the accuracy reducer.Subset selection rationale
task_usage(gs://clusterdata-2011-2/task_usage/part-00000-of-00500.csv.gz). Per-(machine, job, task) 5-min CPU/memory samples — directly maps to OTLP gauges keyed by the natural workload-resource shape for ASAP.instance_usagecell-a (gs://clusterdata_2019_a/instance_usage-000000000000.json.gz). Per-Borg-instance CPU/memory sampling, same shape concern at larger scale.--max-rows 100_000is the documented paper-experiment subsample; smoke--max-rows 1_000runs fit on a laptop in ~10 s.Cardinality-cap projection bias
count_uniquequeries saturate at N when capped — accuracy reducer rescales by U/N to recover true cardinality (documented inqueries.json).Mapper output shape vs fake-exporter
zoneandrackare synthesized frommachine_idbecause the trace doesn't expose those columns directly; deterministic salted blake2b hash, documented inREADME.md's "OTLP wire shape" section.Files added (only
datasets_eval/google_cluster/touched)README.md,fetcher.py,otlp_mapper.py,queries.json,run.pytests/test_otlp_mapper.py,tests/test_queries_schema.pytests/fixtures/{2011,2019}_*.csv+*_expected_*.jsonlgolden filesVerification (all pass)
python3 datasets_eval/google_cluster/fetcher.py --year 2019 --max-rows 1000 --out-dir /tmp/gct-> 1000 rows, sha256 e2ec23b0...python3 datasets_eval/google_cluster/otlp_mapper.py --year 2019 --in-dir /tmp/gct --cardinality-cap 1000 --out /tmp/gct-otlp.jsonl-> 2000 OTLP rowspython3 datasets_eval/google_cluster/run.py validate --queries datasets_eval/google_cluster/queries.json-> OKpytest datasets_eval/google_cluster/tests/-> 16 passedDisk + wall-time budget
Open questions / interpretation choices
zone/rackare synthesized frommachine_id. The 2011 trace'smachine_eventsand 2019's cluster-cell columns could supply real placement, but joining them adds another fetch. Hash-from-machine-id is reproducible and roughly uniform; flagged for future improvement if the paper requires real placement.task_eventsjoin (out of scope for this PR).Test plan
datasets_eval/google_cluster/modified🤖 Generated with Claude Code