diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000000..dac0163003 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,4 @@ +[env] +# Set the number of arenas to 16 when using jemalloc. +JEMALLOC_SYS_WITH_MALLOC_CONF = "abort_conf:true,narenas:16" + diff --git a/common/malloc_utils/Cargo.toml b/common/malloc_utils/Cargo.toml index dd368c7959..ed7aeb44a8 100644 --- a/common/malloc_utils/Cargo.toml +++ b/common/malloc_utils/Cargo.toml @@ -11,8 +11,11 @@ lighthouse_metrics = { path = "../lighthouse_metrics" } lazy_static = "1.4.0" libc = "0.2.79" parking_lot = "0.11.0" -jemallocator = { version = "0.3.0", optional = true } +jemallocator = { version = "0.3.0", optional = true, features = ["background_threads"] } +jemalloc-sys = { version = "0.3.0", optional = true } [features] mallinfo2 = [] -jemalloc = ["jemallocator"] +jemalloc = ["jemallocator", "jemalloc-sys"] +jemalloc-stats = ["jemallocator/stats"] +jemalloc-profiling = ["jemallocator/profiling"] diff --git a/common/malloc_utils/src/jemalloc.rs b/common/malloc_utils/src/jemalloc.rs index d088253dcd..6abb336122 100644 --- a/common/malloc_utils/src/jemalloc.rs +++ b/common/malloc_utils/src/jemalloc.rs @@ -1,2 +1,12 @@ +//! Set the allocator to `jemalloc`. +//! +//! Due to `jemalloc` requiring configuration at compile time or immediately upon runtime +//! initialisation it is configured via a Cargo config file in `.cargo/config.toml`. +//! +//! The `jemalloc` tuning can be overriden by: +//! +//! A) `JEMALLOC_SYS_WITH_MALLOC_CONF` at compile-time. +//! B) `_RJEM_MALLOC_CONF` at runtime. + #[global_allocator] static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc; diff --git a/lighthouse/Cargo.toml b/lighthouse/Cargo.toml index b7be2a534c..f30c28f301 100644 --- a/lighthouse/Cargo.toml +++ b/lighthouse/Cargo.toml @@ -6,6 +6,7 @@ edition = "2021" autotests = false [features] +default = ["tree-states"] # Writes debugging .ssz files to /tmp during block processing. write_ssz_files = ["beacon_node/write_ssz_files"] # Compiles the BLS crypto code so that the binary is portable across machines. @@ -19,7 +20,7 @@ spec-minimal = [] # Support Gnosis spec and Gnosis Beacon Chain. gnosis = [] # Use `milhouse` tree states. -tree-states = ["beacon_node/tree-states"] +tree-states = ["beacon_node/tree-states", "malloc_utils/jemalloc"] [dependencies] beacon_node = { "path" = "../beacon_node" }