Skip to content

Evaluate mimalloc v3#416

Closed
01mf02 wants to merge 1 commit intomainfrom
mimalloc-v3
Closed

Evaluate mimalloc v3#416
01mf02 wants to merge 1 commit intomainfrom
mimalloc-v3

Conversation

@01mf02
Copy link
Copy Markdown
Owner

@01mf02 01mf02 commented Mar 26, 2026

I read about mimalloc v3 and evaluated it in jaq, compared to its default mimalloc v2.
TL;DR: v3 is slower in most cases, so not worth to change from v2.

Results:

Benchmark n v2 v3
empty 512 400 420
bf-fib 13 530 530
defs 100000 50 40
upto 8192 0 0
reduce-update 16384 0 0
reverse 1048576 30 30
sort 1048576 80 90
group-by 1048576 260 330
min-max 1048576 180 180
add 1048576 390 400
kv 131072 100 110
kv-update 131072 130 130
kv-entries 131072 520 560
ex-implode 1048576 590 650
reduce 1048576 770 790
try-catch 1048576 230 230
repeat 1048576 180 200
from 1048576 340 370
last 1048576 20 20
pyramid 524288 300 310
tree-contains 23 100 90
tree-flatten 17 710 730
tree-update 17 430 430
tree-paths 17 140 140
to-fromjson 65536 60 60
ack 7 580 610
range-prop 128 380 390
cumsum 1048576 240 250
cumsum-xy 1048576 380 400
str-slice 8192 170 170

Detailed results:

