-
Notifications
You must be signed in to change notification settings - Fork 2
Enable Link-Time Optimization (LTO) and codegen-units = 1 for Release builds #38
Description
Hi!
I noticed that in the Cargo.toml file Link-Time Optimization (LTO) for the project is not enabled. I suggest switching it on since it will reduce the binary size (always a good thing to have) and will likely improve the application's CPU performance a bit due to more aggressive compiler optimizations. If you want to read more about LTO and its possible modes, I recommend starting from this Rustc documentation. Additionally, codegen-units = 1 (CU1) option can help too in a similar to LTO way, so I recommend to enable it as well. As you already done for paddler :)
I recommend enabling LTO only for Release builds so developers experience won't be affected by the increased build time. Actually, I can propose to use flags directly from this ripgrep profile.
Basically, it can be enabled with the following lines to the root Cargo.toml file:
[profile.release]
codegen-units = 1
lto = true # FatLTO - the most aggressive LTO version
<possible other options like strip = true>
I have made quick tests (AMD Ryzen 9 5900x, Fedora 43, Rust 1.94, the latest version of the project at the moment, cargo build --release command, without stripping) - here are the results:
- Current Release profile: 27 Mib Mib, clean build time: 52s
- Release profile + FatLTO + CU1: 19 Mib, clean build time: 1m 53s
Build time increase shouldn't be a problem since we enable it only for the Release profile. Even if for now poet hasn't a GitHub release yet, seems like you are planning to do it in the future. So binaries will be more optimized from the day one.
Thank you.