analysis/characterization/window_1_results.md is the headline write-up for Window 1: workload characterization (KV per request, real reuse decomposition, APC theoretical ceilings), B3 5-policy sweep with per-policy interpretation, B2 same-vs-different-worker interference microbench with causal reading, and an explicit list of what Window 1 does *not* answer (deferred to B4 SRR sweep + B5 attribution). Under window_1_results/: - 5 raw result JSONs from the B3 sweep, the B2 microbench, the APC upper bound, and the KV footprint - per-policy hotspot_index.json snapshots so render_window1_figures.py can plot per-worker TTFT p90 distributions - 8 PNG figures (figures/) covering the headline claims Three takeaways the figures pin down: 1) intra-session reuse dominates (93.2%), so session-affinity routing is the right primary lever 2) unified hybrid affinity hits 79.4% APC (97% of the 79.6% intra- session ceiling) AND cuts TTFT p90 from lmetric's 15.6s to 7.24s 3) B2 different-worker control sits at idx ≈ 1.0 across 32× prefill- size variation; same-worker TTFT idx scales 2.15× -> 218×, which is the cleanest causal evidence for same-worker prefill-decode interference Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
137 lines
4.1 KiB
JSON
137 lines
4.1 KiB
JSON
{
|
|
"analyzed_records": 2114220,
|
|
"batch0": {
|
|
"attempted_requests": 2114220,
|
|
"completed_requests": null,
|
|
"error_requests": null,
|
|
"max_inflight_per_session": null,
|
|
"session_concurrency_status": "unavailable",
|
|
"session_sequential": null
|
|
},
|
|
"batch1": {
|
|
"append_status": "unavailable",
|
|
"input_stats": {
|
|
"count": 2114220,
|
|
"max": 202371.0,
|
|
"mean": 33637.38370084476,
|
|
"min": 0.0,
|
|
"p50": 20030.0,
|
|
"p90": 87855.1000000001,
|
|
"p95": 104738.0,
|
|
"p99": 125527.0
|
|
},
|
|
"kv_footprint_status": "available",
|
|
"output_stats": {
|
|
"count": 2114220,
|
|
"max": 132665.0,
|
|
"mean": 444.97059624826176,
|
|
"min": 0.0,
|
|
"p50": 80.0,
|
|
"p90": 811.0,
|
|
"p95": 2213.0,
|
|
"p99": 6614.810000000056
|
|
},
|
|
"reuse_status": "unavailable"
|
|
},
|
|
"classification": {
|
|
"label": "invalid_for_online_claim",
|
|
"reason": "actual dispatch/finish timestamps are unavailable, so online sequentiality cannot be proven",
|
|
"source": "auto",
|
|
"stress_indicators": []
|
|
},
|
|
"manifest": {
|
|
"canonical_trace_data_sources": {
|
|
"dash0_formatted_trace_dir": "~/ali-trace/trace-glm5.1-formatted/",
|
|
"dash0_raw_trace_dir": "~/ali-trace/trace-glm5.1/",
|
|
"usage_note": "Full trace analysis can be run CPU-only on dash0, or the needed JSONL files can be copied/rsynced from dash0 to this machine before running this analyzer."
|
|
},
|
|
"end_time": "2026-05-25T09:03:36.499002+00:00",
|
|
"figure_status": {
|
|
"reason": "matplotlib unavailable: ModuleNotFoundError(\"No module named 'matplotlib'\")",
|
|
"status": "skipped"
|
|
},
|
|
"git_commit": "",
|
|
"gpu_count": 0,
|
|
"gpu_type": "",
|
|
"host": "ds-6348bee4-1-765874c9c4-7zrvf",
|
|
"input_requirements": {
|
|
"actual_sequentiality_proof": [
|
|
"per-request dispatch timestamp",
|
|
"per-request finish or error/timeout timestamp",
|
|
"request_id join to trace/metrics when timing source is separate"
|
|
],
|
|
"metrics_jsonl": [
|
|
"request_id",
|
|
"session_id",
|
|
"trace_timestamp_s",
|
|
"input_length",
|
|
"output_length",
|
|
"latency_s",
|
|
"ttft_s",
|
|
"tpot_s",
|
|
"error",
|
|
"optional cached_tokens"
|
|
],
|
|
"reuse_decomposition": [
|
|
"cached_tokens or cache_hit",
|
|
"hash_ids",
|
|
"session_id"
|
|
],
|
|
"trace_jsonl": [
|
|
"chat_id",
|
|
"parent_chat_id",
|
|
"timestamp",
|
|
"input_length",
|
|
"output_length",
|
|
"turn",
|
|
"hash_ids",
|
|
"optional session_id"
|
|
]
|
|
},
|
|
"input_status": {
|
|
"analyzed_records": 2114220,
|
|
"breakdown_records": 0,
|
|
"merge_warnings": [],
|
|
"metrics_records": 0,
|
|
"trace_records": 2114220,
|
|
"trace_warnings": [],
|
|
"unmatched_breakdown": 0,
|
|
"unmatched_metrics": 0
|
|
},
|
|
"launch_command": "analysis/characterization/analyze.py --trace /home/admin/cpfs/wjh/ali-trace/trace-glm5.1-formatted/051315-051317.jsonl --kv-bytes-per-token 98304 --task-name full_trace_with_kv --output-root outputs/characterization --overwrite",
|
|
"output_dir": "outputs/characterization/2026-05-25/full_trace_with_kv",
|
|
"policy": "",
|
|
"request_limit": null,
|
|
"session_sampling_method": "",
|
|
"session_sequential": null,
|
|
"start_time": "2026-05-25T08:59:11.618919+00:00",
|
|
"time_scale": null,
|
|
"trace_file_info": {
|
|
"exists": true,
|
|
"mtime_s": 1778772033.2788928,
|
|
"path": "/home/admin/cpfs/wjh/ali-trace/trace-glm5.1-formatted/051315-051317.jsonl",
|
|
"sha256": "",
|
|
"sha256_status": "skipped_use_--hash-inputs",
|
|
"size_bytes": 1561266372
|
|
},
|
|
"trace_path": "/home/admin/cpfs/wjh/ali-trace/trace-glm5.1-formatted/051315-051317.jsonl",
|
|
"trace_sha256": ""
|
|
},
|
|
"outputs": [
|
|
"append_delta_stats.json",
|
|
"invalid_runs.md",
|
|
"kv_footprint_summary.json",
|
|
"manifest.json",
|
|
"raw/merged_requests.jsonl",
|
|
"raw/unmatched_breakdown.jsonl",
|
|
"raw/unmatched_metrics.jsonl",
|
|
"reuse_decomposition.json",
|
|
"session_arrival_stats.json",
|
|
"session_concurrency.json",
|
|
"session_skew.json",
|
|
"trace_profile.json",
|
|
"turn_interval_stats.json",
|
|
"workload_summary.json"
|
|
]
|
|
}
|