0
\$\begingroup\$

I'm making a simple SDL2-based Rust game, on an OSX laptop. Graphics mostly involves drawing lots of colored squares to the screen. Performance is really slow for what I'm doing, so I decided to profile with Flamegraph. The weird thing is, when I run with flamegraph, performance improves dramatically, going from ~20-50ms/frame to more like 5-10ms/frame. What could possibly be causing this (and how can I take advantage of it)?

Here's the command I use to run the program normally: sudo CARGO_PROFILE_RELEASE_DEBUG=true cargo run

Here's the command I use to run the program with flamegraph: sudo CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph

(Flamegraph requires some permissions to run, so I run them both with sudo for maximum comparability.)

\$\endgroup\$
2
  • \$\begingroup\$ Can you show us your compiler output? As I understand from consulting Rust-savvy colleagues, CARGO_PROFILE_RELEASE_DEBUG controls only whether to emit debug info for a release build, not whether to compile as debug vs release, so it's possible Flamegraph is changing your build output. Look for a line that says something like Finished foo [unoptimized + debuginfo] or Finished foo [optimized + debuginfo]. \$\endgroup\$ Commented Mar 18, 2023 at 21:21
  • \$\begingroup\$ C Snover nailed it in his reply, and this comment helped me confirm that was what was going on. Thanks, DMGregory! \$\endgroup\$ Commented Mar 18, 2023 at 21:56

1 Answer 1

1
\$\begingroup\$

Per the Flamegraph README, it runs using the release profile by default:

# defaults to profiling cargo run --release cargo flamegraph 

So you must also run using the release profile, by running cargo run --release, to see the same performance.

\$\endgroup\$
2
  • \$\begingroup\$ That was it! Flamegraph was definitely setting the --release flag, which I, a n00b, did not know about. Thank you! \$\endgroup\$ Commented Mar 18, 2023 at 21:55
  • \$\begingroup\$ If this solved your problem, @sclamons, remember to click the checkmark icon on the left to mark the answer as "Accepted". \$\endgroup\$ Commented Mar 18, 2023 at 23:18

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.