Releases: parca-dev/parca-agent
v0.35.0
v0.34.0
The biggest change in this release is that the custom-labels feature has reached sufficient maturity that we recommend enabling it for Go, Rust, C, and C++ workloads.
What's Changed
- fix(snap): ensure arm64 build can be performed from an amd64 machine by @jnsgruk in #2987
- Add metrics for WriteRequest calls by @umanwizard in #2988
- Auto-limit memory by @umanwizard in #2992
- Allow running without syscall tracepoints by @umanwizard in #2990
Full Changelog: v0.33.1...v0.34.0
v0.33.1
This fixes a bug with the Custom Labels feature causing it not to work for native binaries with non-empty .tdata sections.
All users of v0.33.0 should update to this version.
Bug Fixes
Full Changelog: v0.33.0...v0.33.1
v0.33.0
The big new feature in v0.33.0 is the ability to add custom labels to stacks via minimal instrumentation from target processes. This works with Go by extracting all Goroutine labels (set via pprof.Do
or pprof.SetGoRoutineLabels
), or C, C++, and Rust using the custom-labels
library (or anything else that follows the same ABI). Note, this is an experimental feature and may break in the future.
Enhancement
- build: reintroduce snap packaging, test, and release flows by @jnsgruk in #2969
- Support thread ID label by @umanwizard in #2970
- Supports native custom labels by @umanwizard in #2977
- Wire up metrics from the otel library by @umanwizard in #2980
Bug fixes
- Only cache metadata if successfully gathered by @brancz in #2979
- Fix duplicate registration during grpc retry by @umanwizard in #2982
- Search for k8s containers by name, not position in array. by @umanwizard in #2983
Full Changelog: v0.32.0...v0.33.0
v0.32.0
This release of Parca Agent marks a huge milestone! From now on, Parca-Agent, the previously only fully open source, Apache2 licensed, and open for contributions eBPF-based profiler is now based on the opentelemetry-ebpf-profiler, and all language support efforts will be focused there. By basing the Parca-Agent on the opentelemetry-ebpf-profiler besides the C, C++, Rust, Go, Python, and Ruby support, it gained JVM, .NET, Perl, and PHP support! However, on top of the opentelemetry-ebpf-profiler the Parca Agent continues to ship a deep end-to-end integration with the Parca server, delivering the only fully open-source end-to-end system-wide profiling experience.
As such it ships several things on top:
- Allow the Parca server to asynchronously symbolized stacktraces. This means not only interpreted languages have function names, but C, C++, Rust, Go, etc. as well.
- A more optimized wire-protocol based on Apache Arrow. Less CPU time spent putting together the data to send off to the server and less bytes!
- A wide array of metadata from Kubernetes, containerd, cgroups, lxc, docker, etc. so you can make profiling adapt to how you organize your data!
And more!
To use the v0.32.0 release, a Parca server v0.22.0+ is required due to the new wire protocol. Try it out right away via the Quickstart!
Happy Profiling!
Parca Maintainers Team
v0.31.1
Highlights
- Warn on failure to read custom labels by @umanwizard in #2913
- Auto-limit memory by @umanwizard in #2912
- Don't set custom labels ID if we failed to save the hash by @umanwizard in #2915
What's Changed
- build(deps): update module github.com/prometheus/common to v0.55.0 by @renovate in #2906
- build(deps): update dependency golang to v1.22.5 by @renovate in #2905
- build(deps): update module github.com/minio/highwayhash to v1.0.3 by @renovate in #2907
- chore(deps): update gcr.io/distroless/base-debian11 docker digest to ac69aa6 by @renovate in #2909
- build(deps): update gcr.io/distroless/static docker digest to ce46866 by @renovate in #2908
- chore(deps): jsonnet-bundler Lock file maintenance by @renovate in #2910
- chore(deps): nix Lock file maintenance by @renovate in #2911
- Warn on failure to read custom labels by @umanwizard in #2913
- Fix erroneous nCustomLabels accounting by @umanwizard in #2914
- Auto-limit memory by @umanwizard in #2912
- Don't set custom labels ID if we failed to save the hash by @umanwizard in #2915
Full Changelog: v0.31.0...v0.31.1
v0.31.0
Highlights
- Custom labels to turn Go profiling labels into pprof labels
- MUSL support
- Enhanced python support, especially on arm64 and alpine/MUSL systems
- Arm64 fixes for PAC mode
- Synthetic unwinder errors
- Improved dwarf unwinding by using .debug_frame and .debug_link
- Fixes for linux 6.8 kernels (verifier errors)
What's Changed
- java: Add groundwork for the naive unwinder by @kakkoyun in #2591
- Use object file pool cache for unwind information by @gnurizen in #2595
- Fix benign but bogus main executable assumption by @gnurizen in #2596
- bpf/unwinder/native: remove duplicated code by @Sylfrena in #2603
- Scripts ergonomics by @gnurizen in #2601
- Various fixes for aarch64 by @umanwizard in #2604
- go.*: Update runtime-data by @kakkoyun in #2610
- Only attempt to profile online CPUs by @umanwizard in #2646
- Fix function end detection by @umanwizard in #2636
- Surface unwind failure reasons in status page by @umanwizard in #2649
- Bump Ainur to fix Go version misdetection by @umanwizard in #2656
- Add a bit more logging/metrics when unwind table adding fails by @umanwizard in #2670
- pkg/profiler/cpu/bpf/maps: Improve too many mappings error message by @brancz in #2675
- Add "unwind failed" synthetic stacks by @umanwizard in #2682
- add failed reasons stacks even when there are no other stacks in the profile by @umanwizard in #2687
- Avoid filling uploadJob channel w/ NoopDebugInfoManager by @gnurizen in #2686
- Fix template test by @gnurizen in #2690
- Fix bug where event processors exit on error by @umanwizard in #2688
- Oops, don't log unconditionally by @umanwizard in #2693
- Fix off-by-one error in chunk splitting by @umanwizard in #2697
- Add "request read" event by @umanwizard in #2705
- Makefile fixes for guix by @umanwizard in #2706
- fast integration by @gnurizen in #2698
- Don't swallow errors from GenerateCompactUnwindTable by @umanwizard in #2718
- minor logging improvements by @umanwizard in #2709
- Run amd64 integration tests on public github actions runners by @brancz in #2720
- remove no-op Close statement by @umanwizard in #2721
- Fix pointer authentication for FP-based unwinding by @umanwizard in #2732
- Fix arm native integration tests by @gnurizen in #2734
- Fix unwinder loading on 6.8 kernels by @umanwizard in #2667
- Bump max per-process mappings up to 2000 by @gnurizen in #2749
- bpf/unwinders/pyperf: Use an LRU map and increase the size by @brancz in #2760
- Properly get return address for leaf frames on ARM during syscalls by @umanwizard in #2761
- Log in another case where we unexpectedly fail to add unwind table by @umanwizard in #2766
- Use both .eh_frame and .debug_frame by @umanwizard in #2717
- Update MAINTAINERS.md by @Sylfrena in #2771
- Fix build ID precedence by @brancz in #2775
- spam opaquify in more places to fix verifier issues on 6.8 by @umanwizard in #2781
- .github: Don't skip building snap if only changing .c files by @brancz in #2783
- Don't use .debug_frame info for Go binaries by @umanwizard in #2782
- Fix Python version detection by @umanwizard in #2794
- feat: add procfs cmdline by @dreamerlzl in #2799
- don't hang on panic in Run() by @umanwizard in #2792
- fix duplicated leaf frame for dwarf unwinding by @umanwizard in #2811
- Get Go custom label offsets dynamically by @umanwizard in #2808
- fix verification on 5.4 by @umanwizard in #2816
- Add Tommy to MAINTAINERS.md by @gnurizen in #2820
- support musl 1.2.5/alpine 3.20 by @gnurizen in #2823
- Musl support by @gnurizen in #2605
- fix go runtime detection to work with containers by @gnurizen in #2815
- Refix 5.4 verifier error by @gnurizen in #2837
- add the stack anyway in the case of truncation for native frames. by @umanwizard in #2850
- Deduplicate list of PIDs in processEventBatcher by @umanwizard in #2845
- If we have should_use_fp_by_default set we need to honor it or we will fail to unwind go binaries with no dwarf info. by @gnurizen in #2858
- memset entire unwind_state by @gnurizen in #2857
- Use arm for skip-check by @gnurizen in #2863
- Use --verbose instead of --debug by @brancz in #2867
- ra-1 fix for FP unwinding by @umanwizard in #2874
- Fix one more case where we should assume we're done walking the stack when we have dwarf info but encounter a pc out of range. by @gnurizen in #2872
- Revert "memset the entire unwind_state to make sure no" by @gnurizen in #2878
- Remove synthetic unwinder error frames from agent and instead generate them in the unwinder with more context by @gnurizen in #2851
- Collect custom labels by @umanwizard in #2833
- fix x86 verification issues with custom labels by @umanwizard in #2886
- fix wrong computation of current goroutine in kernel code on arm by @umanwizard in #2887
- Fix various issues with debuginfo uploading by @umanwizard in #2895
- Fix various panics in DWARF decoding by @umanwizard in #2896
- Increase warning level when failing to fetch unwinder info by @umanwizard in #2892
- Fix golang runtime detection for containers by @umanwizard in #2903
New Contributors
- @umanwizard made their first contribution in #2604
Full Changelog: v0.30.0...v0.31.0
v0.30.0
v0.29.0
Changelog
Features
- *: Use fp unwinding for erlang and add erlang metadata by @brancz in #2339
- unwinder/native: Per code region unwinder selection by @javierhonduco in #2419
- python: Add initial ARM64 Support by @kakkoyun in #2439
- ruby: Add initial Ruby ARM64 support by @kakkoyun in #2523
- python: Add Python 3.12 Support by @kakkoyun in #2553
- python: Add Python 3.13 support by @kakkoyun in #2560
Fixes
- fix: bpf struct sizes fixes by @korniltsev in #2476
- Use OS num CPUs instead of runtime schedulable ones by @brancz in #2493
- Reverting unneeded sorting of mappings on wrong field by @gnurizen in #2532
Enhancements
- pkg/objectfile: Use mount namespace id in cache key instead of build id by @brancz in #2348
- feat(snap): add config option for external labels by @morphis in #2340
- test/integration: Add CPU profiler integration tests for arm64 by @Sylfrena in #2403
- Add counter metric for total bytes sent to remote store by @metalmatze in #2421
- Add metric to track number of bpf program runs by @brancz in #2460
- Add metrics to track number and type of bpf program early exits by @gnurizen in #2486
- DWARF: Add logging for unexpected CFA opcodes by @Sylfrena in #2479
- test/integration: Add initial tests for ruby and python by @kakkoyun in #2501
- Cache executables for unwind tables to speed up CGI-like workloads by @gnurizen in #2517
- debug: Make process filtering work by @gnurizen in #2550
New Contributors
- @morphis made their first contribution in #2340
- @korniltsev made their first contribution in #2476
- @gnurizen made their first contribution in #2486
Full Changelog: v0.28.0...v0.29.0
Docker images
docker pull ghcr.io/parca-dev/parca-agent:v0.29.0
Thanks!
Join our Discord server;
Follow us on Twitter;
Read the documentation.
v0.28.0
Changelog
Features
- interpreter: Enable Python and Ruby Unwinding by default by @kakkoyun in #2281
- interpreter: Add filenames for interpreted functions by @kakkoyun in #2278
- profiler: Make the profile events rate limits adjustable by @javierhonduco in #2322
Fixes
- python: Fix detection logic by @javierhonduco in #2263
- Fix unbounded memory growth with perfmaps/JIT dumps by @brancz in #2265
- pprof: Fix panic while assembling interpreter's profile by @javierhonduco in #2267
- pkg/compiler: Fix path building by @brancz in #2315
- pkg/metadata/compiler: Use filepath.Join by @brancz in #2316
Enhancements
- metadata: Add arch label by @kakkoyun in #2218
- metadata: Add runtime labels for NodeJS by @kakkoyun in #2233
- main: Allow passing token via env var by @brancz in #2256
- metadata: Separate label sets per runtime by @kakkoyun in https://github.com/parca-dev/parca-agent/pull/2253pull/2272
- profiler: Improve BPF events handling by @javierhonduco in #2285
- metadata: Cache and control compiler metadata fetches by @kakkoyun in #2287
- interpreter: Reduce the number of the reads from the interpreter symbol table by @kakkoyun in #2290
- runtime: Use ainur.StreamReader instead of io.RuneReader by @kakkoyun in #2304
- runtime: Optimize FindSymbol by @kakkoyun in #2305
- bpf: Remove line number from the frame by @javierhonduco in #2286
- *: Use optimized symtabs for jitdump and perfmaps by @brancz in #2307
- profiler: Fix error handling by @javierhonduco in #2318
- pkg/symtab: Use bufio.Writer to reduce write syscalls by @brancz in #2321
- pkg/perf: Prevent intermediate perfmap/jitdump entry lists by @brancz in #2325
Full Changelog: v0.27.0...v0.28.0
Docker images
docker pull ghcr.io/parca-dev/parca-agent:v0.28.0
Thanks!
Join our Discord server;
Follow us on Twitter;
Read the documentation.