mirror of
https://gitlab.com/pulsechaincom/lighthouse-pulse.git
synced 2024-12-24 20:47:17 +00:00
f77e3bc0ad
## 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.
109 lines
2.8 KiB
TOML
109 lines
2.8 KiB
TOML
[workspace]
|
|
members = [
|
|
"account_manager",
|
|
|
|
"beacon_node",
|
|
"beacon_node/beacon_chain",
|
|
"beacon_node/builder_client",
|
|
"beacon_node/client",
|
|
"beacon_node/eth1",
|
|
"beacon_node/lighthouse_network",
|
|
"beacon_node/execution_layer",
|
|
"beacon_node/http_api",
|
|
"beacon_node/http_metrics",
|
|
"beacon_node/network",
|
|
"beacon_node/store",
|
|
"beacon_node/timer",
|
|
|
|
"boot_node",
|
|
|
|
"common/account_utils",
|
|
"common/clap_utils",
|
|
"common/compare_fields",
|
|
"common/compare_fields_derive",
|
|
"common/deposit_contract",
|
|
"common/directory",
|
|
"common/eth2",
|
|
"common/eth2_config",
|
|
"common/eth2_interop_keypairs",
|
|
"common/eth2_network_config",
|
|
"common/eth2_wallet_manager",
|
|
"common/lighthouse_metrics",
|
|
"common/lighthouse_version",
|
|
"common/lockfile",
|
|
"common/logging",
|
|
"common/lru_cache",
|
|
"common/malloc_utils",
|
|
"common/oneshot_broadcast",
|
|
"common/sensitive_url",
|
|
"common/slot_clock",
|
|
"common/task_executor",
|
|
"common/target_check",
|
|
"common/test_random_derive",
|
|
"common/unused_port",
|
|
"common/validator_dir",
|
|
"common/warp_utils",
|
|
"common/fallback",
|
|
"common/monitoring_api",
|
|
|
|
"database_manager",
|
|
|
|
"consensus/cached_tree_hash",
|
|
"consensus/int_to_bytes",
|
|
"consensus/fork_choice",
|
|
"consensus/proto_array",
|
|
"consensus/safe_arith",
|
|
"consensus/ssz",
|
|
"consensus/ssz_derive",
|
|
"consensus/ssz_types",
|
|
"consensus/serde_utils",
|
|
"consensus/state_processing",
|
|
"consensus/swap_or_not_shuffle",
|
|
"consensus/tree_hash",
|
|
"consensus/tree_hash_derive",
|
|
|
|
"crypto/bls",
|
|
"crypto/eth2_hashing",
|
|
"crypto/eth2_key_derivation",
|
|
"crypto/eth2_keystore",
|
|
"crypto/eth2_wallet",
|
|
|
|
"lcli",
|
|
|
|
"lighthouse",
|
|
"lighthouse/environment",
|
|
|
|
"slasher",
|
|
"slasher/service",
|
|
|
|
"testing/ef_tests",
|
|
"testing/eth1_test_rig",
|
|
"testing/execution_engine_integration",
|
|
"testing/node_test_rig",
|
|
"testing/simulator",
|
|
"testing/test-test_logger",
|
|
"testing/state_transition_vectors",
|
|
"testing/web3signer_tests",
|
|
|
|
"validator_client",
|
|
"validator_client/slashing_protection",
|
|
]
|
|
|
|
[patch]
|
|
[patch.crates-io]
|
|
fixed-hash = { git = "https://github.com/paritytech/parity-common", rev="df638ab0885293d21d656dc300d39236b69ce57d" }
|
|
warp = { git = "https://github.com/macladson/warp", rev="7e75acc368229a46a236a8c991bf251fe7fe50ef" }
|
|
eth2_ssz = { path = "consensus/ssz" }
|
|
eth2_ssz_derive = { path = "consensus/ssz_derive" }
|
|
eth2_ssz_types = { path = "consensus/ssz_types" }
|
|
eth2_hashing = { path = "crypto/eth2_hashing" }
|
|
tree_hash = { path = "consensus/tree_hash" }
|
|
tree_hash_derive = { path = "consensus/tree_hash_derive" }
|
|
eth2_serde_utils = { path = "consensus/serde_utils" }
|
|
|
|
[profile.maxperf]
|
|
inherits = "release"
|
|
lto = "fat"
|
|
codegen-units = 1
|
|
incremental = false
|