From 7e2661cdadb365f0fba9557b0bb9bf137d214c69 Mon Sep 17 00:00:00 2001 From: Nothanks Onthelegiblenames Date: Thu, 1 Jan 2026 03:07:18 +0000 Subject: [PATCH 1/5] add smalloc -- a new memory manager -- for benchmarking --- bench.sh | 4 +++- build-bench-env.sh | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/bench.sh b/bench.sh index 65db72d..744505e 100755 --- a/bench.sh +++ b/bench.sh @@ -6,7 +6,7 @@ # Allocators and tests # -------------------------------------------------------------------- -readonly alloc_all="sys kp dh ff fg gd hd hm hml iso je lf lp lt mi mi-sec mi2 mi2-sec mi3 mi3-sec mng mesh nomesh pa rp sc scudo sg sm sn sn-sec tbb tc tcg mi-dbg mi2-dbg mi3-dbg xmi xsmi xmi-dbg yal rmalloc" +readonly alloc_all="sys kp dh ff fg gd hd hm hml iso je lf lp lt mi mi-sec mi2 mi2-sec mi3 mi3-sec mng mesh nomesh pa rp sc scudo sg sm sn sn-sec s tbb tc tcg mi-dbg mi2-dbg mi3-dbg xmi xsmi xmi-dbg yal rmalloc" readonly alloc_secure="dh ff gd hm hml iso mi-sec mi2-sec mi3-sec mng pa scudo sg sn-sec sg" alloc_run="" # allocators to run (expanded by command line options) alloc_installed="sys" # later expanded to include all installed allocators @@ -121,6 +121,7 @@ alloc_lib_add "scudo" "$localdevdir/scudo/compiler-rt/lib/scudo/standalone/libs alloc_lib_add "sg" "$localdevdir/sg/libSlimGuard.so" alloc_lib_add "sm" "$localdevdir/sm/release/lib/libsupermalloc$extso" alloc_lib_add "sn" "$localdevdir/sn/release/libsnmallocshim$extso" +alloc_lib_add "s" "$localdevdir/s/target/release/libsmalloc_ffi$extso" alloc_lib_add "sn-sec" "$localdevdir/sn/release/libsnmallocshim-checks$extso" alloc_lib_add "tbb" "$lib_tbb" alloc_lib_add "tc" "$localdevdir/tc/.libs/libtcmalloc_minimal$extso" @@ -424,6 +425,7 @@ while : ; do echo " sm use supermalloc" echo " sn use snmalloc" echo " sn-sec use secure version of snmalloc" + echo " s use smalloc" echo " sys use system malloc ($libc)" echo " tbb use Intel TBB malloc" echo " tc use tcmalloc (from gperftools)" diff --git a/build-bench-env.sh b/build-bench-env.sh index e8f82bb..ec72916 100755 --- a/build-bench-env.sh +++ b/build-bench-env.sh @@ -62,6 +62,7 @@ readonly version_scudo=main readonly version_sg=master # ~unmaintained since 2021 readonly version_sm=master # ~unmaintained since 2017 readonly version_sn=0.7.5 +readonly version_s=v7.4.7 readonly version_tbb=v2023.1.0 readonly version_tc=gperftools-2.18 readonly version_tcg=81f4e44f23f2936303f9404fee7315119b9df623 # 2026-02-23 @@ -107,6 +108,7 @@ setup_scudo=0 setup_sg=0 setup_sm=0 setup_sn=0 +setup_s=0 setup_tbb=0 setup_tc=0 setup_tcg=0 @@ -153,6 +155,7 @@ while : ; do setup_mi3=$flag_arg setup_pa=$flag_arg setup_sn=$flag_arg + setup_s=$flag_arg setup_sg=$flag_arg setup_tbb=$flag_arg setup_tc=$flag_arg @@ -249,6 +252,8 @@ while : ; do setup_sm=$flag_arg;; sn) setup_sn=$flag_arg;; + s) + setup_s=$flag_arg;; tbb) setup_tbb=$flag_arg;; tc) @@ -295,6 +300,7 @@ while : ; do echo " sg setup slimguard ($version_sg)" echo " sm setup supermalloc ($version_sm)" echo " sn setup snmalloc ($version_sn)" + echo " s setup smalloc ($version_s)" echo " tbb setup Intel TBB malloc ($version_tbb)" echo " tc setup tcmalloc ($version_tc)" echo " tcg setup Google's tcmalloc ($version_tcg)" @@ -710,6 +716,12 @@ if test "$setup_sn" = "1"; then popd fi +if test "$setup_s" = "1"; then + checkout s $version_s https://github.com/zooko/smalloc + cargo build --release --package smalloc-ffi + popd +fi + if test "$setup_sm" = "1"; then checkout sm $version_sm https://github.com/kuszmaul/SuperMalloc rm -rf ./doc ./paper "./short-talk" From 00303b18332c9a89d1cb8c2072a511d69df27352 Mon Sep 17 00:00:00 2001 From: Zsomething Date: Sat, 24 Jan 2026 22:49:19 -0700 Subject: [PATCH 2/5] bench smalloc v7.6.0 which works with Rust stable instead of requiring Rust nightly --- build-bench-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-bench-env.sh b/build-bench-env.sh index ec72916..4e27f9c 100755 --- a/build-bench-env.sh +++ b/build-bench-env.sh @@ -62,7 +62,7 @@ readonly version_scudo=main readonly version_sg=master # ~unmaintained since 2021 readonly version_sm=master # ~unmaintained since 2017 readonly version_sn=0.7.5 -readonly version_s=v7.4.7 +readonly version_s=v7.6.0 readonly version_tbb=v2023.1.0 readonly version_tc=gperftools-2.18 readonly version_tcg=81f4e44f23f2936303f9404fee7315119b9df623 # 2026-02-23 From 2d2306e53c8de57bd206bddf9e32861c4bdc0dce Mon Sep 17 00:00:00 2001 From: Matthew Parkinson Date: Sat, 7 Feb 2026 10:24:41 +0000 Subject: [PATCH 3/5] Add 's' to allocator list in platform.yml --- .github/workflows/platform.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/platform.yml b/.github/workflows/platform.yml index 2ebda71..43f16e4 100644 --- a/.github/workflows/platform.yml +++ b/.github/workflows/platform.yml @@ -37,7 +37,7 @@ jobs: needs: build-base-with-docker strategy: matrix: - allocator: [ff, fg, gd, hd, hm, iso, je, kp, lf, lp, lt, mesh, mng, mi, mi2, mi3, nomesh, pa, rp, scudo, sm, sn, sg, tbb, tc, yal, tcg] + allocator: [ff, fg, gd, hd, hm, iso, je, kp, lf, lp, lt, mesh, mng, mi, mi2, mi3, nomesh, pa, rp, scudo, s, sm, sn, sg, tbb, tc, yal, tcg] testsuite: [allt] # Used to provide a platform-specific predicate predicate: [true, false] From 6bde86a9a75e35cfcd5e37b9db1f133366655f8a Mon Sep 17 00:00:00 2001 From: Matthew Parkinson Date: Wed, 2 Sep 2026 16:38:11 +0100 Subject: [PATCH 4/5] Install Cargo for smalloc builds --- build-bench-env.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build-bench-env.sh b/build-bench-env.sh index 4e27f9c..85b76e0 100755 --- a/build-bench-env.sh +++ b/build-bench-env.sh @@ -465,14 +465,14 @@ if test "$setup_packages" = "1"; then if grep -q 'ID=fedora' /etc/os-release 2>/dev/null; then # no 'apt update' equivalent needed on Fedora dnfinstall "gcc-c++ clang lld llvm-devel unzip dos2unix bc gmp-devel wget gawk \ - cmake python3 ruby ninja-build libtool autoconf git patch time sed \ + cmake python3 ruby cargo ninja-build libtool autoconf git patch time sed \ ghostscript libatomic libstdc++ libstdc++-static which gflags-devel xz readline-devel snappy-devel" dnfinstallbazel elif grep -q -e 'ID=debian' -e 'ID=ubuntu' /etc/os-release 2>/dev/null; then echo "updating package database... ($SUDO apt update)" $SUDO apt update -qq aptinstall "build-essential git gpg g++ clang lld llvm-dev unzip dos2unix linuxinfo bc libgmp-dev wget \ - cmake python3 ruby ninja-build libtool autoconf sed ghostscript time \ + cmake python3 ruby cargo ninja-build libtool autoconf sed ghostscript time \ curl automake libatomic1 libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev \ liblz4-dev libzstd-dev libreadline-dev pkg-config gawk util-linux" aptinstallbazel @@ -480,14 +480,14 @@ if test "$setup_packages" = "1"; then echo "@testing http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories apk update apkinstall "clang lld unzip dos2unix bc gmp-dev wget cmake python3 automake gawk \ - samurai libtool git build-base linux-headers autoconf util-linux sed \ + samurai libtool git cargo build-base linux-headers autoconf util-linux sed \ ghostscript libatomic gflags-dev readline-dev snappy-dev" apkinstall "bazel@testing" elif brew --version 2> /dev/null >/dev/null; then brewinstall "dos2unix wget cmake ninja automake libtool gnu-time gmp mpir gnu-sed \ - ghostscript bazelisk gflags snappy" + ghostscript bazelisk gflags snappy rust" elif grep -q 'Arch Linux' /etc/os-release; then - sudo pacman -S dos2unix wget cmake ninja automake libtool time gmp sed ghostscript bazelisk gflags snappy + sudo pacman -S dos2unix wget cmake ninja automake libtool time gmp sed ghostscript bazelisk gflags snappy rust fi fi From 91d4dd0bb0e4e309632f3779c5962579ac1b234e Mon Sep 17 00:00:00 2001 From: Matthew Parkinson Date: Wed, 2 Sep 2026 17:08:43 +0100 Subject: [PATCH 5/5] Install a recent Rust toolchain for smalloc --- build-bench-env.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/build-bench-env.sh b/build-bench-env.sh index 85b76e0..9d0020c 100755 --- a/build-bench-env.sh +++ b/build-bench-env.sh @@ -77,6 +77,7 @@ readonly version_rocksdb=10.10.1 readonly version_lua=v5.4.7 readonly version_linux=6.5.1 readonly version_bazel=8.8.0 +readonly version_rust=1.87.0 # HTTP-downloaded files checksums readonly sha256sum_sh6bench="506354d66b9eebef105d757e055bc55e8d4aea1e7b51faab3da35b0466c923a1" @@ -472,9 +473,10 @@ if test "$setup_packages" = "1"; then echo "updating package database... ($SUDO apt update)" $SUDO apt update -qq aptinstall "build-essential git gpg g++ clang lld llvm-dev unzip dos2unix linuxinfo bc libgmp-dev wget \ - cmake python3 ruby cargo ninja-build libtool autoconf sed ghostscript time \ + cmake python3 ruby ninja-build libtool autoconf sed ghostscript time \ curl automake libatomic1 libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev \ liblz4-dev libzstd-dev libreadline-dev pkg-config gawk util-linux" + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain $version_rust aptinstallbazel elif grep -q -e 'ID=alpine' /etc/os-release 2>/dev/null; then echo "@testing http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories @@ -718,7 +720,11 @@ fi if test "$setup_s" = "1"; then checkout s $version_s https://github.com/zooko/smalloc - cargo build --release --package smalloc-ffi + cargo_cmd=cargo + if test -x "$HOME/.cargo/bin/cargo"; then + cargo_cmd="$HOME/.cargo/bin/cargo" + fi + "$cargo_cmd" build --release --package smalloc-ffi popd fi