Skip to content

Phase 1: open-loop measurement core (coordinated-omission fix) #34

Description

@bdchatham

Part of #33. Foundation — non-negotiable; everything else is decoration on top of a broken measurement until this lands.

Problem

Latency is measured closed-loop and clocked from dequeue, not intended send (sender/worker.go:241). A closed-loop generator slows its own issue rate when the chain stalls, so it only measures survivors — numbers get better exactly when the SUT is failing. The rate limiter (worker.go:231 Allow() busy-spin) doesn't enforce a schedule. Percentiles come from a truncated 10k sample (stats/collector.go), so p99/max are unstable.

Approach

  • Open-loop scheduler: issue at t_i = t0 + i/λ independent of completion; workers become the send mechanism, not the rate governor.
  • Latency from intended send time: inclusion_ts − intended_send_ts.
  • HdrHistogram for full-fidelity p99.9/max, mergeable across workers/shards.
  • schedule_lag_p99 verdict gate: void the run if lag > 10% of 1/λ (provisional; tune from calibration).

Acceptance criteria

  • Constant-rate open-loop arrival; achieved-vs-offered both recorded.
  • Latency uses intended-time; HdrHistogram replaces the sample slice.
  • Runs that were generator-bound are flagged void, not reported as SUT results.

Design: https://github.com/sei-protocol/platform/blob/main/docs/designs/sei-load-workload-modeler.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions