-
Notifications
You must be signed in to change notification settings - Fork 129
Add the option to generate performance flamegraphs #4138
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add the option to generate performance flamegraphs #4138
Conversation
8f0ccd2 to
a3ec147
Compare
to keep debug info while using release mode compiler optimizations
a3ec147 to
4f60a13
Compare
There was a problem hiding this 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
328431e to
74a128d
Compare
There was a problem hiding this 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?)
0209e8e
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.
Adds the ability for
cargo kanito optionally output the info needed for generating flamegraphs of the compiler & driver's performance. When enabled with theFLAMEGRAPHenvironment 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.