Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Every time I see people use flamegraphs it's the ancient Perl version. There's a much better version!!!

Use the Go version of pprof: https://github.com/google/pprof

Run it like `pprof -http : your_profile.out` and it will open a browser with a really nice interactive flamegraph (way better than the Perl version), plus a call graph, source line profiling, top functions, etc. etc.

It's so much better. Don't use the Perl version. I should probably write a post showing how to do this.

Another also-much-better alternative is Samply (https://github.com/mstange/samply) which uses the Firefox Profiler as a GUI. I don't like it quite as much as pprof but it's clearly still much better than what's in this article:

https://share.firefox.dev/3j3PJoK



It should be noted that even though the post links to the perl version for some reason, it is actually not what cargo flamegraph [0] uses, it uses a reimplementation of it in Rust called inferno [1].

[0]: https://github.com/flamegraph-rs/flamegraph

[1]: https://github.com/jonhoo/inferno


Also Jon streamed the process of porting flamegraph to Rust: https://youtu.be/jTpK-bNZiA4?si=VsvBln60BCEU7hbz


Ah interesting. It seems to be no better than the Perl one though, except not requiring Perl. It's still a static SVG.


It's not a static SVG though. The SVG supports interactivity. You can click on each element to zoom in and it even has a search feature.


Ah really? Their example here doesn't do that: https://github.com/jonhoo/inferno/blob/main/tests/data/flame...

But even so, pprof's is better. (You'll have to try it or take my word for it; they don't seem to have a demo anywhere unfortunately.)

When you hover a function it highlights all the other calls to that function (in different stacks), and if you click it it shows all the calls to and from that function in all stacks with two-sided flame graph.


The one at https://github.com/flamegraph-rs/flamegraph/blob/main/exampl... supports both zooming and search.


Ah I see. Yeah pprof is significantly superior.


I recently discovered that `perf` itself can spit out flamegraphs. My workflow has been:

    $ perf record -g -F 99 ./my-program
    $ perf script report flamegraph
You can also run `perf script -F +pid > out.perf` and then open `out.perf` in Firefox's built-in profile viewer (which is super neat) https://profiler.firefox.com


That repo has no builds and no releases, kind of surprising? And needs another tool to consume perf data?

edit: And I can only build it using bazel, and I need bazel to build bazel? I think I'll stick with Perl...


I guess you didn't get very far in the README because near the top it tells you how to install it. It's a single command:

  go install github.com/google/pprof@latest


I got very far in the README, bazel is required for the other repo (perf_data_converter).


Not everybody wants to install Go just to get an application.


pprof doesn't do an amazing job of explaining how to use it with perf (which you'd need to use for a rust project like OP), so:

First install perf, graphviz, perf_data_converter and ofc pprof, then generate the data with `perf record [command]`, and display it with `pprof -http=: perf.data`.


I typically use gperftools for profiling instead of perf. You can LD_PRELOAD it.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: