mirror of
https://github.com/sigp/lighthouse.git
synced 2026-04-17 12:58:31 +00:00
Add maxperf build profile (#3608)
## Proposed Changes Add a new Cargo compilation profile called `maxperf` which enables more aggressive compiler optimisations at the expense of compilation time. Some rough initial benchmarks show that this can provide up to a 25% reduction to run time for CPU bound tasks like block processing: https://docs.google.com/spreadsheets/d/15jHuZe7lLHhZq9Nw8kc6EL0Qh_N_YAYqkW2NQ_Afmtk/edit The numbers in that spreadsheet compare the `consensus-context` branch from #3604 to the same branch compiled with the `maxperf` profile using: ``` PROFILE=maxperf make install-lcli ``` ## Additional Info The downsides of the maxperf profile are: - It increases compile times substantially, which will particularly impact low-spec hardware. Compiling `lcli` is about 3x slower. Compiling Lighthouse is about 5x slower on my 5950X: 17m 38s rather than 3m 28s. As a result I think we should not enable this everywhere by default. - **Option 1**: enable by default for our released binaries. This gives the majority of users the fastest version of `lighthouse` possible, at the expense of slowing down our release CI. Source builds will continue to use the default `release` profile unless users opt-in to `maxperf`. - **Option 2**: enable by default for source builds. This gives users building from source an edge, but makes them pay for it with compilation time. I think I would prefer Option 1. I'll try doing some benchmarking to see how long a maxperf build of Lighthouse would take on GitHub actions. Credit to Nicholas Nethercote for documenting these options in the Rust Performance Book: https://nnethercote.github.io/perf-book/build-configuration.html.
This commit is contained in:
@@ -120,7 +120,7 @@ You can customise the features that Lighthouse is built with using the `FEATURES
|
||||
variable. E.g.
|
||||
|
||||
```
|
||||
env FEATURES="gnosis,slasher-lmdb" make
|
||||
FEATURES=gnosis,slasher-lmdb make
|
||||
```
|
||||
|
||||
Commonly used features include:
|
||||
@@ -131,6 +131,25 @@ Commonly used features include:
|
||||
* `slasher-mdbx`: support for the MDBX slasher backend (enabled by default).
|
||||
* `slasher-lmdb`: support for the LMDB slasher backend.
|
||||
|
||||
## Compilation Profiles
|
||||
|
||||
You can customise the compiler settings used to compile Lighthouse via
|
||||
[Cargo profiles](https://doc.rust-lang.org/cargo/reference/profiles.html).
|
||||
|
||||
Lighthouse includes several profiles which can be selected via the `PROFILE` environment variable.
|
||||
|
||||
* `release`: default for source builds, enables most optimisations while not taking too long to
|
||||
compile.
|
||||
* `maxperf`: default for binary releases, enables aggressive optimisations including full LTO.
|
||||
Although compiling with this profile improves some benchmarks by around 20% compared to `release`,
|
||||
it imposes a _significant_ cost at compile time and is only recommended if you have a fast CPU.
|
||||
|
||||
To compile with `maxperf`:
|
||||
|
||||
```
|
||||
PROFILE=maxperf make
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Command is not found
|
||||
|
||||
Reference in New Issue
Block a user