mirror of
https://gitlab.com/pulsechaincom/lighthouse-pulse.git
synced 2025-01-08 03:51:22 +00:00
4deab888c9
## Proposed Changes Another `tree-states` motivated PR, this adds `jemalloc` as the default allocator, with an option to use the system allocator by compiling with `FEATURES="" make`. - [x] Metrics - [x] Test on Windows - [x] Test on macOS - [x] Test with `musl` - [x] Metrics dashboard on `lighthouse-metrics` (https://github.com/sigp/lighthouse-metrics/pull/37) Co-authored-by: Michael Sproul <micsproul@gmail.com>
53 lines
2.4 KiB
Rust
53 lines
2.4 KiB
Rust
//! 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.
|
|
use jemalloc_ctl::{arenas, epoch, stats, Error};
|
|
use lazy_static::lazy_static;
|
|
use lighthouse_metrics::{set_gauge, try_create_int_gauge, IntGauge};
|
|
|
|
#[global_allocator]
|
|
static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc;
|
|
|
|
// Metrics for jemalloc.
|
|
lazy_static! {
|
|
pub static ref NUM_ARENAS: lighthouse_metrics::Result<IntGauge> =
|
|
try_create_int_gauge("jemalloc_num_arenas", "The number of arenas in use");
|
|
pub static ref BYTES_ALLOCATED: lighthouse_metrics::Result<IntGauge> =
|
|
try_create_int_gauge("jemalloc_bytes_allocated", "Equivalent to stats.allocated");
|
|
pub static ref BYTES_ACTIVE: lighthouse_metrics::Result<IntGauge> =
|
|
try_create_int_gauge("jemalloc_bytes_active", "Equivalent to stats.active");
|
|
pub static ref BYTES_MAPPED: lighthouse_metrics::Result<IntGauge> =
|
|
try_create_int_gauge("jemalloc_bytes_mapped", "Equivalent to stats.mapped");
|
|
pub static ref BYTES_METADATA: lighthouse_metrics::Result<IntGauge> =
|
|
try_create_int_gauge("jemalloc_bytes_metadata", "Equivalent to stats.metadata");
|
|
pub static ref BYTES_RESIDENT: lighthouse_metrics::Result<IntGauge> =
|
|
try_create_int_gauge("jemalloc_bytes_resident", "Equivalent to stats.resident");
|
|
pub static ref BYTES_RETAINED: lighthouse_metrics::Result<IntGauge> =
|
|
try_create_int_gauge("jemalloc_bytes_retained", "Equivalent to stats.retained");
|
|
}
|
|
|
|
pub fn scrape_jemalloc_metrics() {
|
|
scrape_jemalloc_metrics_fallible().unwrap()
|
|
}
|
|
|
|
pub fn scrape_jemalloc_metrics_fallible() -> Result<(), Error> {
|
|
// Advance the epoch so that the underlying statistics are updated.
|
|
epoch::advance()?;
|
|
|
|
set_gauge(&NUM_ARENAS, arenas::narenas::read()? as i64);
|
|
set_gauge(&BYTES_ALLOCATED, stats::allocated::read()? as i64);
|
|
set_gauge(&BYTES_ACTIVE, stats::active::read()? as i64);
|
|
set_gauge(&BYTES_MAPPED, stats::mapped::read()? as i64);
|
|
set_gauge(&BYTES_METADATA, stats::metadata::read()? as i64);
|
|
set_gauge(&BYTES_RESIDENT, stats::resident::read()? as i64);
|
|
set_gauge(&BYTES_RETAINED, stats::retained::read()? as i64);
|
|
|
|
Ok(())
|
|
}
|