$ ./bench.sh target/release/jaq-mimalloc-v{2,3}
{"name": "empty", "n": 512, "time": {"target/release/jaq-mimalloc-v2": [0.40], "target/release/jaq-mimalloc-v3": [0.42]}}
{"name": "bf-fib", "n": 13, "time": {"target/release/jaq-mimalloc-v2": [0.53], "target/release/jaq-mimalloc-v3": [0.53]}}
{"name": "defs", "n": 100000, "time": {"target/release/jaq-mimalloc-v2": [0.05], "target/release/jaq-mimalloc-v3": [0.04]}}
{"name": "upto", "n": 8192, "time": {"target/release/jaq-mimalloc-v2": [0.00, 0.00, 0.00], "target/release/jaq-mimalloc-v3": [0.00, 0.00, 0.00]}}
{"name": "reduce-update", "n": 16384, "time": {"target/release/jaq-mimalloc-v2": [0.00, 0.00, 0.01], "target/release/jaq-mimalloc-v3": [0.00, 0.00, 0.00]}}
{"name": "reverse", "n": 1048576, "time": {"target/release/jaq-mimalloc-v2": [0.03, 0.03, 0.04], "target/release/jaq-mimalloc-v3": [0.03, 0.03, 0.03]}}
{"name": "sort", "n": 1048576, "time": {"target/release/jaq-mimalloc-v2": [0.10, 0.09, 0.08], "target/release/jaq-mimalloc-v3": [0.09, 0.09, 0.10]}}
{"name": "group-by", "n": 1048576, "time": {"target/release/jaq-mimalloc-v2": [0.28, 0.28, 0.26], "target/release/jaq-mimalloc-v3": [0.33, 0.33, 0.34]}}
{"name": "min-max", "n": 1048576, "time": {"target/release/jaq-mimalloc-v2": [0.18, 0.18, 0.18], "target/release/jaq-mimalloc-v3": [0.18, 0.18, 0.18]}}
{"name": "add", "n": 1048576, "time": {"target/release/jaq-mimalloc-v2": [0.40, 0.40, 0.39], "target/release/jaq-mimalloc-v3": [0.41, 0.40, 0.41]}}
{"name": "kv", "n": 131072, "time": {"target/release/jaq-mimalloc-v2": [0.11, 0.11, 0.10], "target/release/jaq-mimalloc-v3": [0.11, 0.11, 0.11]}}
{"name": "kv-update", "n": 131072, "time": {"target/release/jaq-mimalloc-v2": [0.13, 0.13, 0.13], "target/release/jaq-mimalloc-v3": [0.13, 0.13, 0.13]}}
{"name": "kv-entries", "n": 131072, "time": {"target/release/jaq-mimalloc-v2": [0.52, 0.52, 0.52], "target/release/jaq-mimalloc-v3": [0.56, 0.56, 0.58]}}
{"name": "ex-implode", "n": 1048576, "time": {"target/release/jaq-mimalloc-v2": [0.60, 0.59, 0.60], "target/release/jaq-mimalloc-v3": [0.68, 0.65, 0.68]}}
{"name": "reduce", "n": 1048576, "time": {"target/release/jaq-mimalloc-v2": [0.77, 0.78, 0.78], "target/release/jaq-mimalloc-v3": [0.79, 0.79, 0.79]}}
{"name": "try-catch", "n": 1048576, "time": {"target/release/jaq-mimalloc-v2": [0.23, 0.23, 0.23], "target/release/jaq-mimalloc-v3": [0.23, 0.23, 0.23]}}
{"name": "repeat", "n": 1048576, "time": {"target/release/jaq-mimalloc-v2": [0.19, 0.18, 0.19], "target/release/jaq-mimalloc-v3": [0.20, 0.21, 0.20]}}
{"name": "from", "n": 1048576, "time": {"target/release/jaq-mimalloc-v2": [0.34, 0.34, 0.34], "target/release/jaq-mimalloc-v3": [0.38, 0.37, 0.38]}}
{"name": "last", "n": 1048576, "time": {"target/release/jaq-mimalloc-v2": [0.02, 0.02, 0.02], "target/release/jaq-mimalloc-v3": [0.02, 0.02, 0.02]}}
{"name": "pyramid", "n": 524288, "time": {"target/release/jaq-mimalloc-v2": [0.30, 0.30, 0.30], "target/release/jaq-mimalloc-v3": [0.31, 0.31, 0.32]}}
{"name": "tree-contains", "n": 23, "time": {"target/release/jaq-mimalloc-v2": [0.10, 0.10, 0.10], "target/release/jaq-mimalloc-v3": [0.10, 0.09, 0.10]}}
{"name": "tree-flatten", "n": 17, "time": {"target/release/jaq-mimalloc-v2": [0.73, 0.71, 0.72], "target/release/jaq-mimalloc-v3": [0.75, 0.73, 0.74]}}
{"name": "tree-update", "n": 17, "time": {"target/release/jaq-mimalloc-v2": [0.43, 0.43, 0.43], "target/release/jaq-mimalloc-v3": [0.44, 0.43, 0.43]}}
{"name": "tree-paths", "n": 17, "time": {"target/release/jaq-mimalloc-v2": [0.14, 0.14, 0.14], "target/release/jaq-mimalloc-v3": [0.15, 0.14, 0.15]}}
{"name": "to-fromjson", "n": 65536, "time": {"target/release/jaq-mimalloc-v2": [0.06, 0.06, 0.06], "target/release/jaq-mimalloc-v3": [0.06, 0.06, 0.06]}}
{"name": "ack", "n": 7, "time": {"target/release/jaq-mimalloc-v2": [0.59, 0.58, 0.58], "target/release/jaq-mimalloc-v3": [0.63, 0.63, 0.61]}}
{"name": "range-prop", "n": 128, "time": {"target/release/jaq-mimalloc-v2": [0.38, 0.38, 0.38], "target/release/jaq-mimalloc-v3": [0.39, 0.39, 0.39]}}
{"name": "cumsum", "n": 1048576, "time": {"target/release/jaq-mimalloc-v2": [0.24, 0.24, 0.24], "target/release/jaq-mimalloc-v3": [0.25, 0.25, 0.25]}}
{"name": "cumsum-xy", "n": 1048576, "time": {"target/release/jaq-mimalloc-v2": [0.38, 0.40, 0.39], "target/release/jaq-mimalloc-v3": [0.41, 0.40, 0.42]}}
{"name": "str-slice", "n": 8192, "time": {"target/release/jaq-mimalloc-v2": [0.17, 0.17, 0.17], "target/release/jaq-mimalloc-v3": [0.17, 0.17, 0.17]}}

@01mf02 01mf02 closed this Mar 26, 2026
@01mf02 01mf02 deleted the mimalloc-v3 branch March 26, 2026 16:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant