From de164e5a6432406b3e628f2045ae3215fa7dc32d Mon Sep 17 00:00:00 2001 From: Gahow Wang Date: Wed, 27 May 2026 19:04:03 +0800 Subject: [PATCH] =?UTF-8?q?MB2:=20pure=20KV-transfer=20cost=20on=20dash1?= =?UTF-8?q?=20intra-node=20=E2=80=94=20Mooncake=20~9.7=20GB/s=20steady?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Full sweep result on dash1 GPU 0+1 with vanilla vLLM 0.18.1 + mooncake-transfer-engine 0.3.11, kv_both connector. Per-stage decomposition via the instrumentation patch (analyze_mb2.py pairs A's send_blocks with B's receive_kv enter/finish by time window). Steady-state (1k..32k tokens, 96 MiB..3 GiB KV): pure_transfer ≈ size / 9.7 GB/s rx_overhead ≈ 2–3 ms (ZMQ handshake + P-side setup) bandwidth ≈ 9.6–10.1 GB/s, very stable Large-size regime (65k..131k tokens, 6..12 GiB): p50 bandwidth collapses to 3.4–4.5 GB/s max bandwidth still hits ~9.7 GB/s (some runs achieve it) p99 agentic request (11.5 GiB) lands here Implication for §3.2 PD-disaggregation cost argument: median agentic decode = 50–200 ms (tool-call JSON output) median agentic-tail KV transfer (p99 11.5 GiB): best case (9.7 GB/s) ≈ 1.19 s observed range 1.5 – 10 s ⇒ KV transfer is 8–100× larger than the decode it enables. This is intra-node — the lower-bound transfer cost. Inter-node RDMA will be slower; that's MB2 phase 2. Adds: - analyze_mb2.py: pair A.send_blocks ↔ B.receive_kv by time window; per-size aggregation (n, ms_p50, ms_min/max, GB/s_p50/max) - plot_mb2.py: log-log transfer-time chart + bandwidth-vs-size chart - analysis/mb2/A_intra_kvboth.jsonl, B_intra_kvboth.jsonl: raw events (51 + 102 events including the sanity preamble) - analysis/mb2/intra_kvboth_breakdown.json: paired and aggregated - figs/mb2_transfer_time_intra.png, figs/mb2_transfer_bw_intra.png Co-Authored-By: Claude Opus 4.7 --- analysis/mb2/A_intra_kvboth.jsonl | 51 ++ analysis/mb2/B_intra_kvboth.jsonl | 102 +++ analysis/mb2/intra_kvboth_breakdown.json | 758 +++++++++++++++++++++++ figs/mb2_transfer_bw_intra.png | Bin 0 -> 73239 bytes figs/mb2_transfer_time_intra.png | Bin 0 -> 93745 bytes microbench/fresh_setup/analyze_mb2.py | 178 ++++++ microbench/fresh_setup/plot_mb2.py | 100 +++ 7 files changed, 1189 insertions(+) create mode 100644 analysis/mb2/A_intra_kvboth.jsonl create mode 100644 analysis/mb2/B_intra_kvboth.jsonl create mode 100644 analysis/mb2/intra_kvboth_breakdown.json create mode 100644 figs/mb2_transfer_bw_intra.png create mode 100644 figs/mb2_transfer_time_intra.png create mode 100644 microbench/fresh_setup/analyze_mb2.py create mode 100644 microbench/fresh_setup/plot_mb2.py diff --git a/analysis/mb2/A_intra_kvboth.jsonl b/analysis/mb2/A_intra_kvboth.jsonl new file mode 100644 index 0000000..169a117 --- /dev/null +++ b/analysis/mb2/A_intra_kvboth.jsonl @@ -0,0 +1,51 @@ +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 50331648, "duration_s": 0.023202952987048775, "t_start_unix": 1779879143.174031, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879143.1972432} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 50331648, "duration_s": 0.005375694017857313, "t_start_unix": 1779879143.2982283, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879143.3036084} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 201326592, "duration_s": 0.021170366962905973, "t_start_unix": 1779879143.5159554, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879143.5371296} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 201326592, "duration_s": 0.020726953051052988, "t_start_unix": 1779879143.6974514, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879143.7181835} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 805306368, "duration_s": 0.08536655298667029, "t_start_unix": 1779879144.3294952, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879144.4148676} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 805306368, "duration_s": 0.08367906499188393, "t_start_unix": 1779879145.0419943, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879145.125678} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 1572864, "duration_s": 0.0004059679922647774, "t_start_unix": 1779879221.7078288, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879221.7082384} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 1572864, "duration_s": 0.000346789020113647, "t_start_unix": 1779879221.7838593, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879221.7842083} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 50331648, "duration_s": 0.005353622022084892, "t_start_unix": 1779879221.8607252, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879221.8660822} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 50331648, "duration_s": 0.005279594974126667, "t_start_unix": 1779879221.9432015, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879221.9484842} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 50331648, "duration_s": 0.0053006180096417665, "t_start_unix": 1779879222.0243337, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879222.0296378} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 100663296, "duration_s": 0.010396577999927104, "t_start_unix": 1779879222.130936, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879222.141335} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 100663296, "duration_s": 0.010438029014039785, "t_start_unix": 1779879222.2442062, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879222.2546473} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 100663296, "duration_s": 0.010436972021125257, "t_start_unix": 1779879222.3581295, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879222.3685696} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 100663296, "duration_s": 0.010396371013484895, "t_start_unix": 1779879222.4725878, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879222.4829867} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 100663296, "duration_s": 0.010352785000577569, "t_start_unix": 1779879222.5837166, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879222.5940716} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 1572864, "duration_s": 0.00034007197245955467, "t_start_unix": 1779879222.7521152, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879222.752458} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 1572864, "duration_s": 0.00041691696969792247, "t_start_unix": 1779879222.9143836, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879222.914805} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 201326592, "duration_s": 0.020633380976505578, "t_start_unix": 1779879223.0778644, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879223.098502} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 201326592, "duration_s": 0.020639199996367097, "t_start_unix": 1779879223.2603853, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879223.2810278} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 201326592, "duration_s": 0.020575353992171586, "t_start_unix": 1779879223.4418828, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879223.4624615} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 402653184, "duration_s": 0.041439525957684964, "t_start_unix": 1779879223.7544343, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879223.7958782} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 402653184, "duration_s": 0.04152030003024265, "t_start_unix": 1779879224.0914912, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879224.133016} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 402653184, "duration_s": 0.04148670402355492, "t_start_unix": 1779879224.4262393, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879224.4677298} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 402653184, "duration_s": 0.04146742797456682, "t_start_unix": 1779879224.7617002, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879224.8031723} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 402653184, "duration_s": 0.04143296502297744, "t_start_unix": 1779879225.0978234, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879225.1392617} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 1572864, "duration_s": 0.0003991159610450268, "t_start_unix": 1779879225.760789, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879225.7611918} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 1572864, "duration_s": 0.00041423802031204104, "t_start_unix": 1779879226.3864496, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879226.3868673} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 805306368, "duration_s": 0.08309489500243217, "t_start_unix": 1779879227.0107942, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879227.0938945} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 805306368, "duration_s": 0.08372796402545646, "t_start_unix": 1779879227.7207224, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879227.8044555} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 805306368, "duration_s": 0.08398396399570629, "t_start_unix": 1779879228.4314566, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879228.5154452} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 1610612736, "duration_s": 0.16950496198842302, "t_start_unix": 1779879230.1334376, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879230.3029544} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 1610612736, "duration_s": 0.16713789198547602, "t_start_unix": 1779879231.8981037, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879232.0652575} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 1610612736, "duration_s": 0.16713115200400352, "t_start_unix": 1779879233.6608078, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879233.827945} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 1610612736, "duration_s": 0.16709016199456528, "t_start_unix": 1779879235.419875, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879235.5869706} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 1610612736, "duration_s": 0.166486973001156, "t_start_unix": 1779879237.1821773, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879237.34867} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 3221225472, "duration_s": 0.31926770601421595, "t_start_unix": 1779879241.9880297, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879242.3073065} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 3221225472, "duration_s": 0.3197040680097416, "t_start_unix": 1779879246.9779432, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879247.2976692} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 3221225472, "duration_s": 0.32088329299585894, "t_start_unix": 1779879251.9643052, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879252.285209} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 3221225472, "duration_s": 0.5439103110111319, "t_start_unix": 1779879256.9989722, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879257.5428913} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 3221225472, "duration_s": 0.5193864739849232, "t_start_unix": 1779879262.2562187, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879262.7756212} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 6442450944, "duration_s": 1.9844180009677075, "t_start_unix": 1779879278.199048, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879280.1834915} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 6442450944, "duration_s": 2.1099297259934247, "t_start_unix": 1779879295.6967168, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879297.8066647} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 6442450944, "duration_s": 1.8950715209939517, "t_start_unix": 1779879313.3236735, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879315.2187643} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 6442450944, "duration_s": 0.9277855920372531, "t_start_unix": 1779879330.6715357, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879331.599329} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 6442450944, "duration_s": 0.6652462020283565, "t_start_unix": 1779879346.9950044, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879347.6602724} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 12884901888, "duration_s": 1.3330365709844045, "t_start_unix": 1779879402.7169023, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879404.04997} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 12884901888, "duration_s": 5.839069904992357, "t_start_unix": 1779879459.0566247, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879464.8957155} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 12884901888, "duration_s": 9.862486142024864, "t_start_unix": 1779879519.9567635, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879529.8192694} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 12884901888, "duration_s": 2.8350498770014383, "t_start_unix": 1779879584.9780834, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879587.813154} +{"event": "send_blocks", "remote_session": "172.27.123.142:16428", "total_bytes": 12884901888, "duration_s": 1.485496642999351, "t_start_unix": 1779879642.639775, "ret": 0, "tp_rank": 0, "t_log_unix": 1779879644.1252885} diff --git a/analysis/mb2/B_intra_kvboth.jsonl b/analysis/mb2/B_intra_kvboth.jsonl new file mode 100644 index 0000000..ae51fa0 --- /dev/null +++ b/analysis/mb2/B_intra_kvboth.jsonl @@ -0,0 +1,102 @@ +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-ad00672f263a6643-0-9479211a"], "t_start_unix": 1779879143.1678784, "tp_rank": 0, "t_log_unix": 1779879143.167884} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-ad00672f263a6643-0-9479211a"], "duration_s": 0.03333390498301014, "t_start_unix": 1779879143.1678784, "tp_rank": 0, "t_log_unix": 1779879143.201217} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-ace77e2b02f9f141-0-b3c061bc"], "t_start_unix": 1779879143.2968972, "tp_rank": 0, "t_log_unix": 1779879143.2969005} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-ace77e2b02f9f141-0-b3c061bc"], "duration_s": 0.007019245007541031, "t_start_unix": 1779879143.2968972, "tp_rank": 0, "t_log_unix": 1779879143.3039184} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a4a2366879c68ded-0-8ac4098e"], "t_start_unix": 1779879143.5146625, "tp_rank": 0, "t_log_unix": 1779879143.5146651} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a4a2366879c68ded-0-8ac4098e"], "duration_s": 0.02278437599306926, "t_start_unix": 1779879143.5146625, "tp_rank": 0, "t_log_unix": 1779879143.537448} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-8690cafcace0d5e2-0-b89f33d2"], "t_start_unix": 1779879143.6958342, "tp_rank": 0, "t_log_unix": 1779879143.6958375} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-8690cafcace0d5e2-0-b89f33d2"], "duration_s": 0.022794076008722186, "t_start_unix": 1779879143.6958342, "tp_rank": 0, "t_log_unix": 1779879143.71863} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-b087e2ec4cfa8eb7-0-b908f425"], "t_start_unix": 1779879144.3279662, "tp_rank": 0, "t_log_unix": 1779879144.3279696} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-b087e2ec4cfa8eb7-0-b908f425"], "duration_s": 0.08753501297906041, "t_start_unix": 1779879144.3279662, "tp_rank": 0, "t_log_unix": 1779879144.415505} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a115d16ff5575e08-0-9fa81984"], "t_start_unix": 1779879145.040141, "tp_rank": 0, "t_log_unix": 1779879145.0401456} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a115d16ff5575e08-0-9fa81984"], "duration_s": 0.0860149699728936, "t_start_unix": 1779879145.040141, "tp_rank": 0, "t_log_unix": 1779879145.1261594} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9e585ed083951df5-0-b03f812b"], "t_start_unix": 1779879221.7062025, "tp_rank": 0, "t_log_unix": 1779879221.7062056} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9e585ed083951df5-0-b03f812b"], "duration_s": 0.002459956973325461, "t_start_unix": 1779879221.7062025, "tp_rank": 0, "t_log_unix": 1779879221.7086644} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9271d403c044eadd-0-9c3c4639"], "t_start_unix": 1779879221.7826598, "tp_rank": 0, "t_log_unix": 1779879221.782662} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9271d403c044eadd-0-9c3c4639"], "duration_s": 0.0020201010047458112, "t_start_unix": 1779879221.7826598, "tp_rank": 0, "t_log_unix": 1779879221.7846813} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-82a580cefd3e2440-0-a383c3c4"], "t_start_unix": 1779879221.859549, "tp_rank": 0, "t_log_unix": 1779879221.8595514} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-82a580cefd3e2440-0-a383c3c4"], "duration_s": 0.006836243963334709, "t_start_unix": 1779879221.859549, "tp_rank": 0, "t_log_unix": 1779879221.8663864} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a31cb4bc9e7f63d2-0-8f48aacd"], "t_start_unix": 1779879221.9419758, "tp_rank": 0, "t_log_unix": 1779879221.9419782} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a31cb4bc9e7f63d2-0-8f48aacd"], "duration_s": 0.00694335694424808, "t_start_unix": 1779879221.9419758, "tp_rank": 0, "t_log_unix": 1779879221.9489205} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a9dfc1a5b425d994-0-a0930098"], "t_start_unix": 1779879222.0232244, "tp_rank": 0, "t_log_unix": 1779879222.0232272} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a9dfc1a5b425d994-0-a0930098"], "duration_s": 0.006697195000015199, "t_start_unix": 1779879222.0232244, "tp_rank": 0, "t_log_unix": 1779879222.0299227} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9712857755af2efc-0-90b2dc9b"], "t_start_unix": 1779879222.1297998, "tp_rank": 0, "t_log_unix": 1779879222.1298025} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9712857755af2efc-0-90b2dc9b"], "duration_s": 0.01183948403922841, "t_start_unix": 1779879222.1297998, "tp_rank": 0, "t_log_unix": 1779879222.1416407} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-b4f0a10dee65acbe-0-a3c132fc"], "t_start_unix": 1779879222.243023, "tp_rank": 0, "t_log_unix": 1779879222.243025} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-b4f0a10dee65acbe-0-a3c132fc"], "duration_s": 0.01214482297655195, "t_start_unix": 1779879222.243023, "tp_rank": 0, "t_log_unix": 1779879222.2551687} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-b4c514b80b52a3f2-0-bcd24f8e"], "t_start_unix": 1779879222.3569698, "tp_rank": 0, "t_log_unix": 1779879222.356972} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-b4c514b80b52a3f2-0-bcd24f8e"], "duration_s": 0.011961110983975232, "t_start_unix": 1779879222.3569698, "tp_rank": 0, "t_log_unix": 1779879222.368932} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-ac7118d8090d181c-0-8af4adf0"], "t_start_unix": 1779879222.4715128, "tp_rank": 0, "t_log_unix": 1779879222.4715152} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-ac7118d8090d181c-0-8af4adf0"], "duration_s": 0.011788576026447117, "t_start_unix": 1779879222.4715128, "tp_rank": 0, "t_log_unix": 1779879222.4833028} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-85291bcb93aaf638-0-868db1a8"], "t_start_unix": 1779879222.5826046, "tp_rank": 0, "t_log_unix": 1779879222.5826073} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-85291bcb93aaf638-0-868db1a8"], "duration_s": 0.0118055299972184, "t_start_unix": 1779879222.5826046, "tp_rank": 0, "t_log_unix": 1779879222.5944116} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a448cf2e059ba0c9-0-a1360796"], "t_start_unix": 1779879222.750828, "tp_rank": 0, "t_log_unix": 1779879222.7508304} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a448cf2e059ba0c9-0-a1360796"], "duration_s": 0.0021119200391694903, "t_start_unix": 1779879222.750828, "tp_rank": 0, "t_log_unix": 1779879222.7529414} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-b486fd9e945a4658-0-8bb561cd"], "t_start_unix": 1779879222.913044, "tp_rank": 0, "t_log_unix": 1779879222.9130466} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-b486fd9e945a4658-0-8bb561cd"], "duration_s": 0.0022232600022107363, "t_start_unix": 1779879222.913044, "tp_rank": 0, "t_log_unix": 1779879222.9152684} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-82da2bfe65f276c6-0-88d9a9a2"], "t_start_unix": 1779879223.0765986, "tp_rank": 0, "t_log_unix": 1779879223.0766027} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-82da2bfe65f276c6-0-88d9a9a2"], "duration_s": 0.022250515001360327, "t_start_unix": 1779879223.0765986, "tp_rank": 0, "t_log_unix": 1779879223.0988505} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-93bd777652eba5f3-0-9ec3d058"], "t_start_unix": 1779879223.2591784, "tp_rank": 0, "t_log_unix": 1779879223.2591808} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-93bd777652eba5f3-0-9ec3d058"], "duration_s": 0.022157608007546514, "t_start_unix": 1779879223.2591784, "tp_rank": 0, "t_log_unix": 1779879223.2813375} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-81f950480a3cabf9-0-bbf8584f"], "t_start_unix": 1779879223.4402068, "tp_rank": 0, "t_log_unix": 1779879223.440209} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-81f950480a3cabf9-0-bbf8584f"], "duration_s": 0.022589912987314165, "t_start_unix": 1779879223.4402068, "tp_rank": 0, "t_log_unix": 1779879223.4627984} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-b109ed06b5882659-0-8d14993c"], "t_start_unix": 1779879223.7529812, "tp_rank": 0, "t_log_unix": 1779879223.752984} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-b109ed06b5882659-0-8d14993c"], "duration_s": 0.043345845013391227, "t_start_unix": 1779879223.7529812, "tp_rank": 0, "t_log_unix": 1779879223.796329} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-8a57776c81d64b2c-0-ace8fb2b"], "t_start_unix": 1779879224.0899644, "tp_rank": 0, "t_log_unix": 1779879224.0899673} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-8a57776c81d64b2c-0-ace8fb2b"], "duration_s": 0.04341953102266416, "t_start_unix": 1779879224.0899644, "tp_rank": 0, "t_log_unix": 1779879224.1333857} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9b1a5dce18758450-0-b17b3649"], "t_start_unix": 1779879224.424807, "tp_rank": 0, "t_log_unix": 1779879224.42481} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9b1a5dce18758450-0-b17b3649"], "duration_s": 0.04336977802449837, "t_start_unix": 1779879224.424807, "tp_rank": 0, "t_log_unix": 1779879224.4681823} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-8c7d412b85f43ed7-0-9dea4add"], "t_start_unix": 1779879224.7599711, "tp_rank": 0, "t_log_unix": 1779879224.7599735} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-8c7d412b85f43ed7-0-9dea4add"], "duration_s": 0.043769759009592235, "t_start_unix": 1779879224.7599711, "tp_rank": 0, "t_log_unix": 1779879224.8037443} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-8860308db3f010a5-0-ad51eb46"], "t_start_unix": 1779879225.0962389, "tp_rank": 0, "t_log_unix": 1779879225.0962446} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-8860308db3f010a5-0-ad51eb46"], "duration_s": 0.043612666020635515, "t_start_unix": 1779879225.0962389, "tp_rank": 0, "t_log_unix": 1779879225.1398532} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-86cca1a2b9427801-0-ba41ade7"], "t_start_unix": 1779879225.7592747, "tp_rank": 0, "t_log_unix": 1779879225.759278} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-86cca1a2b9427801-0-ba41ade7"], "duration_s": 0.002386144013144076, "t_start_unix": 1779879225.7592747, "tp_rank": 0, "t_log_unix": 1779879225.7616625} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a208c6d804293be7-0-94d265ab"], "t_start_unix": 1779879226.384918, "tp_rank": 0, "t_log_unix": 1779879226.384921} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a208c6d804293be7-0-94d265ab"], "duration_s": 0.0023903060355223715, "t_start_unix": 1779879226.384918, "tp_rank": 0, "t_log_unix": 1779879226.3873098} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-b53bea2317cc1211-0-8fcad8a8"], "t_start_unix": 1779879227.0092332, "tp_rank": 0, "t_log_unix": 1779879227.0092363} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-b53bea2317cc1211-0-8fcad8a8"], "duration_s": 0.08524628396844491, "t_start_unix": 1779879227.0092332, "tp_rank": 0, "t_log_unix": 1779879227.094482} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9daf909593bbdf03-0-8fd7d50e"], "t_start_unix": 1779879227.7190688, "tp_rank": 0, "t_log_unix": 1779879227.719072} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9daf909593bbdf03-0-8fd7d50e"], "duration_s": 0.08596085698809475, "t_start_unix": 1779879227.7190688, "tp_rank": 0, "t_log_unix": 1779879227.8050315} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9ef40f3b6d736128-0-8e8e1c30"], "t_start_unix": 1779879228.4297745, "tp_rank": 0, "t_log_unix": 1779879228.4297774} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9ef40f3b6d736128-0-8e8e1c30"], "duration_s": 0.0860762019874528, "t_start_unix": 1779879228.4297745, "tp_rank": 0, "t_log_unix": 1779879228.5158527} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-851e5d7e3e83d7ea-0-a66a5e0b"], "t_start_unix": 1779879230.131392, "tp_rank": 0, "t_log_unix": 1779879230.1313956} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-851e5d7e3e83d7ea-0-a66a5e0b"], "duration_s": 0.1721468890318647, "t_start_unix": 1779879230.131392, "tp_rank": 0, "t_log_unix": 1779879230.3035412} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9be12af6a9ccccf5-0-af1230c7"], "t_start_unix": 1779879231.896075, "tp_rank": 0, "t_log_unix": 1779879231.896078} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9be12af6a9ccccf5-0-af1230c7"], "duration_s": 0.16974544001277536, "t_start_unix": 1779879231.896075, "tp_rank": 0, "t_log_unix": 1779879232.0658224} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-b61b9b237366297b-0-9832f0e3"], "t_start_unix": 1779879233.6589305, "tp_rank": 0, "t_log_unix": 1779879233.6589334} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-b61b9b237366297b-0-9832f0e3"], "duration_s": 0.16975757898762822, "t_start_unix": 1779879233.6589305, "tp_rank": 0, "t_log_unix": 1779879233.8286898} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-bae0d0efe47ece8f-0-affbc685"], "t_start_unix": 1779879235.4181106, "tp_rank": 0, "t_log_unix": 1779879235.418114} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-bae0d0efe47ece8f-0-affbc685"], "duration_s": 0.1695251659839414, "t_start_unix": 1779879235.4181106, "tp_rank": 0, "t_log_unix": 1779879235.587638} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a34bc73c9cd2efc1-0-90d647fc"], "t_start_unix": 1779879237.1803744, "tp_rank": 0, "t_log_unix": 1779879237.1803775} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a34bc73c9cd2efc1-0-90d647fc"], "duration_s": 0.16962904302636161, "t_start_unix": 1779879237.1803744, "tp_rank": 0, "t_log_unix": 1779879237.3500054} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-89a36c12ee6b0ff3-0-9fddbc0f"], "t_start_unix": 1779879241.9859307, "tp_rank": 0, "t_log_unix": 1779879241.9859338} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-89a36c12ee6b0ff3-0-9fddbc0f"], "duration_s": 0.32203804596792907, "t_start_unix": 1779879241.9859307, "tp_rank": 0, "t_log_unix": 1779879242.3079708} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-8d65512eb7e3c36c-0-8b23597c"], "t_start_unix": 1779879246.9755645, "tp_rank": 0, "t_log_unix": 1779879246.9755676} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-8d65512eb7e3c36c-0-8b23597c"], "duration_s": 0.3227974839974195, "t_start_unix": 1779879246.9755645, "tp_rank": 0, "t_log_unix": 1779879247.2983644} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a13c271ecbbca78b-0-b76a0370"], "t_start_unix": 1779879251.9618897, "tp_rank": 0, "t_log_unix": 1779879251.961893} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a13c271ecbbca78b-0-b76a0370"], "duration_s": 0.3240378479822539, "t_start_unix": 1779879251.9618897, "tp_rank": 0, "t_log_unix": 1779879252.2859304} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-bada04ec8c556aca-0-a263d637"], "t_start_unix": 1779879256.9512377, "tp_rank": 0, "t_log_unix": 1779879256.9512408} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-bada04ec8c556aca-0-a263d637"], "duration_s": 0.5924434679909609, "t_start_unix": 1779879256.9512377, "tp_rank": 0, "t_log_unix": 1779879257.5436878} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9641a077022e6123-0-8c3c0975"], "t_start_unix": 1779879262.2127163, "tp_rank": 0, "t_log_unix": 1779879262.2127194} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9641a077022e6123-0-8c3c0975"], "duration_s": 0.5644763479940593, "t_start_unix": 1779879262.2127163, "tp_rank": 0, "t_log_unix": 1779879262.777195} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-bb3a4e5084af8c3a-0-bdfa0931"], "t_start_unix": 1779879278.1063075, "tp_rank": 0, "t_log_unix": 1779879278.106311} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-bb3a4e5084af8c3a-0-bdfa0931"], "duration_s": 2.0784930550144054, "t_start_unix": 1779879278.1063075, "tp_rank": 0, "t_log_unix": 1779879280.1848085} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-91b951f85c93a71b-0-8396bee5"], "t_start_unix": 1779879295.600993, "tp_rank": 0, "t_log_unix": 1779879295.6009963} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-91b951f85c93a71b-0-8396bee5"], "duration_s": 2.2067435560165904, "t_start_unix": 1779879295.600993, "tp_rank": 0, "t_log_unix": 1779879297.8077443} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-81d236ecb6aadadf-0-ac184d51"], "t_start_unix": 1779879313.2315958, "tp_rank": 0, "t_log_unix": 1779879313.2315989} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-81d236ecb6aadadf-0-ac184d51"], "duration_s": 1.9879729640088044, "t_start_unix": 1779879313.2315958, "tp_rank": 0, "t_log_unix": 1779879315.219571} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a4c76c62b44c4295-0-b007a6ed"], "t_start_unix": 1779879330.6154163, "tp_rank": 0, "t_log_unix": 1779879330.6154196} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a4c76c62b44c4295-0-b007a6ed"], "duration_s": 0.9849357060156763, "t_start_unix": 1779879330.6154163, "tp_rank": 0, "t_log_unix": 1779879331.6003594} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a06d4b774a8af9a5-0-980e9d23"], "t_start_unix": 1779879346.990221, "tp_rank": 0, "t_log_unix": 1779879346.9902246} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a06d4b774a8af9a5-0-980e9d23"], "duration_s": 0.6725030990201049, "t_start_unix": 1779879346.990221, "tp_rank": 0, "t_log_unix": 1779879347.6627269} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-bf0d435e06e3349f-0-8507c933"], "t_start_unix": 1779879402.7123013, "tp_rank": 0, "t_log_unix": 1779879402.7123044} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-bf0d435e06e3349f-0-8507c933"], "duration_s": 1.3384539679973386, "t_start_unix": 1779879402.7123013, "tp_rank": 0, "t_log_unix": 1779879404.0507588} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9f87ae0fb0c7eec8-0-a8a1daea"], "t_start_unix": 1779879458.9232886, "tp_rank": 0, "t_log_unix": 1779879458.9232917} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9f87ae0fb0c7eec8-0-a8a1daea"], "duration_s": 5.973284716019407, "t_start_unix": 1779879458.9232886, "tp_rank": 0, "t_log_unix": 1779879464.896582} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a62e48e40e6c6ad7-0-acca9741"], "t_start_unix": 1779879519.7647448, "tp_rank": 0, "t_log_unix": 1779879519.7647479} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-a62e48e40e6c6ad7-0-acca9741"], "duration_s": 10.056511385017075, "t_start_unix": 1779879519.7647448, "tp_rank": 0, "t_log_unix": 1779879529.8212643} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-824479d53bab40e4-0-af951a11"], "t_start_unix": 1779879584.888362, "tp_rank": 0, "t_log_unix": 1779879584.8883653} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-824479d53bab40e4-0-af951a11"], "duration_s": 2.925714804965537, "t_start_unix": 1779879584.888362, "tp_rank": 0, "t_log_unix": 1779879587.814085} +{"event": "receive_kv_enter", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9f06f19c981c0b3f-0-b3afb370"], "t_start_unix": 1779879642.6076336, "tp_rank": 0, "t_log_unix": 1779879642.6076367} +{"event": "receive_kv_finish", "worker_addr": "tcp://172.27.123.142:44435", "req_ids": ["cmpl-9f06f19c981c0b3f-0-b3afb370"], "duration_s": 1.5183607729850337, "t_start_unix": 1779879642.6076336, "tp_rank": 0, "t_log_unix": 1779879644.1259985} diff --git a/analysis/mb2/intra_kvboth_breakdown.json b/analysis/mb2/intra_kvboth_breakdown.json new file mode 100644 index 0000000..290b358 --- /dev/null +++ b/analysis/mb2/intra_kvboth_breakdown.json @@ -0,0 +1,758 @@ +{ + "rows": [ + { + "input_tokens_est": 512, + "total_bytes": 50331648, + "pure_transfer_s": 0.023202952987048775, + "rx_total_s": 0.03333390498301014, + "rx_overhead_s": 0.010130951995961368, + "rx_t_start_unix": 1779879143.1678784, + "send_t_start_unix": 1779879143.174031, + "req_ids": [ + "cmpl-ad00672f263a6643-0-9479211a" + ] + }, + { + "input_tokens_est": 512, + "total_bytes": 50331648, + "pure_transfer_s": 0.005375694017857313, + "rx_total_s": 0.007019245007541031, + "rx_overhead_s": 0.0016435509896837175, + "rx_t_start_unix": 1779879143.2968972, + "send_t_start_unix": 1779879143.2982283, + "req_ids": [ + "cmpl-ace77e2b02f9f141-0-b3c061bc" + ] + }, + { + "input_tokens_est": 2048, + "total_bytes": 201326592, + "pure_transfer_s": 0.021170366962905973, + "rx_total_s": 0.02278437599306926, + "rx_overhead_s": 0.0016140090301632881, + "rx_t_start_unix": 1779879143.5146625, + "send_t_start_unix": 1779879143.5159554, + "req_ids": [ + "cmpl-a4a2366879c68ded-0-8ac4098e" + ] + }, + { + "input_tokens_est": 2048, + "total_bytes": 201326592, + "pure_transfer_s": 0.020726953051052988, + "rx_total_s": 0.022794076008722186, + "rx_overhead_s": 0.0020671229576691985, + "rx_t_start_unix": 1779879143.6958342, + "send_t_start_unix": 1779879143.6974514, + "req_ids": [ + "cmpl-8690cafcace0d5e2-0-b89f33d2" + ] + }, + { + "input_tokens_est": 8192, + "total_bytes": 805306368, + "pure_transfer_s": 0.08536655298667029, + "rx_total_s": 0.08753501297906041, + "rx_overhead_s": 0.002168459992390126, + "rx_t_start_unix": 1779879144.3279662, + "send_t_start_unix": 1779879144.3294952, + "req_ids": [ + "cmpl-b087e2ec4cfa8eb7-0-b908f425" + ] + }, + { + "input_tokens_est": 8192, + "total_bytes": 805306368, + "pure_transfer_s": 0.08367906499188393, + "rx_total_s": 0.0860149699728936, + "rx_overhead_s": 0.002335904981009662, + "rx_t_start_unix": 1779879145.040141, + "send_t_start_unix": 1779879145.0419943, + "req_ids": [ + "cmpl-a115d16ff5575e08-0-9fa81984" + ] + }, + { + "input_tokens_est": 16, + "total_bytes": 1572864, + "pure_transfer_s": 0.0004059679922647774, + "rx_total_s": 0.002459956973325461, + "rx_overhead_s": 0.0020539889810606837, + "rx_t_start_unix": 1779879221.7062025, + "send_t_start_unix": 1779879221.7078288, + "req_ids": [ + "cmpl-9e585ed083951df5-0-b03f812b" + ] + }, + { + "input_tokens_est": 16, + "total_bytes": 1572864, + "pure_transfer_s": 0.000346789020113647, + "rx_total_s": 0.0020201010047458112, + "rx_overhead_s": 0.0016733119846321642, + "rx_t_start_unix": 1779879221.7826598, + "send_t_start_unix": 1779879221.7838593, + "req_ids": [ + "cmpl-9271d403c044eadd-0-9c3c4639" + ] + }, + { + "input_tokens_est": 512, + "total_bytes": 50331648, + "pure_transfer_s": 0.005353622022084892, + "rx_total_s": 0.006836243963334709, + "rx_overhead_s": 0.0014826219412498176, + "rx_t_start_unix": 1779879221.859549, + "send_t_start_unix": 1779879221.8607252, + "req_ids": [ + "cmpl-82a580cefd3e2440-0-a383c3c4" + ] + }, + { + "input_tokens_est": 512, + "total_bytes": 50331648, + "pure_transfer_s": 0.005279594974126667, + "rx_total_s": 0.00694335694424808, + "rx_overhead_s": 0.0016637619701214135, + "rx_t_start_unix": 1779879221.9419758, + "send_t_start_unix": 1779879221.9432015, + "req_ids": [ + "cmpl-a31cb4bc9e7f63d2-0-8f48aacd" + ] + }, + { + "input_tokens_est": 512, + "total_bytes": 50331648, + "pure_transfer_s": 0.0053006180096417665, + "rx_total_s": 0.006697195000015199, + "rx_overhead_s": 0.0013965769903734326, + "rx_t_start_unix": 1779879222.0232244, + "send_t_start_unix": 1779879222.0243337, + "req_ids": [ + "cmpl-a9dfc1a5b425d994-0-a0930098" + ] + }, + { + "input_tokens_est": 1024, + "total_bytes": 100663296, + "pure_transfer_s": 0.010396577999927104, + "rx_total_s": 0.01183948403922841, + "rx_overhead_s": 0.001442906039301306, + "rx_t_start_unix": 1779879222.1297998, + "send_t_start_unix": 1779879222.130936, + "req_ids": [ + "cmpl-9712857755af2efc-0-90b2dc9b" + ] + }, + { + "input_tokens_est": 1024, + "total_bytes": 100663296, + "pure_transfer_s": 0.010438029014039785, + "rx_total_s": 0.01214482297655195, + "rx_overhead_s": 0.0017067939625121653, + "rx_t_start_unix": 1779879222.243023, + "send_t_start_unix": 1779879222.2442062, + "req_ids": [ + "cmpl-b4f0a10dee65acbe-0-a3c132fc" + ] + }, + { + "input_tokens_est": 1024, + "total_bytes": 100663296, + "pure_transfer_s": 0.010436972021125257, + "rx_total_s": 0.011961110983975232, + "rx_overhead_s": 0.0015241389628499746, + "rx_t_start_unix": 1779879222.3569698, + "send_t_start_unix": 1779879222.3581295, + "req_ids": [ + "cmpl-b4c514b80b52a3f2-0-bcd24f8e" + ] + }, + { + "input_tokens_est": 1024, + "total_bytes": 100663296, + "pure_transfer_s": 0.010396371013484895, + "rx_total_s": 0.011788576026447117, + "rx_overhead_s": 0.001392205012962222, + "rx_t_start_unix": 1779879222.4715128, + "send_t_start_unix": 1779879222.4725878, + "req_ids": [ + "cmpl-ac7118d8090d181c-0-8af4adf0" + ] + }, + { + "input_tokens_est": 1024, + "total_bytes": 100663296, + "pure_transfer_s": 0.010352785000577569, + "rx_total_s": 0.0118055299972184, + "rx_overhead_s": 0.0014527449966408312, + "rx_t_start_unix": 1779879222.5826046, + "send_t_start_unix": 1779879222.5837166, + "req_ids": [ + "cmpl-85291bcb93aaf638-0-868db1a8" + ] + }, + { + "input_tokens_est": 16, + "total_bytes": 1572864, + "pure_transfer_s": 0.00034007197245955467, + "rx_total_s": 0.0021119200391694903, + "rx_overhead_s": 0.0017718480667099357, + "rx_t_start_unix": 1779879222.750828, + "send_t_start_unix": 1779879222.7521152, + "req_ids": [ + "cmpl-a448cf2e059ba0c9-0-a1360796" + ] + }, + { + "input_tokens_est": 16, + "total_bytes": 1572864, + "pure_transfer_s": 0.00041691696969792247, + "rx_total_s": 0.0022232600022107363, + "rx_overhead_s": 0.0018063430325128138, + "rx_t_start_unix": 1779879222.913044, + "send_t_start_unix": 1779879222.9143836, + "req_ids": [ + "cmpl-b486fd9e945a4658-0-8bb561cd" + ] + }, + { + "input_tokens_est": 2048, + "total_bytes": 201326592, + "pure_transfer_s": 0.020633380976505578, + "rx_total_s": 0.022250515001360327, + "rx_overhead_s": 0.0016171340248547494, + "rx_t_start_unix": 1779879223.0765986, + "send_t_start_unix": 1779879223.0778644, + "req_ids": [ + "cmpl-82da2bfe65f276c6-0-88d9a9a2" + ] + }, + { + "input_tokens_est": 2048, + "total_bytes": 201326592, + "pure_transfer_s": 0.020639199996367097, + "rx_total_s": 0.022157608007546514, + "rx_overhead_s": 0.0015184080111794174, + "rx_t_start_unix": 1779879223.2591784, + "send_t_start_unix": 1779879223.2603853, + "req_ids": [ + "cmpl-93bd777652eba5f3-0-9ec3d058" + ] + }, + { + "input_tokens_est": 2048, + "total_bytes": 201326592, + "pure_transfer_s": 0.020575353992171586, + "rx_total_s": 0.022589912987314165, + "rx_overhead_s": 0.002014558995142579, + "rx_t_start_unix": 1779879223.4402068, + "send_t_start_unix": 1779879223.4418828, + "req_ids": [ + "cmpl-81f950480a3cabf9-0-bbf8584f" + ] + }, + { + "input_tokens_est": 4096, + "total_bytes": 402653184, + "pure_transfer_s": 0.041439525957684964, + "rx_total_s": 0.043345845013391227, + "rx_overhead_s": 0.0019063190557062626, + "rx_t_start_unix": 1779879223.7529812, + "send_t_start_unix": 1779879223.7544343, + "req_ids": [ + "cmpl-b109ed06b5882659-0-8d14993c" + ] + }, + { + "input_tokens_est": 4096, + "total_bytes": 402653184, + "pure_transfer_s": 0.04152030003024265, + "rx_total_s": 0.04341953102266416, + "rx_overhead_s": 0.0018992309924215078, + "rx_t_start_unix": 1779879224.0899644, + "send_t_start_unix": 1779879224.0914912, + "req_ids": [ + "cmpl-8a57776c81d64b2c-0-ace8fb2b" + ] + }, + { + "input_tokens_est": 4096, + "total_bytes": 402653184, + "pure_transfer_s": 0.04148670402355492, + "rx_total_s": 0.04336977802449837, + "rx_overhead_s": 0.0018830740009434521, + "rx_t_start_unix": 1779879224.424807, + "send_t_start_unix": 1779879224.4262393, + "req_ids": [ + "cmpl-9b1a5dce18758450-0-b17b3649" + ] + }, + { + "input_tokens_est": 4096, + "total_bytes": 402653184, + "pure_transfer_s": 0.04146742797456682, + "rx_total_s": 0.043769759009592235, + "rx_overhead_s": 0.002302331035025418, + "rx_t_start_unix": 1779879224.7599711, + "send_t_start_unix": 1779879224.7617002, + "req_ids": [ + "cmpl-8c7d412b85f43ed7-0-9dea4add" + ] + }, + { + "input_tokens_est": 4096, + "total_bytes": 402653184, + "pure_transfer_s": 0.04143296502297744, + "rx_total_s": 0.043612666020635515, + "rx_overhead_s": 0.002179700997658074, + "rx_t_start_unix": 1779879225.0962389, + "send_t_start_unix": 1779879225.0978234, + "req_ids": [ + "cmpl-8860308db3f010a5-0-ad51eb46" + ] + }, + { + "input_tokens_est": 16, + "total_bytes": 1572864, + "pure_transfer_s": 0.0003991159610450268, + "rx_total_s": 0.002386144013144076, + "rx_overhead_s": 0.001987028052099049, + "rx_t_start_unix": 1779879225.7592747, + "send_t_start_unix": 1779879225.760789, + "req_ids": [ + "cmpl-86cca1a2b9427801-0-ba41ade7" + ] + }, + { + "input_tokens_est": 16, + "total_bytes": 1572864, + "pure_transfer_s": 0.00041423802031204104, + "rx_total_s": 0.0023903060355223715, + "rx_overhead_s": 0.0019760680152103305, + "rx_t_start_unix": 1779879226.384918, + "send_t_start_unix": 1779879226.3864496, + "req_ids": [ + "cmpl-a208c6d804293be7-0-94d265ab" + ] + }, + { + "input_tokens_est": 8192, + "total_bytes": 805306368, + "pure_transfer_s": 0.08309489500243217, + "rx_total_s": 0.08524628396844491, + "rx_overhead_s": 0.002151388966012746, + "rx_t_start_unix": 1779879227.0092332, + "send_t_start_unix": 1779879227.0107942, + "req_ids": [ + "cmpl-b53bea2317cc1211-0-8fcad8a8" + ] + }, + { + "input_tokens_est": 8192, + "total_bytes": 805306368, + "pure_transfer_s": 0.08372796402545646, + "rx_total_s": 0.08596085698809475, + "rx_overhead_s": 0.0022328929626382887, + "rx_t_start_unix": 1779879227.7190688, + "send_t_start_unix": 1779879227.7207224, + "req_ids": [ + "cmpl-9daf909593bbdf03-0-8fd7d50e" + ] + }, + { + "input_tokens_est": 8192, + "total_bytes": 805306368, + "pure_transfer_s": 0.08398396399570629, + "rx_total_s": 0.0860762019874528, + "rx_overhead_s": 0.002092237991746515, + "rx_t_start_unix": 1779879228.4297745, + "send_t_start_unix": 1779879228.4314566, + "req_ids": [ + "cmpl-9ef40f3b6d736128-0-8e8e1c30" + ] + }, + { + "input_tokens_est": 16384, + "total_bytes": 1610612736, + "pure_transfer_s": 0.16950496198842302, + "rx_total_s": 0.1721468890318647, + "rx_overhead_s": 0.002641927043441683, + "rx_t_start_unix": 1779879230.131392, + "send_t_start_unix": 1779879230.1334376, + "req_ids": [ + "cmpl-851e5d7e3e83d7ea-0-a66a5e0b" + ] + }, + { + "input_tokens_est": 16384, + "total_bytes": 1610612736, + "pure_transfer_s": 0.16713789198547602, + "rx_total_s": 0.16974544001277536, + "rx_overhead_s": 0.0026075480272993445, + "rx_t_start_unix": 1779879231.896075, + "send_t_start_unix": 1779879231.8981037, + "req_ids": [ + "cmpl-9be12af6a9ccccf5-0-af1230c7" + ] + }, + { + "input_tokens_est": 16384, + "total_bytes": 1610612736, + "pure_transfer_s": 0.16713115200400352, + "rx_total_s": 0.16975757898762822, + "rx_overhead_s": 0.0026264269836246967, + "rx_t_start_unix": 1779879233.6589305, + "send_t_start_unix": 1779879233.6608078, + "req_ids": [ + "cmpl-b61b9b237366297b-0-9832f0e3" + ] + }, + { + "input_tokens_est": 16384, + "total_bytes": 1610612736, + "pure_transfer_s": 0.16709016199456528, + "rx_total_s": 0.1695251659839414, + "rx_overhead_s": 0.0024350039893761277, + "rx_t_start_unix": 1779879235.4181106, + "send_t_start_unix": 1779879235.419875, + "req_ids": [ + "cmpl-bae0d0efe47ece8f-0-affbc685" + ] + }, + { + "input_tokens_est": 16384, + "total_bytes": 1610612736, + "pure_transfer_s": 0.166486973001156, + "rx_total_s": 0.16962904302636161, + "rx_overhead_s": 0.003142070025205612, + "rx_t_start_unix": 1779879237.1803744, + "send_t_start_unix": 1779879237.1821773, + "req_ids": [ + "cmpl-a34bc73c9cd2efc1-0-90d647fc" + ] + }, + { + "input_tokens_est": 32768, + "total_bytes": 3221225472, + "pure_transfer_s": 0.31926770601421595, + "rx_total_s": 0.32203804596792907, + "rx_overhead_s": 0.002770339953713119, + "rx_t_start_unix": 1779879241.9859307, + "send_t_start_unix": 1779879241.9880297, + "req_ids": [ + "cmpl-89a36c12ee6b0ff3-0-9fddbc0f" + ] + }, + { + "input_tokens_est": 32768, + "total_bytes": 3221225472, + "pure_transfer_s": 0.3197040680097416, + "rx_total_s": 0.3227974839974195, + "rx_overhead_s": 0.003093415987677872, + "rx_t_start_unix": 1779879246.9755645, + "send_t_start_unix": 1779879246.9779432, + "req_ids": [ + "cmpl-8d65512eb7e3c36c-0-8b23597c" + ] + }, + { + "input_tokens_est": 32768, + "total_bytes": 3221225472, + "pure_transfer_s": 0.32088329299585894, + "rx_total_s": 0.3240378479822539, + "rx_overhead_s": 0.003154554986394942, + "rx_t_start_unix": 1779879251.9618897, + "send_t_start_unix": 1779879251.9643052, + "req_ids": [ + "cmpl-a13c271ecbbca78b-0-b76a0370" + ] + }, + { + "input_tokens_est": 32768, + "total_bytes": 3221225472, + "pure_transfer_s": 0.5439103110111319, + "rx_total_s": 0.5924434679909609, + "rx_overhead_s": 0.04853315697982907, + "rx_t_start_unix": 1779879256.9512377, + "send_t_start_unix": 1779879256.9989722, + "req_ids": [ + "cmpl-bada04ec8c556aca-0-a263d637" + ] + }, + { + "input_tokens_est": 32768, + "total_bytes": 3221225472, + "pure_transfer_s": 0.5193864739849232, + "rx_total_s": 0.5644763479940593, + "rx_overhead_s": 0.04508987400913611, + "rx_t_start_unix": 1779879262.2127163, + "send_t_start_unix": 1779879262.2562187, + "req_ids": [ + "cmpl-9641a077022e6123-0-8c3c0975" + ] + }, + { + "input_tokens_est": 65536, + "total_bytes": 6442450944, + "pure_transfer_s": 1.9844180009677075, + "rx_total_s": 2.0784930550144054, + "rx_overhead_s": 0.09407505404669791, + "rx_t_start_unix": 1779879278.1063075, + "send_t_start_unix": 1779879278.199048, + "req_ids": [ + "cmpl-bb3a4e5084af8c3a-0-bdfa0931" + ] + }, + { + "input_tokens_est": 65536, + "total_bytes": 6442450944, + "pure_transfer_s": 2.1099297259934247, + "rx_total_s": 2.2067435560165904, + "rx_overhead_s": 0.09681383002316579, + "rx_t_start_unix": 1779879295.600993, + "send_t_start_unix": 1779879295.6967168, + "req_ids": [ + "cmpl-91b951f85c93a71b-0-8396bee5" + ] + }, + { + "input_tokens_est": 65536, + "total_bytes": 6442450944, + "pure_transfer_s": 1.8950715209939517, + "rx_total_s": 1.9879729640088044, + "rx_overhead_s": 0.0929014430148527, + "rx_t_start_unix": 1779879313.2315958, + "send_t_start_unix": 1779879313.3236735, + "req_ids": [ + "cmpl-81d236ecb6aadadf-0-ac184d51" + ] + }, + { + "input_tokens_est": 65536, + "total_bytes": 6442450944, + "pure_transfer_s": 0.9277855920372531, + "rx_total_s": 0.9849357060156763, + "rx_overhead_s": 0.05715011397842318, + "rx_t_start_unix": 1779879330.6154163, + "send_t_start_unix": 1779879330.6715357, + "req_ids": [ + "cmpl-a4c76c62b44c4295-0-b007a6ed" + ] + }, + { + "input_tokens_est": 65536, + "total_bytes": 6442450944, + "pure_transfer_s": 0.6652462020283565, + "rx_total_s": 0.6725030990201049, + "rx_overhead_s": 0.007256896991748363, + "rx_t_start_unix": 1779879346.990221, + "send_t_start_unix": 1779879346.9950044, + "req_ids": [ + "cmpl-a06d4b774a8af9a5-0-980e9d23" + ] + }, + { + "input_tokens_est": 131072, + "total_bytes": 12884901888, + "pure_transfer_s": 1.3330365709844045, + "rx_total_s": 1.3384539679973386, + "rx_overhead_s": 0.005417397012934089, + "rx_t_start_unix": 1779879402.7123013, + "send_t_start_unix": 1779879402.7169023, + "req_ids": [ + "cmpl-bf0d435e06e3349f-0-8507c933" + ] + }, + { + "input_tokens_est": 131072, + "total_bytes": 12884901888, + "pure_transfer_s": 5.839069904992357, + "rx_total_s": 5.973284716019407, + "rx_overhead_s": 0.13421481102705002, + "rx_t_start_unix": 1779879458.9232886, + "send_t_start_unix": 1779879459.0566247, + "req_ids": [ + "cmpl-9f87ae0fb0c7eec8-0-a8a1daea" + ] + }, + { + "input_tokens_est": 131072, + "total_bytes": 12884901888, + "pure_transfer_s": 9.862486142024864, + "rx_total_s": 10.056511385017075, + "rx_overhead_s": 0.19402524299221113, + "rx_t_start_unix": 1779879519.7647448, + "send_t_start_unix": 1779879519.9567635, + "req_ids": [ + "cmpl-a62e48e40e6c6ad7-0-acca9741" + ] + }, + { + "input_tokens_est": 131072, + "total_bytes": 12884901888, + "pure_transfer_s": 2.8350498770014383, + "rx_total_s": 2.925714804965537, + "rx_overhead_s": 0.09066492796409875, + "rx_t_start_unix": 1779879584.888362, + "send_t_start_unix": 1779879584.9780834, + "req_ids": [ + "cmpl-824479d53bab40e4-0-af951a11" + ] + }, + { + "input_tokens_est": 131072, + "total_bytes": 12884901888, + "pure_transfer_s": 1.485496642999351, + "rx_total_s": 1.5183607729850337, + "rx_overhead_s": 0.032864129985682666, + "rx_t_start_unix": 1779879642.6076336, + "send_t_start_unix": 1779879642.639775, + "req_ids": [ + "cmpl-9f06f19c981c0b3f-0-b3afb370" + ] + } + ], + "summary": [ + { + "input_tokens": 16, + "kv_mib": 1.5, + "n": 6, + "pure_transfer_ms_mean": 0.39, + "pure_transfer_ms_p50": 0.4, + "pure_transfer_ms_max": 0.42, + "pure_transfer_ms_min": 0.34, + "rx_total_ms_mean": 2.27, + "rx_overhead_ms_mean": 1.88, + "throughput_gbps_mean": 4.09, + "throughput_gbps_p50": 3.91, + "throughput_gbps_max": 4.63 + }, + { + "input_tokens": 512, + "kv_mib": 48.0, + "n": 5, + "pure_transfer_ms_mean": 8.9, + "pure_transfer_ms_p50": 5.35, + "pure_transfer_ms_max": 23.2, + "pure_transfer_ms_min": 5.28, + "rx_total_ms_mean": 12.17, + "rx_overhead_ms_mean": 3.26, + "throughput_gbps_mean": 7.99, + "throughput_gbps_p50": 9.4, + "throughput_gbps_max": 9.53 + }, + { + "input_tokens": 1024, + "kv_mib": 96.0, + "n": 5, + "pure_transfer_ms_mean": 10.4, + "pure_transfer_ms_p50": 10.4, + "pure_transfer_ms_max": 10.44, + "pure_transfer_ms_min": 10.35, + "rx_total_ms_mean": 11.91, + "rx_overhead_ms_mean": 1.5, + "throughput_gbps_mean": 9.68, + "throughput_gbps_p50": 9.68, + "throughput_gbps_max": 9.72 + }, + { + "input_tokens": 2048, + "kv_mib": 192.0, + "n": 5, + "pure_transfer_ms_mean": 20.75, + "pure_transfer_ms_p50": 20.64, + "pure_transfer_ms_max": 21.17, + "pure_transfer_ms_min": 20.58, + "rx_total_ms_mean": 22.52, + "rx_overhead_ms_mean": 1.77, + "throughput_gbps_mean": 9.7, + "throughput_gbps_p50": 9.75, + "throughput_gbps_max": 9.78 + }, + { + "input_tokens": 4096, + "kv_mib": 384.0, + "n": 5, + "pure_transfer_ms_mean": 41.47, + "pure_transfer_ms_p50": 41.47, + "pure_transfer_ms_max": 41.52, + "pure_transfer_ms_min": 41.43, + "rx_total_ms_mean": 43.5, + "rx_overhead_ms_mean": 2.03, + "throughput_gbps_mean": 9.71, + "throughput_gbps_p50": 9.71, + "throughput_gbps_max": 9.72 + }, + { + "input_tokens": 8192, + "kv_mib": 768.0, + "n": 5, + "pure_transfer_ms_mean": 83.97, + "pure_transfer_ms_p50": 83.73, + "pure_transfer_ms_max": 85.37, + "pure_transfer_ms_min": 83.09, + "rx_total_ms_mean": 86.17, + "rx_overhead_ms_mean": 2.2, + "throughput_gbps_mean": 9.59, + "throughput_gbps_p50": 9.62, + "throughput_gbps_max": 9.69 + }, + { + "input_tokens": 16384, + "kv_mib": 1536.0, + "n": 5, + "pure_transfer_ms_mean": 167.47, + "pure_transfer_ms_p50": 167.13, + "pure_transfer_ms_max": 169.5, + "pure_transfer_ms_min": 166.49, + "rx_total_ms_mean": 170.16, + "rx_overhead_ms_mean": 2.69, + "throughput_gbps_mean": 9.62, + "throughput_gbps_p50": 9.64, + "throughput_gbps_max": 9.67 + }, + { + "input_tokens": 32768, + "kv_mib": 3072.0, + "n": 5, + "pure_transfer_ms_mean": 404.63, + "pure_transfer_ms_p50": 320.88, + "pure_transfer_ms_max": 543.91, + "pure_transfer_ms_min": 319.27, + "rx_total_ms_mean": 425.16, + "rx_overhead_ms_mean": 20.53, + "throughput_gbps_mean": 8.47, + "throughput_gbps_p50": 10.04, + "throughput_gbps_max": 10.09 + }, + { + "input_tokens": 65536, + "kv_mib": 6144.0, + "n": 5, + "pure_transfer_ms_mean": 1516.49, + "pure_transfer_ms_p50": 1895.07, + "pure_transfer_ms_max": 2109.93, + "pure_transfer_ms_min": 665.25, + "rx_total_ms_mean": 1586.13, + "rx_overhead_ms_mean": 69.64, + "throughput_gbps_mean": 5.27, + "throughput_gbps_p50": 3.4, + "throughput_gbps_max": 9.68 + }, + { + "input_tokens": 131072, + "kv_mib": 12288.0, + "n": 5, + "pure_transfer_ms_mean": 4271.03, + "pure_transfer_ms_p50": 2835.05, + "pure_transfer_ms_max": 9862.49, + "pure_transfer_ms_min": 1333.04, + "rx_total_ms_mean": 4362.47, + "rx_overhead_ms_mean": 91.44, + "throughput_gbps_mean": 5.28, + "throughput_gbps_p50": 4.54, + "throughput_gbps_max": 9.67 + } + ] +} \ No newline at end of file diff --git a/figs/mb2_transfer_bw_intra.png b/figs/mb2_transfer_bw_intra.png new file mode 100644 index 0000000000000000000000000000000000000000..1856c35e368948f21b1c7993e9daa580aa3e632f GIT binary patch literal 73239 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%0A1>$|2!K$i3glrTPqWH{3uC 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 literal 0 HcmV?d00001 diff --git a/microbench/fresh_setup/analyze_mb2.py b/microbench/fresh_setup/analyze_mb2.py new file mode 100644 index 0000000..97c97cd --- /dev/null +++ b/microbench/fresh_setup/analyze_mb2.py @@ -0,0 +1,178 @@ +#!/usr/bin/env python3 +"""Decompose MB2 transfer events into the per-stage breakdown. + +Inputs: + --a-log P-side jsonl with `send_blocks` events + {event=send_blocks, total_bytes, duration_s, t_start_unix, ...} + --b-log D-side jsonl with `receive_kv_enter` and `receive_kv_finish` events + {event=receive_kv_*, t_start_unix, duration_s (on finish), req_ids} + +Pairing: each B receive_kv_enter is followed (in time order) by exactly one +receive_kv_finish for the same req_ids set. The send_blocks event on A whose +t_start_unix falls strictly between enter.t_start_unix and +enter.t_start_unix + finish.duration_s is the pair-matched transfer. + +Output: + per-(input_tokens) summary printed to stdout + --out JSON with full table + per-size aggregates + +Per-stage breakdown (paper-grade vocabulary): + + pure_transfer = send_blocks.duration_s + Network data movement: batch_transfer_sync_write wall-time on P. + rx_total = receive_kv_finish.duration_s + Total time on D from receive_kv() entry to receiving FINISH from P. + Includes ZMQ round-trip + P-side processing + pure_transfer. + rx_overhead = rx_total − pure_transfer + ZMQ handshake + P-side scheduling/setup time. + +We do NOT report queueing or B-side post-transfer decode here — those +require correlation with client-side t_step2 timestamps. This script +operates on log files alone. +""" +from __future__ import annotations + +import argparse +import json +import statistics +from pathlib import Path + + +def load_events(path: Path) -> list[dict]: + rows = [] + with path.open() as f: + for line in f: + try: + rows.append(json.loads(line)) + except json.JSONDecodeError: + continue + return rows + + +def pair_b_events(b_events: list[dict]) -> list[dict]: + """Pair receive_kv_enter with the matching receive_kv_finish (by req_ids).""" + open_by_key: dict[tuple, dict] = {} + paired = [] + for e in b_events: + key = tuple(sorted(e.get("req_ids", []))) + if e["event"] == "receive_kv_enter": + open_by_key[key] = e + elif e["event"] == "receive_kv_finish": + enter = open_by_key.pop(key, None) + if enter is None: + continue + paired.append({ + "req_ids": list(key), + "rx_t_start_unix": enter["t_start_unix"], + "rx_duration_s": e["duration_s"], + "rx_t_end_unix": enter["t_start_unix"] + e["duration_s"], + "tp_rank": e.get("tp_rank"), + }) + return paired + + +def match_a_to_b(a_events: list[dict], b_pairs: list[dict]) -> list[dict]: + """For each B pair, find the A send_blocks event whose t_start_unix is + strictly within [rx_t_start, rx_t_end]. Returns merged rows.""" + a_by_t = sorted( + (e for e in a_events if e["event"] == "send_blocks"), + key=lambda e: e["t_start_unix"], + ) + merged = [] + j = 0 + for p in b_pairs: + lo = p["rx_t_start_unix"] + hi = p["rx_t_end_unix"] + found = None + # advance j to the first A event in window + while j < len(a_by_t) and a_by_t[j]["t_start_unix"] < lo: + j += 1 + if j < len(a_by_t): + a = a_by_t[j] + if a["t_start_unix"] <= hi: + found = a + j += 1 + if found is None: + continue + kv_bytes = found["total_bytes"] + merged.append({ + "input_tokens_est": kv_bytes // 98304, + "total_bytes": kv_bytes, + "pure_transfer_s": found["duration_s"], + "rx_total_s": p["rx_duration_s"], + "rx_overhead_s": max(0.0, p["rx_duration_s"] - found["duration_s"]), + "rx_t_start_unix": p["rx_t_start_unix"], + "send_t_start_unix": found["t_start_unix"], + "req_ids": p["req_ids"], + }) + return merged + + +def aggregate(rows: list[dict]) -> list[dict]: + by_size: dict[int, list[dict]] = {} + for r in rows: + by_size.setdefault(r["input_tokens_est"], []).append(r) + summary = [] + for size in sorted(by_size): + rs = by_size[size] + pts = [r["pure_transfer_s"] for r in rs] + rxs = [r["rx_total_s"] for r in rs] + ovs = [r["rx_overhead_s"] for r in rs] + size_bytes = rs[0]["total_bytes"] + size_mib = size_bytes / (1024 * 1024) + bw = [size_bytes / p / 1e9 for p in pts] # GB/s + summary.append({ + "input_tokens": size, + "kv_mib": round(size_mib, 1), + "n": len(rs), + "pure_transfer_ms_mean": round(statistics.mean(pts) * 1000, 2), + "pure_transfer_ms_p50": round(statistics.median(pts) * 1000, 2), + "pure_transfer_ms_max": round(max(pts) * 1000, 2), + "pure_transfer_ms_min": round(min(pts) * 1000, 2), + "rx_total_ms_mean": round(statistics.mean(rxs) * 1000, 2), + "rx_overhead_ms_mean": round(statistics.mean(ovs) * 1000, 2), + "throughput_gbps_mean": round(statistics.mean(bw), 2), + "throughput_gbps_p50": round(statistics.median(bw), 2), + "throughput_gbps_max": round(max(bw), 2), + }) + return summary + + +def main() -> None: + p = argparse.ArgumentParser() + p.add_argument("--a-log", type=Path, required=True) + p.add_argument("--b-log", type=Path, required=True) + p.add_argument("--out", type=Path, default=None) + args = p.parse_args() + + a_events = load_events(args.a_log) + b_events = load_events(args.b_log) + b_pairs = pair_b_events(b_events) + merged = match_a_to_b(a_events, b_pairs) + summary = aggregate(merged) + + print(f"loaded {len(a_events)} A events, {len(b_events)} B events; " + f"paired {len(b_pairs)} B; matched {len(merged)} (A∩B)") + print() + print(f"{'in_tok':>8} {'KV_MiB':>8} {'n':>4} " + f"{'pure_ms':>10} {'rx_ms':>10} {'overhead_ms':>12} " + f"{'GB/s_p50':>10} {'GB/s_max':>10}") + for s in summary: + print(f"{s['input_tokens']:>8} {s['kv_mib']:>8.1f} {s['n']:>4} " + f"{s['pure_transfer_ms_p50']:>10.1f} " + f"{s['rx_total_ms_mean']:>10.1f} " + f"{s['rx_overhead_ms_mean']:>12.1f} " + f"{s['throughput_gbps_p50']:>10.2f} " + f"{s['throughput_gbps_max']:>10.2f}") + + if args.out: + args.out.parent.mkdir(parents=True, exist_ok=True) + args.out.write_text(json.dumps({ + "rows": merged, + "summary": summary, + }, indent=2)) + print(f"\nwrote {args.out}") + + +if __name__ == "__main__": + main() diff --git a/microbench/fresh_setup/plot_mb2.py b/microbench/fresh_setup/plot_mb2.py new file mode 100644 index 0000000..3f0d040 --- /dev/null +++ b/microbench/fresh_setup/plot_mb2.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +"""Plot MB2 transfer-time + bandwidth curves.""" +from __future__ import annotations + +import argparse +import json +from pathlib import Path + +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt +import numpy as np + + +def main() -> None: + p = argparse.ArgumentParser() + p.add_argument("--breakdown", type=Path, required=True, + help="JSON from analyze_mb2.py") + p.add_argument("--out-time", type=Path, default=Path("figs/mb2_transfer_time.png")) + p.add_argument("--out-bw", type=Path, default=Path("figs/mb2_transfer_bw.png")) + p.add_argument("--label", default="intra-node (kv_both, dash1 GPU 0+1)") + args = p.parse_args() + + d = json.loads(args.breakdown.read_text()) + # Drop the spurious 16-token events (zero-byte sends produced by the + # connector during request init; not a real KV transfer). + rows = [r for r in d["rows"] if r["input_tokens_est"] >= 64] + summary = [s for s in d["summary"] if s["input_tokens"] >= 64] + + kv_mib = [s["kv_mib"] for s in summary] + p50_ms = [s["pure_transfer_ms_p50"] for s in summary] + min_ms = [s["pure_transfer_ms_min"] for s in summary] + max_ms = [s["pure_transfer_ms_max"] for s in summary] + bw_p50 = [s["throughput_gbps_p50"] for s in summary] + bw_max = [s["throughput_gbps_max"] for s in summary] + + # ---- pure transfer time vs KV size (log-log) ---- + fig, ax = plt.subplots(figsize=(8, 5)) + ax.errorbar(kv_mib, p50_ms, + yerr=[np.array(p50_ms) - np.array(min_ms), + np.array(max_ms) - np.array(p50_ms)], + fmt="o-", color="#1f77b4", lw=2, markersize=7, + capsize=4, label="pure_transfer (batch_transfer_sync_write)") + # 9.7 GB/s reference line + ref_bw_gbps = 9.7 + ref_x = np.array(kv_mib) + ref_y_ms = (ref_x * 1024 * 1024) / (ref_bw_gbps * 1e9) * 1000 + ax.plot(ref_x, ref_y_ms, "--", color="#888", alpha=0.7, + label=f"ideal {ref_bw_gbps:.1f} GB/s reference") + + # agentic-relevant horizontal markers + for name, ms in [("typical chatbot decode (~5 s)", 5000), + ("typical agentic decode (~50–200 ms)", 100)]: + ax.axhline(ms, color="#c44e52", lw=0.8, ls=":", alpha=0.5) + ax.text(kv_mib[-1] * 0.85, ms * 1.15, name, fontsize=8, + color="#7a1d1d", ha="right") + + # p99 agentic KV vertical marker + ax.axvline(11500, color="#c44e52", lw=0.8, ls=":", alpha=0.5) + ax.text(11500, 0.7, "p99 agentic\nrequest 11.5 GiB", + fontsize=8, color="#7a1d1d", ha="center") + + ax.set_xscale("log") + ax.set_yscale("log") + ax.set_xlabel("KV transfer size (MiB)") + ax.set_ylabel("Pure transfer time (ms, log)") + ax.set_title(f"MB2: KV transfer time vs size — {args.label}") + ax.grid(True, which="both", alpha=0.3) + ax.legend(loc="upper left", fontsize=9) + + args.out_time.parent.mkdir(parents=True, exist_ok=True) + fig.tight_layout() + fig.savefig(args.out_time, dpi=150) + plt.close(fig) + print(f"wrote {args.out_time}") + + # ---- bandwidth vs KV size ---- + fig, ax = plt.subplots(figsize=(8, 5)) + ax.plot(kv_mib, bw_p50, "o-", color="#2ca02c", lw=2, markersize=7, + label="bandwidth p50") + ax.plot(kv_mib, bw_max, "x--", color="#ff7f0e", lw=1.5, markersize=8, + label="bandwidth max") + ax.axhline(9.7, color="#888", ls="--", alpha=0.6, + label="steady-state ≈ 9.7 GB/s") + ax.set_xscale("log") + ax.set_xlabel("KV transfer size (MiB)") + ax.set_ylabel("Effective bandwidth (GB/s)") + ax.set_ylim(0, 12) + ax.set_title(f"MB2: KV transfer bandwidth vs size — {args.label}") + ax.grid(True, which="both", alpha=0.3) + ax.legend(loc="lower left", fontsize=9) + args.out_bw.parent.mkdir(parents=True, exist_ok=True) + fig.tight_layout() + fig.savefig(args.out_bw, dpi=150) + plt.close(fig) + print(f"wrote {args.out_bw}") + + +if __name__ == "__main__": + main()