Repository navigation
v0.31.1
-
Shared variables: lists in the
memorydriver are stored as a deque, so
pop(std/get_shared_variable@v1op: 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
sharedvarssuite — 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 withBENCH_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-sdkis
rewritten against the real SDK — value generators (defineLibrary),
custom steps (defineSteps,lib/<alias>/<step>,StepResultoutputs,
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
describedimports:-based loading and adefineMetricAPI that don't
exist. Newperfscale-run-analysisskill: 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@v1learns object sources and field renaming:with.keyselects
a value from a JSON object (from/filemay now hold an object or a
string with one), andwith.remap: { source: destination }renames
top-level fields of the picked value — or of the whole object when no
key/indexis 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--quietsuccessful
std/http@v1/std/graphql@v1requests 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