What’s new in Parca 0.16 and Parca Agent 0.13?

We have exciting updates in this release, including improved JIT symbolization, reliability and quality improvements, step querying, and more!

March 1, 2023
Continuous profiling
Parca Agent
Dwarf-Based Unwinding
Step querying
Icicle graphs

Profiling applications without frame pointers

Profiling applications without frame pointers is not trivial. Unfortunately, the lack of frame pointers is pervasive, resulting in broken profiles for many languages and runtimes. Some months ago, we published an in-depth post on our approach to make it possible to correctly profile Rust, C, C++ and many other runtimes with very little overhead.

Before this Parca Agent release, a feature flag was needed, but now we are enabling this new unwinder that uses DWARF unwind information by default!

Improved JIT symbolization

Maxime has been bringing very high quality contributions for a while. In this release, he's added full symbolization support for JITs that produce jitdump information. Many runtimes and languages emit this information, such as Elixir, Erlang, Nodejs, Wasmtime, etc, and we can now symbolize them, even in their JIT sections!

Reliability and quality improvements

We've been working hard to make the Agent more reliable and ensure that the profiles are correct. We'd like to highlight improvements in the metadata collection in child processes. We also spotted that under certain circumstances in hosts that have many CPUs we could produce slightly wrong samples. This has been addressed, among many other fixes.

Scaling the Metrics Graph

On the frontend side of things, we’ve been working on some improvements to how we visualize profiling data on the dashboard. Before, when querying on Parca, the dashboard received several thousand data points for a given query.

Imagine having 1000 pixels available, but >3000 points on the same line, there are not even enough pixels available for each discrete point on the line. We unnecessarily transferred data that we couldn't even visualize in a useful way.

So, to resolve this, we introduced step querying, which will help dictate the interval between points. Step querying allows the frontend to query data at a specific resolution, by using the timestamp and a step size to determine the amount of data to be processed at each step. The backend then aggregates and processes the data by summing the values over each step and returns that to the frontend.

The step feature ensures that we're optimally requesting the right resolution for the available space to visualize the data.

Here's a visual explainer of how step querying works:

Merge button is now obsolete

Because of the above and lots of other performance improvements over the last year, the Merge button which was used to combine all profile samples of a query is now obsolete as we are confident in the performance and UX of dealing with lots of data. This has been a result of months of work, fine tuning the backend, making it super fast, and capable of running these expensive queries by default. This is a major milestone in performance for the project.

Also, now when you query for a profile type, the dashboard displays the metrics graph, and also displays the Icicle graph below. In previous versions, querying ONLY displayed the metrics graph, you’d have needed to select a profile in the metrics graph to see the Icicle graph or any other type of visualization.

You can see this in action in the video below!

Color-coded Icicle Graphs

Another thing we introduced in this release is a feature that we think can be useful for understanding your Icicle Graphs; color-coded icicle graphs.

A screenshot of a color-coded Icicle Graph.A screenshot of a color-coded Icicle Graph.

With this feature, you can now choose a color palette for your icicle graphs and we automatically color code the icicle nodes according to their various binaries. In addition to this, a legend containing the various binaries in a profile is now displayed at the top of Icicle Graph.

By clicking on any of these legend items, you can then filter the graph to highlight nodes that belong to the binary you’ve selected.

How do I enable this?

This is already available in the latest version of Parca and you only need to open the User Preferences dialog by clicking on the Settings icon located at the top right of the Parca dashboard.

A screenshot of the User Preferences dialog.A screenshot of the User Preferences dialog.

There are currently five color palette options to choose from, but only the Subtle, Ocean, Warm, and Rainbow color palettes enables you to have color coded Icicle graphs.

What should we work on next?

What do you think we should work on next? Send us a Tweet, write to us on Mastodon, or join the Parca Discord server to let us know!

Sign up for the latest Polar Signals news