Skip to content

rbperf v0.1.0

Compare
Choose a tag to compare
@javierhonduco javierhonduco released this 02 Oct 17:55
· 50 commits to main since this release

This is the first rbperf release! 🎉

New features

  • Written in Rust, which brings a lot of performance improvements and excellent dev UX features. Stay tuned for a write-up on why Rust is an excellent fit for rbperf 50231c3;
  • Using libbpf, via libbpf-rs, which brings us a lot of goodies such as not having to ship/use LLVM and recompile the BPF code every single time, BTF, CO-RE, among many other features;
  • A bunch of correctness issues were squashed. On some occasions, the Ruby stack walker did not stop after the last frame and bogus frames were introduced;
  • Added support for Ruby 3.0.0, 3.0.4, and 3.1.2;
  • Added rbperf info, which shows useful information about the system and the BPF features it supports e81748a;
  • Added detection of PID reuse, to ensure that the right process is the one being profiled 272c8f3;
  • rbperf record --pid <pid> syscall --list lists the available system calls we can trace eda4f21;
  • With --ringbuf the new ring buffer interface can be used instead of perf events. This new API can send data to userspace with lower overhead 8a1e048;
  • Added --verbose-bpf-logging to the record subcommand to enable BPF logging that can be tailed at /sys/kernel/debug/tracing/trace_pipe. This is very useful while troubhleshooting BPF issues and having it as a flat helps reduce rbperf's overhead as the loader removes branches that can be proved as non-reachable 422c5ca;
  • Libelf and zlib are now statically linked libbpf/libbpf-sys@371a85d, libbpf/libbpf-rs@5bed52a;
  • And many many others!

Feel free to send any bugs, feedback, ideas, or comments, either by opening an issue or directly to me!

Removed features (so far)

  • Uprobe/USDTs have not been implemented yet. This is super useful, especially for allocation profiling and will come later on;
  • There's no binary format. While it would be very useful to have an intermediate format that can be converted to a variety of outputs, such as flamegraphs and so on, I wanted to keep the focus on correctness in improving the current code and APIs. Once these things are fleshed out the binary format will be reconsidered

Acknowledgements

Thanks so much to all of you that have tried rbperf. Your feedback has been invaluable!