test: add coalescer delay cost report (#6464)

Add a read-only Prometheus report helper for backlog#2007 so the 200us vs 50us coalescer delay experiment can capture RPC, batch distribution, stage latency, and host-cost signals with one fixed evidence format.

Co-authored-by: heihutu <heihutu@gmail.com>
This commit is contained in:
houseme
2026-08-23 23:22:38 +08:00
committed by GitHub
parent 7f32c675ac
commit 83aa9c221b
4 changed files with 413 additions and 0 deletions
@@ -0,0 +1,58 @@
# Backlog #2007 Coalescer Delay Validation
`scripts/issue_2007_coalescer_prometheus_report.py` is a read-only Prometheus
report helper for validating whether the GET metadata `ReadVersion` coalescer
default can move from `200us` to `50us`.
The benchmark itself is intentionally external to this helper: use the same
main build, bucket/object set, workload, and
`RUSTFS_BATCH_READ_VERSION_SERVER_PARALLELISM=4` for both cells. Only switch:
```bash
RUSTFS_GET_METADATA_READ_VERSION_COALESCE=auto
RUSTFS_GET_METADATA_READ_VERSION_COALESCE_DELAY_MICROS=200
RUSTFS_GET_METADATA_READ_VERSION_COALESCE_DELAY_MICROS=50
```
After each measured workload window, collect a report from Prometheus:
```bash
scripts/issue_2007_coalescer_prometheus_report.py \
--query-url http://prometheus.example:9090 \
--profile delay-200us \
--window 180s \
--rustfs-selector 'server=~"node[5-8]"' \
--node-selector 'instance=~"node[5-8].*"'
scripts/issue_2007_coalescer_prometheus_report.py \
--query-url http://prometheus.example:9090 \
--profile delay-50us \
--window 180s \
--rustfs-selector 'server=~"node[5-8]"' \
--node-selector 'instance=~"node[5-8].*"'
```
The output is Markdown and is suitable for attaching to the issue alongside the
warp throughput, average latency, p95, p99, and TTFB p99 from the fixed
workload run.
Required RustFS signals:
- `grpc_read_version` and `grpc_batch_read_version` outgoing request increases.
- Coalescer batch distribution from
`rustfs_get_metadata_read_version_coalescer_total{event="attempted_batch"}`.
- `batch_read_version_coalescer_wait`, `batch_read_version_rpc_roundtrip`,
`batch_read_version_disk_read`, and `batch_read_version_response_map` p99.
Required host-cost signals:
- CPU busy from `node_cpu_seconds_total`.
- Network RX/TX from `node_network_receive_bytes_total` and
`node_network_transmit_bytes_total`.
- Disk read await, average queue depth, and utilization from node-exporter disk
counters.
If a section reports `UNAVAILABLE`, treat that evidence as missing rather than
zero. Do not use a default-change PR until the `50us` cell has stable
throughput/latency benefit and CPU, network, and disk cost are available and
acceptable.