blob: dc7c17ac6e3621628387043ad151e5946cad6917 [file] [log] [blame] [edit]
//! `jemalloc`'s run-time configuration.
//!
//! These settings are controlled by the `MALLOC_CONF` environment variable.
option! {
abort[ str: b"opt.abort\0", non_str: 2 ] => bool |
ops: r |
docs:
/// Whether `jemalloc` calls `abort(3)` on most warnings.
///
/// This is disabled by default unless `--enable-debug` was specified during
/// build configuration.
///
/// # Examples
///
/// ```
/// # #[global_allocator]
/// # static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
/// #
/// # fn main() {
/// use tikv_jemalloc_ctl::opt;
/// let abort = opt::abort::mib().unwrap();
/// println!("abort on warning: {}", abort.read().unwrap());
/// # }
/// ```
mib_docs: /// See [`abort`].
}
option! {
dss[ str: b"opt.dss\0", str: 2 ] => &'static str |
ops: r |
docs:
/// The `dss` (`sbrk(2)`) allocation precedence as related to `mmap(2)`
/// allocation.
///
/// The following settings are supported if `sbrk(2)` is supported by the
/// operating system: "disabled", "primary", and "secondary"; otherwise only
/// "disabled" is supported. The default is "secondary" if `sbrk(2)` is
/// supported by the operating system; "disabled" otherwise.
///
/// # Examples
///
/// ```
/// # #[global_allocator]
/// # static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
/// #
/// # fn main() {
/// use tikv_jemalloc_ctl::opt;
/// let dss = opt::dss::read().unwrap();
/// println!("dss priority: {}", dss);
/// # }
/// ```
mib_docs: /// See [`dss`].
}
option! {
narenas[ str: b"opt.narenas\0", non_str: 2 ] => libc::c_uint |
ops: r |
docs:
/// Maximum number of arenas to use for automatic multiplexing of threads
/// and arenas.
///
/// The default is four times the number of CPUs, or one if there is a
/// single CPU.
///
/// # Examples
///
/// ```
/// # #[global_allocator]
/// # static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
/// #
/// # fn main() {
/// use tikv_jemalloc_ctl::opt;
/// let narenas = opt::narenas::read().unwrap();
/// println!("number of arenas: {}", narenas);
/// # }
/// ```
mib_docs: /// See [`narenas`].
}
option! {
junk[ str: b"opt.junk\0", str: 2 ] => &'static str |
ops: r |
docs:
/// `jemalloc`'s junk filling mode.
///
/// Requires `--enable-fill` to have been specified during build
/// configuration.
///
/// If set to "alloc", each byte of uninitialized allocated memory will be
/// set to `0x5a`. If set to "free", each byte of deallocated memory will be set
/// to `0x5a`. If set to "true", both allocated and deallocated memory will be
/// initialized, and if set to "false" junk filling will be disabled. This is
/// intended for debugging and will impact performance negatively.
///
/// The default is "false", unless `--enable-debug` was specified during
/// build configuration, in
/// which case the default is "true".
///
/// # Examples
///
/// ```
/// # #[global_allocator]
/// # static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
/// #
/// # fn main() {
/// use tikv_jemalloc_ctl::opt;
/// let junk = opt::junk::read().unwrap();
/// println!("junk filling: {}", junk);
/// # }
/// ```
mib_docs: /// See [`junk`].
}
option! {
zero[ str: b"opt.zero\0", non_str: 2 ] => bool |
ops: r |
docs:
/// `jemalloc`'s zeroing behavior.
///
/// Requires `--enable-fill` to have been specified during build
/// configuration.
///
/// If enabled, `jemalloc` will initialize each byte of uninitialized
/// allocated memory to 0. This is intended for debugging and will impact
/// performance negatively. It is disabled by default.
///
/// # Examples
///
/// ```
/// # #[global_allocator]
/// # static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
/// #
/// # fn main() {
/// use tikv_jemalloc_ctl::opt;
/// let zero = opt::zero::read().unwrap();
/// println!("zeroing: {}", zero);
/// # }
/// ```
mib_docs: /// See [`zero`].
}
option! {
tcache[ str: b"opt.tcache\0", non_str: 2 ] => bool |
ops: r |
docs:
/// Thread-local allocation caching behavior.
///
/// Thread-specific caching allows many allocations to be satisfied without
/// performing any thread synchronization, at the cost of increased memory
/// use. This is enabled by default.
///
/// # Examples
///
/// ```
/// # #[global_allocator]
/// # static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
/// #
/// # fn main() {
/// use tikv_jemalloc_ctl::opt;
/// let tcache = opt::tcache::read().unwrap();
/// println!("thread-local caching: {}", tcache);
/// # }
/// ```
mib_docs: /// See [`tcache`].
}
option! {
tcache_max[ str: b"opt.tcache_max\0", non_str: 2 ] => libc::size_t |
ops: r |
docs:
/// Maximum size class (log base 2) to cache in the thread-specific cache
/// (`tcache`).
///
/// At a minimum, all small size classes are cached, and at a maximum all
/// large size classes are cached. The default maximum is 32 KiB (2^15).
///
/// # Examples
///
/// ```
/// # #[global_allocator]
/// # static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
/// #
/// # fn main() {
/// use tikv_jemalloc_ctl::opt;
/// let tcache_max = opt::tcache_max::read().unwrap();
/// println!("max cached allocation size: {}", tcache_max);
/// # }
/// ```
mib_docs: /// See [`tcache_max`].
}
option! {
background_thread[ str: b"opt.background_thread\0", non_str: 2 ] => bool |
ops: r |
docs:
/// `jemalloc`'s default initialization behavior for background threads.
///
/// `jemalloc` automatically spawns background worker threads on
/// initialization (first `jemalloc` call) if this option is enabled. By
/// default this option is disabled - `malloc_conf=background_thread:true`
/// changes its default.
///
/// # Examples
///
/// ```
/// # #[global_allocator]
/// # static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
/// #
/// # fn main() {
/// use tikv_jemalloc_ctl::opt;
/// let background_thread = opt::background_thread::read().unwrap();
/// println!("background threads since initialization: {}", background_thread);
/// # }
/// ```
mib_docs: /// See [`background_thread`].
}