mimalloc is a compact general purpose allocator from Microsoft. It consistently outperforms glibc's `malloc()` in allocation-heavy workloads, such as Lix's evaluator It's currently only linked in the main `nix` executable, as Boehm's GC uses its own allocator. Other allocations that *do* go through glibc's `malloc()` are still much faster, though Benchmarked on x86_64-linux against Nixpkgs `bd07873`: | attribute | thunks | lix@`1396012` | mimalloc | uplift | |-------------------|---------|---------------|----------|--------| | hello | 206444 | 0.726s | 0.620s | 1.17x | | chromium | 1177382 | 2.273s | 2.136s | 1.06x | | firefox-unwrapped | 1394797 | 2.521s | 2.378s | 1.06x | | texliveFull | 3186440 | 4.992s | 4.672s | 1.07x | | nixosTests.gnome | 7905808 | 6.115s | 5.723s | 1.07x | Based-on: https://github.com/NixOS/nix/pull/15596 Co-authored-by: Bernardo Meurer Costa <beme@anthropic.com> Change-Id: I3ad92eacc075efeaf3d9f7730ada7b29835536a4
564 B
564 B
synopsis, cls, category, credits
| synopsis | cls | category | credits | |||
|---|---|---|---|---|---|---|
| Use mimalloc for faster evaluation |
|
Features |
|
Lix now links with mimalloc,
replacing the system's default malloc() for all non-GC allocations.
This yields a 5–12% wall-clock improvement on evaluation workloads,
ranging from nix-instantiate hello to nix-env -qa and full NixOS
configurations.
The allocator can be disabled at build time with -Dmimalloc=disabled,
or by passing the useMimalloc = false override to the lix package.