github robintra/perf-sentinel v0.4.8

latest releases: chart-v0.2.51, v0.8.6, chart-v0.2.50...
one month ago

What's new in v0.4.8

Small but high-impact performance release focused on the allocator used by the Linux release binaries. Swapping musl's built-in malloc for mimalloc on static builds closes the musl-vs-glibc throughput gap observed on v0.4.6, and then some. Benchmark on aarch64 Linux over 500 iterations of the 78-event demo dataset: 2.00M events/sec on musl + mimalloc vs 1.54M events/sec on glibc vs 1.08M events/sec on musl alone (v0.4.6 baseline). Same binary portability guarantees as v0.4.6 and v0.4.7 (statically linked, runs on any distro, inside FROM scratch images). The swap is automatic on the Linux release artifacts via a target-gated dependency. No user-visible surface change on macOS, Windows, or any future Linux-gnu target, where the system allocator stays in place.

Changed

  • Musl Linux release binaries now use mimalloc as global allocator via a target-gated dependency ([target.'cfg(target_env = "musl")'.dependencies] mimalloc = "0.1.49") and a #[cfg(target_env = "musl")] #[global_allocator] declaration in the CLI binary. musl's built-in malloc is noticeably slower than glibc's under allocator contention. mimalloc closes that gap and overshoots it: the same aarch64 Linux bench that measured 1.08M ev/s on v0.4.6 musl and 1.47M ev/s on a glibc build now reads 2.00M ev/s on musl + mimalloc and 1.54M ev/s on glibc. RSS cost is about +21% (42 MB vs 34 MB), the expected tradeoff for a faster allocator with larger arenas. Avoids the cost of maintaining a dual glibc/musl release matrix to recover the perf delta. Full rationale, bench methodology, and the tradeoff vs feature-flag in docs/design/07-CLI-CONFIG-RELEASE.md § "Allocator on musl builds". crates/sentinel-cli/Cargo.toml, crates/sentinel-cli/src/main.rs.

Docs

  • New ### Allocator on musl builds subsection in docs/design/07-CLI-CONFIG-RELEASE.md + FR counterpart, under the "Release profile" section. Covers the allocator choice, the v0.4.6 baseline numbers, the v0.4.8 mimalloc results, the RSS tradeoff, and the rationale for choosing target-gated dependency over opt-in feature flag.
  • Per-constant and per-function doc comments trimmed in crates/sentinel-core/src/ingest/tempo.rs (SEARCH_TIMEOUT, FETCH_TRACE_TIMEOUT, FETCH_CONCURRENCY, drain_fetch_set) and in crates/sentinel-core/src/daemon/json_socket.rs (ENOENT handling). The detailed rationale that used to live inline in the code now lives in the design docs added in v0.4.7 (06-INGESTION-AND-DAEMON.md § "Tempo ingestion"). Code comments keep a single-line pointer to the doc section so a reader in the source file still knows where to find the context. No behavior change.

Install

Prebuilt binaries (Linux amd64 / arm64, macOS arm64, Windows amd64):

curl -LO https://github.com/robintra/perf-sentinel/releases/download/v0.4.8/perf-sentinel-linux-amd64
chmod +x perf-sentinel-linux-amd64
sudo mv perf-sentinel-linux-amd64 /usr/local/bin/perf-sentinel

Linux binaries are statically linked against musl and run on any distribution (Alpine, Debian, RHEL, Ubuntu any version) regardless of glibc version, and inside FROM scratch images.

From crates.io:

cargo install perf-sentinel

Docker:

docker run --rm -p 4317:4317 -p 4318:4318 \
  ghcr.io/robintra/perf-sentinel:0.4.8 watch --listen-address 0.0.0.0

Also available on Docker Hub: robintrassard/perf-sentinel:0.4.8.

Verify the binary against SHA256SUMS.txt:

curl -LO https://github.com/robintra/perf-sentinel/releases/download/v0.4.8/SHA256SUMS.txt
sha256sum -c SHA256SUMS.txt --ignore-missing

Full diff: v0.4.7...v0.4.8

Don't miss a new perf-sentinel release

NewReleases is sending notifications on new releases.