Skip to content

v0.31.1

Choose a tag to compare

@github-actions github-actions released this 05 Nov 14:07
· 46 commits to main since this release
b6dd3f0
  • Shared variables: lists in the memory driver are stored as a deque, so
    pop (std/get_shared_variable@v1 op: pop) is O(1) instead of
    shifting the whole list — a 100k-item work queue went from ~5k to ~777k
    pops/s on the new bench (CPU per iteration 203 µs → 10 µs). Behaviour and
    JSON shapes are unchanged.

  • Benchmarks: new sharedvars suite — cross-VU shared state (append → pop
    → increment, and draining a prefilled queue) on perfscale
    shared_variables, k6 + xk6-kv, locust and JMeter, with correctness
    columns (lost increments, queue drift) next to iterations/s. The bench
    workflow now runs with BENCH_STRICT=1: a row whose metrics don't parse
    fails the job (after the report and artifact are written).

  • Agent skills (perfscale init-skills): perfscale-library-sdk is
    rewritten against the real SDK — value generators (defineLibrary),
    custom steps (defineSteps, lib/<alias>/<step>, StepResult outputs,
    metrics and checks), trusted process steps (ctx.exec, --process),
    config extensions, WASM reporters (defineReporter), testing without
    WASM (testCall / testStep) and install/lock/burn; it previously
    described imports:-based loading and a defineMetric API that don't
    exist. New perfscale-run-analysis skill: reading the summary and
    [stats], --summary-export / report@v1, open-model latency and
    dropped iterations, target vs generator bottlenecks (engine_metrics,
    port exhaustion), abort_on_fail + http_debug, threshold syntax and
    fair run comparison.

  • std/pick@v1 learns object sources and field renaming: with.key selects
    a value from a JSON object (from/file may now hold an object or a
    string with one), and with.remap: { source: destination } renames
    top-level fields of the picked value — or of the whole object when no
    key/index is given. Data-losing remaps (missing source, duplicate or
    colliding destinations) fail the step instead of silently dropping fields.

  • Faster payload generation and interpolation: the ${ / ${{ token scans
    run on a SIMD substring search (memchr::memmem — SSE2/AVX2/NEON) instead
    of a scalar one, and built-in tokens (${seq}, ${uuid}, ${rand(…)},
    ${choice(…)}, …) write straight into the output buffer instead of
    allocating a string each. Micro-benchmarks: a 4 KiB body with trailing
    tokens −71%, a 4 KiB interpolated string −60%, built-in-heavy payloads
    −41% (7 → 2 allocations per message). HTTP responses move a valid UTF-8
    body into the step output without copying it, the reason phrase is no
    longer allocated per response, and under --quiet successful
    std/http@v1 / std/graphql@v1 requests skip formatting their log line.

What's Changed

  • perf: SIMD token scans, allocation-free built-ins, leaner HTTP responses by @vitalics in #34
  • feat(core): add key lookup and remapping to std/pick by @vitalics in #35
  • Potential fix for code scanning alert no. 50: Cleartext logging of sensitive information by @vitalics in #37
  • ci(release): merging a release/vX.Y.Z PR releases vX.Y.Z automatically by @vitalics in #39
  • perf(shared-variables): O(1) pop + sharedvars bench suite vs k6 xk6-kv, locust, JMeter by @vitalics in #38
  • docs(skills): rewrite perfscale-library-sdk against the real SDK, add perfscale-run-analysis by @vitalics in #40
  • Release v0.31.1 by @vitalics in #36

Full Changelog: v0.31.0...v0.31.1