Skip to content

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

@bdchatham

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions