From ce1b68ca59f0024e3e3ea97c069a149d569c5076 Mon Sep 17 00:00:00 2001 From: Rayhaan Jaufeerally Date: Sat, 10 Oct 2026 12:06:39 +0200 Subject: [PATCH] bgp: jemalloc's background thread on Linux only The last change built jemalloc with its background thread on, so that freed pages go back to the kernel on time. jemalloc has that thread on Linux only: on macOS every start of the daemon, and every test that starts one, printed "option background_thread currently supports pthread only". The feature now comes from a Linux-only dependency entry of the daemon crate, so the macOS build asks for nothing jemalloc cannot do. The Linux build is as before: measured in the VM with four peers and a collector, resident memory falls after the load without any setting in the environment. Co-Authored-By: Claude Fable 5.1 --- Cargo.toml | 2 +- bin/bgp/Cargo.toml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index fea4275..682357a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -65,7 +65,7 @@ tokio-stream = { version = "0.1.19", features = ["sync"] } reqwest = { version = "0.13.5", default-features = false, features = ["json"] } # The daemon's memory allocator; see bin/bgp/src/main.rs. With its # statistics, which the status page and the metrics show. -tikv-jemallocator = { version = "0.7.0", features = ["stats", "background_threads"] } +tikv-jemallocator = { version = "0.7.0", features = ["stats"] } tikv-jemalloc-ctl = { version = "0.7.0", features = ["stats"] } # `cargo build --profile profiling`: the release build, with the line tables diff --git a/bin/bgp/Cargo.toml b/bin/bgp/Cargo.toml index c41fef0..42c0c24 100644 --- a/bin/bgp/Cargo.toml +++ b/bin/bgp/Cargo.toml @@ -23,6 +23,12 @@ tracing-subscriber.workspace = true [target.'cfg(not(target_env = "msvc"))'.dependencies] tikv-jemallocator.workspace = true +# jemalloc's background thread returns freed memory to the kernel on time +# (see the memory figures on the status page); jemalloc has it on Linux +# only, and warns at every start elsewhere if asked for it. +[target.'cfg(target_os = "linux")'.dependencies] +tikv-jemallocator = { workspace = true, features = ["background_threads"] } + [features] # jemalloc's heap profiler, for scripts/profile/full-table.sh with # HEAP=1: not for a production build, where it costs memory and time.