From 140ce9faad4997533df8977d498d814e2a4a8367 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leosvel=20P=C3=A9rez=20Espinosa?= Date: Fri, 13 Feb 2026 16:27:39 +0100 Subject: [PATCH 1/2] feat(core): use jemalloc with tuned decay timers for native module --- .cargo/config.toml | 3 +++ Cargo.lock | 21 +++++++++++++++++++++ packages/nx/Cargo.toml | 5 +++++ packages/nx/src/lib.rs | 6 ++++++ 4 files changed, 35 insertions(+) diff --git a/.cargo/config.toml b/.cargo/config.toml index e70bce47ee47df..2e9a2981dd00f9 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,3 +1,6 @@ +[env] +JEMALLOC_SYS_WITH_MALLOC_CONF = "dirty_decay_ms:1000,muzzy_decay_ms:0" + [build] target-dir = 'dist/target' diff --git a/Cargo.lock b/Cargo.lock index f1a6e00e2c18c2..69bd5432345cb8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2214,6 +2214,7 @@ dependencies = [ "tempfile", "terminal-colorsaurus", "thiserror 1.0.69", + "tikv-jemallocator", "tokio", "tokio-util", "tracing", @@ -3832,6 +3833,26 @@ dependencies = [ "zune-jpeg", ] +[[package]] +name = "tikv-jemalloc-sys" +version = "0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd8aa5b2ab86a2cefa406d889139c162cbb230092f7d1d7cbc1716405d852a3b" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "tikv-jemallocator" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0359b4327f954e0567e69fb191cf1436617748813819c94b8cd4a431422d053a" +dependencies = [ + "libc", + "tikv-jemalloc-sys", +] + [[package]] name = "time" version = "0.3.44" diff --git a/packages/nx/Cargo.toml b/packages/nx/Cargo.toml index 518088d7da9d0c..a7360e68285b82 100644 --- a/packages/nx/Cargo.toml +++ b/packages/nx/Cargo.toml @@ -76,6 +76,11 @@ winapi = { version = "0.3", features = ["fileapi", "psapi"] } [target.'cfg(windows)'.build-dependencies] winres = "0.1" +# Windows excluded: tikv-jemalloc-sys fails to build with MSVC (spaces in cl.exe path break configure). +# Track https://github.com/tikv/jemallocator/pull/99 for upstream fix. +[target.'cfg(any(target_os = "linux", target_os = "macos"))'.dependencies] +tikv-jemallocator = { version = "0.6", features = ["disable_initial_exec_tls"] } + [target.'cfg(all(not(windows), not(target_family = "wasm")))'.dependencies] mio = "1.0" nix = { version = "0.30.0", features = ["process", "signal"] } diff --git a/packages/nx/src/lib.rs b/packages/nx/src/lib.rs index f513d125dd37ea..ab4ab71748bdc2 100644 --- a/packages/nx/src/lib.rs +++ b/packages/nx/src/lib.rs @@ -4,4 +4,10 @@ #[macro_use] extern crate napi_derive; +// Windows excluded: tikv-jemalloc-sys fails to build with MSVC. +// Track https://github.com/tikv/jemallocator/pull/99 +#[cfg(any(target_os = "linux", target_os = "macos"))] +#[global_allocator] +static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc; + pub mod native; From e66370e5ecd73eefa7d246ff09e896f6cabd009e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leosvel=20P=C3=A9rez=20Espinosa?= Date: Mon, 16 Feb 2026 10:38:32 +0100 Subject: [PATCH 2/2] chore(repo): add C build tools for jemalloc in Linux Docker builds --- .github/workflows/publish.yml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4efada7c9c4bc1..b65d6c218b1f31 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -174,7 +174,7 @@ jobs: bash -c " set -e echo 'https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories - apk add --no-cache curl xz openjdk21 + apk add --no-cache curl xz openjdk21 build-base lld # Set up Java 21 export JAVA_HOME=/usr/lib/jvm/java-21-openjdk @@ -194,6 +194,10 @@ jobs: npm i -g pnpm@${PNPM_VERSION} --force pnpm --version + # Help clang find GCC runtime (crtbeginS.o, libgcc) and use lld for jemalloc build + GCC_DIR=\$(dirname \$(find /usr/lib/gcc -name crtbeginS.o | head -1)) + export CFLAGS=\"\${CFLAGS} -fuse-ld=lld --gcc-install-dir=\${GCC_DIR}\" + # Install deps and run native build pnpm install --frozen-lockfile rustup target add x86_64-unknown-linux-musl @@ -230,6 +234,9 @@ jobs: node --version npm --version + # Help clang find GCC runtime (crtbeginS.o, libgcc) and use lld for jemalloc build + export CFLAGS="${CFLAGS} -fuse-ld=lld --gcc-toolchain=/usr/aarch64-unknown-linux-gnu" + npm i -g pnpm@${PNPM_VERSION} --force pnpm --version @@ -260,7 +267,7 @@ jobs: bash -c " set -e echo 'https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories - apk add --no-cache curl xz openjdk21 + apk add --no-cache curl xz openjdk21 build-base lld # Set up Java 21 export JAVA_HOME=/usr/lib/jvm/java-21-openjdk @@ -280,6 +287,10 @@ jobs: npm i -g pnpm@${PNPM_VERSION} --force pnpm --version + # Help clang find GCC runtime (crtbeginS.o, libgcc) and use lld for jemalloc build + GCC_DIR=\$(dirname \$(find /aarch64-linux-musl-cross/lib/gcc -name crtbeginS.o | head -1)) + export CFLAGS=\"\${CFLAGS} -fuse-ld=lld --gcc-install-dir=\${GCC_DIR}\" + # Install deps and run native build pnpm install --frozen-lockfile rustup target add aarch64-unknown-linux-musl