Skip to content

Conversation

@AlexanderPortland
Copy link
Contributor

@AlexanderPortland AlexanderPortland commented Jun 5, 2025

Adds the ability for cargo kani to optionally output the info needed for generating flamegraphs of the compiler & driver's performance. When enabled with the FLAMEGRAPH environment variable, it will generate an output file for the driver and one for each crate in the workspace as they are compiled. These output files can then be rendered as flamegraphs to see where Kani is spending most of its execution time. See this draft docs page for more detailed instructions on how it would be used.

This should help us pinpoint which pieces of the compilation process are most to blame for our compilation times and focus future efforts to improve them.

Resolves #4075

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 and MIT licenses.

@AlexanderPortland AlexanderPortland changed the title Flamegraph Add the option to generate performance flamegraphs Jun 5, 2025
@carolynzech carolynzech self-assigned this Jun 5, 2025
@carolynzech carolynzech self-requested a review June 5, 2025 22:37
@AlexanderPortland AlexanderPortland marked this pull request as ready for review June 9, 2025 14:24
@AlexanderPortland AlexanderPortland requested a review from a team as a code owner June 9, 2025 14:24
to keep debug info while using release mode compiler optimizations
Copy link
Contributor

@carolynzech carolynzech left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome work! First round of comments.
As a general note, it'd be great if we could add a unique suffix to the outputted graphs so that new graphs don't overwrite old ones (perhaps the current time, example)

as instrumenting the compiler will give strange profiling results for the driver, so it is better to run them separately
Copy link
Contributor

@carolynzech carolynzech left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Once the Cargo.lock thing is fixed, I'll approve!
(also, I assume you've tested this again with the new date postfix thing--can you do some sanity check runs locally to make sure everything looks good with consecutive runs?)

@AlexanderPortland AlexanderPortland removed their assignment Jun 11, 2025
@carolynzech carolynzech enabled auto-merge June 12, 2025 15:07
@carolynzech carolynzech added this pull request to the merge queue Jun 12, 2025
Merged via the queue into model-checking:main with commit 0209e8e Jun 12, 2025
25 of 26 checks passed
@AlexanderPortland AlexanderPortland deleted the flamegraph branch June 12, 2025 20:44
github-merge-queue bot pushed a commit that referenced this pull request Jul 3, 2025
Auto generated release notes:

## What's Changed
* Edit quantifiers' documentation. by @thanhnguyen-aws in
#4142
* Fix the bug of using multiple hidden variables for the prev of the
same Expr by @thanhnguyen-aws in
#4150
* Remove `assess` subcommand by @carolynzech in
#4111
* Optimize goto binary exporting in `cprover_bindings` by
@AlexanderPortland in #4148
* Add the option to generate performance flamegraphs by
@AlexanderPortland in #4138
* Fix the bug: Static union values can panic Kani by @thanhnguyen-aws in
#4112
* Update toolchain to 2025-06-13 by @carolynzech in
#4152
* Automatic cargo update to 2025-06-16 by @github-actions in
#4156
* Major-version update cargo dependencies by @tautschnig in
#4158
* Upgrade Rust toolchain to 2025-06-16 by @tautschnig in
#4157
* Bump tests/perf/s2n-quic from `3129ad5` to `c6e694e` by @dependabot in
#4160
* Bump tests/perf/s2n-quic from `c6e694e` to `b1b5bf8` by @dependabot in
#4164
* Upgrade Rust toolchain to 2025-06-17 by @tautschnig in
#4163
* Automatic cargo update to 2025-06-23 by @github-actions in
#4172
* Stub panics during MIR transformation by @AlexanderPortland in
#4169
* Bump tests/perf/s2n-quic from `b1b5bf8` to `32ba87d` by @dependabot in
#4175
* Handle enums with zero or one variants by @zhassan-aws in
#4171
* Introduce compiler timing script & CI job by @AlexanderPortland in
#4154
* Upgrade Rust toolchain to 2025-06-18 by @tautschnig in
#4166
* Cache dependencies for CI jobs by @AlexanderPortland in
#4181
* Autoharness: Derive `Arbitrary` for structs and enums by @carolynzech
in #4167
* Upgrade Rust toolchain to 2025-06-27 by @tautschnig in
#4182
* Include wget in dependencies by @zhassan-aws in
#4183
* Automatic cargo update to 2025-06-30 by @github-actions in
#4186
* Add support for loop assigns in loop contracts by @thanhnguyen-aws in
#4174
* Upgrade toolchain to 06/30 by @carolynzech in
#4188
* Optimize reachability with non-mutating global passes by
@AlexanderPortland in #4177
* Bump tests/perf/s2n-quic from `32ba87d` to `b8f8cca` by @dependabot in
#4190
* Bump ncipollo/release-action from 1.16.0 to 1.18.0 by @dependabot in
#4191
* Upgrade toolchain to 07/02 by @carolynzech in
#4195
* Automatic Derivation Fixes by @carolynzech in
#4194


**Full Changelog**:
kani-0.63.0...kani-0.64.0

By submitting this pull request, I confirm that my contribution is made
under the terms of the Apache 2.0 and MIT licenses.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Z-EndToEndBenchCI Tag a PR to run benchmark CI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add a debug option to generate a flamegraph for compiler performance

3 participants