Ruby VS Wasm benchmarks

Current benchmark data was generated on Sun Jan 29 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz (Model 106)

* -m in a file name stands for multi-threading or multi-processing

* -i in a file name stands for direct intrinsics usage. (Usage of simd intrinsics via libraries is not counted)

* -ffi in a file name stands for non-stdlib FFI usage

* (You may find time < time(user) + time(sys) for some non-parallelized programs, the overhead is from GC or JIT compiler, which are allowed to take advantage of multi-cores as that's more close to real-world scenarios.)

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 2041ms 2.7ms 47.7MB 2013ms 10ms wasmedgec 0.11.2
wasm 5.rs 2088ms 3.3ms 31.6MB 2067ms 3ms wasmedgec 0.11.2
wasm 4.rs 2279ms 3.3ms 31.6MB 2260ms 3ms wasmedgec 0.11.2
wasm 3.rs 2493ms 19ms 42.7MB 2467ms 3ms wasmtime 5.0.0
wasm 5.rs 2790ms 2.3ms 26.9MB 2770ms 3ms wasmtime 5.0.0
wasm 4.rs 2809ms 12ms 58.6MB 2803ms 10ms node 16.19.0
wasm 3.rs 2813ms 33ms 74.6MB 2807ms 20ms node 16.19.0
wasm 5.rs 2831ms 24ms 59.5MB 2823ms 7ms node 16.19.0
wasm 4.rs 3099ms 11ms 26.9MB 3083ms 0ms wasmtime 5.0.0
ruby 1.rb timeout 0.0ms 72.6MB 4967ms 17ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 115.6MB 4940ms 40ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 757.2MB 7747ms 373ms truffleruby 22.3.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 194ms 0.5ms 18.7MB 187ms 0ms wasmedgec 0.11.2
wasm 5.rs 201ms 0.3ms 16.7MB 190ms 0ms wasmedgec 0.11.2
wasm 4.rs 222ms 4.3ms 19.0MB 203ms 0ms wasmedgec 0.11.2
wasm 3.rs 237ms 5.1ms 14.8MB 223ms 0ms wasmtime 5.0.0
wasm 5.rs 269ms 4.3ms 12.9MB 253ms 0ms wasmtime 5.0.0
wasm 4.rs 297ms 7.1ms 12.9MB 283ms 0ms wasmtime 5.0.0
wasm 3.rs 331ms 4.4ms 46.5MB 327ms 10ms node 16.19.0
wasm 4.rs 333ms 4.6ms 44.3MB 333ms 7ms node 16.19.0
wasm 5.rs 338ms 4.3ms 43.9MB 343ms 3ms node 16.19.0
ruby 1.rb 535ms 0.7ms 40.7MB 513ms 7ms ruby/yjit 3.2.0
ruby 1-m.rb 965ms 36ms 426.1MB 1560ms 130ms truffleruby 22.3.1
ruby 1.rb 983ms 12ms 40.3MB 947ms 17ms ruby 3.2.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 1470ms 16ms 50.3MB 1510ms 7ms node 16.19.0
wasm 3.rs 1566ms 4.2ms 12.9MB 1550ms 0ms wasmtime 5.0.0
wasm 3.rs 1935ms 4.4ms 17.9MB 1920ms 0ms wasmedgec 0.11.2
ruby 1.rb 3078ms 7.8ms 82.8MB 2993ms 70ms ruby/yjit 3.2.0
ruby 1.rb 3445ms 2.1ms 82.2MB 3363ms 60ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 1060.0MB 4270ms 1283ms truffleruby 22.3.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 107ms 0.3ms 11.6MB 93ms 0ms wasmtime 5.0.0
wasm 3.rs 133ms 0.3ms 15.9MB 123ms 0ms wasmedgec 0.11.2
wasm 3.rs 209ms 3.6ms 48.8MB 247ms 7ms node 16.19.0
ruby 1.rb 219ms 4.0ms 44.8MB 187ms 17ms ruby/yjit 3.2.0
ruby 1.rb 232ms 1.7ms 44.5MB 197ms 17ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 1052.7MB 4280ms 1217ms truffleruby 22.3.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 356ms 0.9ms 15.6MB 343ms 0ms wasmedgec 0.11.2
wasm 1.rs 409ms 1.4ms 11.2MB 400ms 0ms wasmtime 5.0.0
wasm 1.rs 440ms 2.0ms 43.5MB 453ms 3ms node 16.19.0
ruby 6.rb 2344ms 2.0ms 43.6MB 2310ms 17ms ruby/yjit 3.2.0
ruby 6-m.rb 2496ms 56ms 375.1MB 4513ms 257ms truffleruby 22.3.1
ruby 6.rb 4310ms 33ms 43.1MB 4283ms 17ms ruby 3.2.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 45ms 3.0ms 15.5MB 30ms 0ms wasmedgec 0.11.2
wasm 1.rs 47ms 1.1ms 9.2MB 30ms 0ms wasmtime 5.0.0
wasm 1.rs 121ms 0.9ms 43.2MB 137ms 3ms node 16.19.0
ruby 6.rb 305ms 1.2ms 34.8MB 280ms 10ms ruby/yjit 3.2.0
ruby 6.rb 497ms 2.8ms 34.4MB 477ms 3ms ruby 3.2.0
ruby 6-m.rb 801ms 16ms 318.7MB 1377ms 97ms truffleruby 22.3.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 5.7ms 0.4ms 15.5MB 0ms 0ms wasmedgec 0.11.2
wasm 1.rs 5.8ms 1.1ms 9.1MB 0ms 0ms wasmtime 5.0.0
ruby 1.rb 41ms 2.6ms 156.3MB 16ms 26ms truffleruby 22.3.1
ruby 1.rb 72ms 0.3ms 32.5MB 46ms 14ms ruby/yjit 3.2.0
ruby 1.rb 72ms 0.5ms 32.1MB 48ms 12ms ruby 3.2.0
wasm 1.rs 79ms 1.9ms 43.5MB 96ms 2ms node 16.19.0

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 434ms 0.6ms 50.4MB 403ms 17ms ruby/yjit 3.2.0
ruby 1.rb 436ms 4.9ms 51.8MB 400ms 23ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 454.6MB 9203ms 197ms truffleruby 22.3.1

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 3971ms 7.2ms 173.2MB 3883ms 70ms ruby 3.2.0
ruby 1.rb 3992ms 35ms 175.0MB 3903ms 67ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 435.5MB 9273ms 180ms truffleruby 22.3.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 158ms 0.6ms 15.0MB 150ms 0ms wasmedgec 0.11.2
wasm 1.rs 206ms 1.8ms 11.1MB 197ms 0ms wasmtime 5.0.0
wasm 1.rs 273ms 3.1ms 44.5MB 280ms 7ms node 16.19.0
ruby 1.rb 445ms 3.9ms 33.0MB 423ms 7ms ruby/yjit 3.2.0
ruby 1.rb 602ms 5.2ms 32.4MB 573ms 13ms ruby 3.2.0
ruby 1-m.rb 753ms 19ms 323.9MB 1107ms 97ms truffleruby 22.3.1

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 459ms 1.5ms 15.1MB 443ms 0ms wasmedgec 0.11.2
wasm 1.rs 601ms 1.6ms 11.1MB 587ms 0ms wasmtime 5.0.0
wasm 1.rs 644ms 1.9ms 44.4MB 657ms 3ms node 16.19.0
ruby 1.rb 1174ms 2.2ms 32.9MB 1153ms 10ms ruby/yjit 3.2.0
ruby 1.rb 1398ms 49ms 364.8MB 1797ms 137ms truffleruby 22.3.1
ruby 1.rb 1668ms 32ms 32.4MB 1640ms 13ms ruby 3.2.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 82ms 0.3ms 16.0MB 70ms 0ms wasmedgec 0.11.2
wasm 1.rs 103ms 0.2ms 9.3MB 90ms 0ms wasmtime 5.0.0
wasm 1.rs 176ms 4.4ms 44.3MB 193ms 0ms node 16.19.0
ruby 1.rb 258ms 2.3ms 32.9MB 233ms 10ms ruby/yjit 3.2.0
ruby 1.rb 335ms 5.5ms 32.3MB 310ms 7ms ruby 3.2.0
ruby 1-m.rb 565ms 51ms 309.0MB 860ms 87ms truffleruby 22.3.1

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 1181ms 2.7ms 39.2MB 1160ms 3ms wasmedgec 0.11.2
wasm 1.rs 1409ms 21ms 34.8MB 1390ms 3ms wasmtime 5.0.0
wasm 1.rs 1428ms 21ms 67.4MB 1427ms 10ms node 16.19.0
ruby 1.rb timeout 0.0ms 96.5MB 4937ms 43ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 97.0MB 4937ms 50ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 570.5MB 9237ms 210ms truffleruby 22.3.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 255ms 0.5ms 21.6MB 240ms 0ms wasmedgec 0.11.2
wasm 1.rs 300ms 0.6ms 17.1MB 283ms 0ms wasmtime 5.0.0
wasm 1.rs 360ms 1.7ms 49.3MB 370ms 3ms node 16.19.0
ruby 1-m.rb 3223ms 39ms 596.5MB 5953ms 190ms truffleruby 22.3.1
ruby 1.rb 4080ms 11ms 53.7MB 4047ms 17ms ruby/yjit 3.2.0
ruby 1.rb 4848ms 44ms 52.7MB 4810ms 23ms ruby 3.2.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 488ms 0.6ms 10.9MB 477ms 0ms wasmtime 5.0.0
wasm 1.rs 500ms 1.0ms 16.0MB 483ms 0ms wasmedgec 0.11.2
wasm 1.rs 565ms 1.9ms 48.0MB 587ms 3ms node 16.19.0
wasm 2.rs 665ms 0.1ms 9.4MB 653ms 0ms wasmtime 5.0.0
wasm 2.rs 691ms 0.6ms 15.0MB 677ms 3ms wasmedgec 0.11.2
wasm 2.rs 743ms 1.7ms 48.8MB 760ms 10ms node 16.19.0
ruby 2.rb 1013ms 1.8ms 306.6MB 1220ms 67ms truffleruby 22.3.1
ruby 2.rb timeout 0.0ms 32.2MB 4973ms 10ms ruby 3.2.0
ruby 2.rb timeout 0.0ms 33.0MB 4967ms 17ms ruby/yjit 3.2.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 56ms 0.7ms 11.4MB 43ms 0ms wasmtime 5.0.0
wasm 1.rs 58ms 1.7ms 15.4MB 43ms 0ms wasmedgec 0.11.2
wasm 2.rs 74ms 0.8ms 11.2MB 60ms 0ms wasmtime 5.0.0
wasm 2.rs 76ms 0.5ms 15.3MB 60ms 0ms wasmedgec 0.11.2
wasm 1.rs 144ms 2.2ms 47.7MB 167ms 0ms node 16.19.0
wasm 2.rs 166ms 2.9ms 48.8MB 180ms 10ms node 16.19.0
ruby 2-m.rb 380ms 2.8ms 305.0MB 580ms 73ms truffleruby 22.3.1
ruby 2.rb 2169ms 0.8ms 33.0MB 2140ms 10ms ruby/yjit 3.2.0
ruby 2.rb 3369ms 22ms 32.2MB 3340ms 13ms ruby 3.2.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 554ms 0.4ms 21.4MB 537ms 3ms wasmedgec 0.11.2
wasm 1.rs 665ms 11ms 53.7MB 647ms 7ms wasmedgec 0.11.2
wasm 2.rs 720ms 5.8ms 48.9MB 727ms 7ms node 16.19.0
wasm 2.rs 729ms 7.3ms 15.9MB 710ms 0ms wasmtime 5.0.0
wasm 1.rs 765ms 32ms 82.8MB 767ms 10ms node 16.19.0
wasm 1.rs 1020ms 12ms 50.0MB 1003ms 7ms wasmtime 5.0.0
ruby 1.rb timeout 0.0ms 344.6MB 4850ms 123ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 345.1MB 4833ms 143ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 689.3MB 5030ms 153ms truffleruby 22.3.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 136ms 2.1ms 16.7MB 123ms 0ms wasmedgec 0.11.2
wasm 1.rs 142ms 0.4ms 25.4MB 130ms 0ms wasmedgec 0.11.2
wasm 2.rs 176ms 0.6ms 12.1MB 167ms 0ms wasmtime 5.0.0
wasm 2.rs 229ms 4.4ms 44.5MB 237ms 3ms node 16.19.0
wasm 1.rs 231ms 0.8ms 20.6MB 220ms 0ms wasmtime 5.0.0
wasm 1.rs 232ms 4.0ms 53.3MB 237ms 3ms node 16.19.0
ruby 1.rb 2733ms 12ms 428.6MB 3227ms 123ms truffleruby 22.3.1
ruby 1.rb timeout 0.0ms 151.1MB 4910ms 70ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 151.5MB 4910ms 70ms ruby/yjit 3.2.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 2766ms 6.0ms 17.3MB 2750ms 0ms wasmedgec 0.11.2
wasm 2.rs 3086ms 2.1ms 11.8MB 3070ms 0ms wasmtime 5.0.0
wasm 2.rs 3429ms 44ms 49.1MB 3470ms 10ms node 16.19.0
ruby 1.rb timeout 0.0ms 158.2MB 4917ms 57ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 158.6MB 4930ms 50ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 428.4MB 9447ms 213ms truffleruby 22.3.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 651ms 3.0ms 16.4MB 637ms 0ms wasmedgec 0.11.2
wasm 2.rs 725ms 0.5ms 11.3MB 713ms 0ms wasmtime 5.0.0
wasm 2.rs 881ms 0.8ms 48.8MB 920ms 7ms node 16.19.0
ruby 1-m.rb 1921ms 17ms 423.5MB 3527ms 133ms truffleruby 22.3.1
ruby 1.rb 2377ms 5.5ms 159.8MB 2310ms 47ms ruby/yjit 3.2.0
ruby 1.rb 2381ms 3.7ms 158.3MB 2307ms 60ms ruby 3.2.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 4124ms 0.8ms 16.2MB 4110ms 0ms wasmedgec 0.11.2
wasm 7.rs 4241ms 0.7ms 15.1MB 4227ms 0ms wasmedgec 0.11.2
wasm 2.rs 4382ms 147ms 48.6MB 4403ms 3ms node 16.19.0
wasm 2.rs 4401ms 38ms 11.3MB 4387ms 0ms wasmtime 5.0.0
wasm 7.rs 4495ms 6.9ms 48.8MB 4520ms 3ms node 16.19.0
wasm 7.rs 4611ms 0.3ms 11.2MB 4600ms 0ms wasmtime 5.0.0
ruby 4.rb timeout 0.0ms 32.2MB 4977ms 7ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.8MB 4973ms 10ms ruby/yjit 3.2.0
ruby 4.rb timeout 0.0ms 585.6MB 5217ms 223ms truffleruby 22.3.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 1037ms 0.4ms 16.6MB 1023ms 0ms wasmedgec 0.11.2
wasm 7.rs 1066ms 0.5ms 15.7MB 1053ms 0ms wasmedgec 0.11.2
wasm 2.rs 1112ms 1.0ms 11.3MB 1100ms 0ms wasmtime 5.0.0
wasm 2.rs 1150ms 2.7ms 48.3MB 1173ms 7ms node 16.19.0
wasm 7.rs 1164ms 3.7ms 11.3MB 1150ms 0ms wasmtime 5.0.0
wasm 7.rs 1199ms 2.1ms 48.8MB 1227ms 0ms node 16.19.0
ruby 4.rb timeout 0.0ms 32.1MB 4970ms 10ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.8MB 4973ms 10ms ruby/yjit 3.2.0
ruby 4.rb timeout 0.0ms 580.5MB 5417ms 200ms truffleruby 22.3.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 266ms 1.1ms 17.0MB 250ms 0ms wasmedgec 0.11.2
wasm 7.rs 275ms 3.4ms 14.5MB 257ms 0ms wasmedgec 0.11.2
wasm 2.rs 283ms 0.4ms 9.4MB 270ms 0ms wasmtime 5.0.0
wasm 7.rs 299ms 1.9ms 10.9MB 287ms 0ms wasmtime 5.0.0
wasm 2.rs 363ms 2.1ms 48.5MB 383ms 3ms node 16.19.0
wasm 7.rs 376ms 0.6ms 48.8MB 397ms 10ms node 16.19.0
ruby 4.rb 2454ms 2.0ms 479.2MB 2940ms 143ms truffleruby 22.3.1
ruby 4.rb timeout 0.0ms 32.4MB 4970ms 7ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.8MB 4967ms 13ms ruby/yjit 3.2.0