From 1d2d1a47f6b1cc98b82d5dc8a0574b13593dbb60 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 19 Aug 2026 09:38:20 +0900 Subject: perf(shirabe): use mimalloc as the global allocator Profiling `create-project` showed glibc malloc/free accounting for about 41% of samples: the work is dominated by a very large number of small, short-lived allocations, mostly from decoding repository JSON into PhpMixed. `create-project laravel/laravel`, offline against a warmed cache, all three variants measured in one hyperfine run (8 runs each, identical composer.lock): glibc 3.633 s +- 0.023 (user 3.580 s, sys 2.255 s) mimalloc 3.096 s +- 0.054 (user 3.004 s, sys 2.315 s) -14.8% jemalloc 3.177 s +- 0.028 (user 3.136 s, sys 2.285 s) -12.5% The gain is entirely in user time; system time is unchanged, so the extraction and file-writing half of the run is unaffected. Peak RSS drops slightly, from 267 MB to 257 MB. mimalloc wins over jemalloc and, unlike jemalloc, needs no C build of its own at every profile. The allocator is declared in the library rather than in `main.rs` so that the test and benchmark binaries, which link this crate but not `main.rs`, run against the allocator the binary ships with. Co-Authored-By: Claude Opus 5 --- crates/shirabe/src/lib.rs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'crates/shirabe/src/lib.rs') diff --git a/crates/shirabe/src/lib.rs b/crates/shirabe/src/lib.rs index 9daf2188..3b142e74 100644 --- a/crates/shirabe/src/lib.rs +++ b/crates/shirabe/src/lib.rs @@ -25,6 +25,10 @@ pub mod self_update; pub mod signal; pub mod util; +// Declared here to use this allocator in all binaries including tests and benches. +#[global_allocator] +static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; + // InstalledVersions is intentionally unported to Rust. It is a runtime API for plugins and project // code, never read by Composer itself. Its real state is stored in PHP's InstalledVersions class. // See also `__shirabe_installed_versions_reload` in crates/shirabe-php-rpc/php/worker.php. -- cgit v1.3.1-4-g156e