Ruby VS Wasm benchmarks

Current benchmark data was generated on Fri May 20 2022, 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 2001ms 12ms 40.9MB 1977ms 10ms wasmedgec 0.9.1
wasm 3.rs 2003ms 12ms 38.0MB 1960ms 27ms wasmer/llvm 2.2.1
wasm 5.rs 2010ms 5.6ms 24.9MB 1987ms 3ms wasmedgec 0.9.1
wasm 4.rs 2213ms 9.5ms 24.9MB 2197ms 0ms wasmedgec 0.9.1
wasm 5.rs 2617ms 4.8ms 22.3MB 2593ms 3ms wasmer/llvm 2.2.1
wasm 3.rs 2632ms 10ms 42.2MB 2607ms 10ms wasmtime 0.36.0
wasm 4.rs 2698ms 39ms 22.2MB 2670ms 13ms wasmer/llvm 2.2.1
wasm 5.rs 2882ms 50ms 58.7MB 2883ms 13ms node 16.15.0
wasm 3.rs 2936ms 43ms 74.8MB 2913ms 20ms node 16.15.0
wasm 4.rs 2969ms 12ms 58.8MB 2963ms 13ms node 16.15.0
wasm 4.rs 3209ms 19ms 26.3MB 3183ms 7ms wasmtime 0.36.0
wasm 5.rs 3225ms 37ms 26.3MB 3207ms 3ms wasmtime 0.36.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 5.rs 196ms 0.7ms 10.9MB 183ms 0ms wasmedgec 0.9.1
wasm 3.rs 196ms 14ms 10.1MB 170ms 0ms wasmer/llvm 2.2.1
wasm 3.rs 198ms 4.8ms 12.9MB 183ms 0ms wasmedgec 0.9.1
wasm 4.rs 216ms 3.1ms 10.9MB 203ms 0ms wasmedgec 0.9.1
wasm 5.rs 253ms 10ms 8.1MB 237ms 0ms wasmer/llvm 2.2.1
wasm 4.rs 259ms 8.1ms 8.2MB 240ms 0ms wasmer/llvm 2.2.1
wasm 3.rs 261ms 16ms 14.3MB 233ms 0ms wasmtime 0.36.0
wasm 5.rs 310ms 7.3ms 12.4MB 293ms 0ms wasmtime 0.36.0
wasm 4.rs 316ms 9.1ms 12.4MB 303ms 0ms wasmtime 0.36.0
wasm 4.rs 347ms 6.1ms 44.5MB 350ms 10ms node 16.15.0
wasm 5.rs 356ms 15ms 44.3MB 367ms 3ms node 16.15.0
wasm 3.rs 356ms 18ms 49.2MB 350ms 13ms node 16.15.0
ruby 1.rb 897ms 6.4ms 292.1MB 740ms 137ms ruby/yjit 3.1.2
ruby 1-m.rb 951ms 78ms 404.6MB 1523ms 130ms truffleruby 22.1.0
ruby 1.rb 976ms 8.7ms 35.5MB 930ms 23ms ruby 3.1.2

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 1337ms 61ms 8.5MB 1327ms 0ms wasmer/llvm 2.2.1
wasm 3.rs 1508ms 36ms 47.7MB 1560ms 3ms node 16.15.0
wasm 3.rs 1825ms 10ms 12.3MB 1810ms 0ms wasmtime 0.36.0
ruby 1.rb 3053ms 9.8ms 336.7MB 2847ms 190ms ruby/yjit 3.1.2
ruby 1.rb 3564ms 76ms 80.2MB 3487ms 60ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 91ms 10ms 6.8MB 73ms 0ms wasmer/llvm 2.2.1
wasm 3.rs 124ms 1.7ms 11.0MB 113ms 0ms wasmtime 0.36.0
wasm 3.rs 215ms 3.8ms 48.3MB 257ms 7ms node 16.15.0
ruby 1.rb 243ms 3.7ms 42.3MB 203ms 23ms ruby 3.1.2
ruby 1.rb 375ms 3.0ms 298.9MB 220ms 137ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 348ms 0.4ms 6.4MB 333ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 357ms 1.4ms 10.9MB 347ms 0ms wasmtime 0.36.0
wasm 1.rs 366ms 0.6ms 8.8MB 353ms 0ms wasmedgec 0.9.1
wasm 1.rs 462ms 4.7ms 43.1MB 480ms 3ms node 16.15.0
ruby 6.rb 2839ms 35ms 295.0MB 2677ms 143ms ruby/yjit 3.1.2
ruby 6.rb 4345ms 16ms 39.8MB 4310ms 17ms ruby 3.1.2
ruby 6.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 43ms 0.7ms 11.0MB 30ms 0ms wasmtime 0.36.0
wasm 1.rs 46ms 15ms 6.4MB 27ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 49ms 3.4ms 9.1MB 33ms 0ms wasmedgec 0.9.1
wasm 1.rs 125ms 3.2ms 43.3MB 143ms 3ms node 16.15.0
ruby 6.rb 491ms 2.7ms 287.8MB 340ms 133ms ruby/yjit 3.1.2
ruby 6.rb 507ms 8.2ms 31.1MB 483ms 7ms ruby 3.1.2
ruby 6-m.rb 1439ms 22ms 368.9MB 2527ms 140ms truffleruby 22.1.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 6.3ms 0.6ms 10.2MB 0ms 0ms wasmtime 0.36.0
wasm 1.rs 6.3ms 6.5ms 5.7MB 0ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 9.0ms 0.7ms 8.6MB 0ms 0ms wasmedgec 0.9.1
ruby 1.rb 39ms 1.0ms 134.6MB 20ms 18ms truffleruby 22.1.0
ruby 1.rb 72ms 1.1ms 30.1MB 50ms 10ms ruby 3.1.2
wasm 1.rs 75ms 1.7ms 42.1MB 90ms 2ms node 16.15.0
ruby 1.rb 225ms 0.8ms 286.6MB 72ms 138ms ruby/yjit 3.1.2

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 436ms 5.7ms 48.1MB 397ms 20ms ruby 3.1.2
ruby 1.rb 592ms 3.6ms 304.6MB 433ms 140ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 3896ms 8.6ms 160.2MB 3783ms 97ms ruby 3.1.2
ruby 1.rb 4051ms 2.5ms 417.8MB 3817ms 220ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 125ms 0.5ms 6.4MB 117ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 139ms 3.1ms 9.3MB 127ms 0ms wasmedgec 0.9.1
wasm 1.rs 158ms 2.5ms 10.7MB 143ms 0ms wasmtime 0.36.0
wasm 1.rs 218ms 2.1ms 43.5MB 230ms 7ms node 16.15.0
ruby 1.rb 617ms 3.7ms 286.7MB 477ms 120ms ruby/yjit 3.1.2
ruby 1.rb 623ms 13ms 30.2MB 603ms 3ms ruby 3.1.2
ruby 1-m.rb 913ms 8.6ms 326.3MB 1430ms 100ms truffleruby 22.1.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 369ms 3.8ms 6.4MB 357ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 396ms 3.4ms 9.3MB 387ms 0ms wasmedgec 0.9.1
wasm 1.rs 448ms 0.7ms 11.0MB 437ms 0ms wasmtime 0.36.0
wasm 1.rs 483ms 2.8ms 43.4MB 497ms 7ms node 16.15.0
ruby 1.rb 1379ms 4.7ms 286.8MB 1223ms 140ms ruby/yjit 3.1.2
ruby 1-m.rb 1509ms 4.5ms 360.3MB 2183ms 140ms truffleruby 22.1.0
ruby 1.rb 1696ms 22ms 30.3MB 1667ms 13ms ruby 3.1.2

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 71ms 15ms 6.2MB 50ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 75ms 2.8ms 9.2MB 67ms 0ms wasmedgec 0.9.1
wasm 1.rs 77ms 1.4ms 9.3MB 63ms 0ms wasmtime 0.36.0
wasm 1.rs 151ms 1.5ms 43.4MB 170ms 0ms node 16.15.0
ruby 1.rb 343ms 4.0ms 30.0MB 313ms 13ms ruby 3.1.2
ruby 1.rb 419ms 0.9ms 286.7MB 277ms 130ms ruby/yjit 3.1.2
ruby 1-m.rb 680ms 65ms 309.9MB 1070ms 100ms truffleruby 22.1.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 1149ms 49ms 33.0MB 1127ms 7ms wasmedgec 0.9.1
wasm 1.rs 1284ms 26ms 30.0MB 1250ms 17ms wasmer/llvm 2.2.1
wasm 1.rs 1469ms 18ms 66.7MB 1470ms 13ms node 16.15.0
wasm 1.rs 1524ms 3.3ms 34.3MB 1503ms 3ms wasmtime 0.36.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 246ms 3.9ms 15.0MB 233ms 0ms wasmedgec 0.9.1
wasm 1.rs 277ms 16ms 12.2MB 250ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 333ms 7.8ms 16.4MB 320ms 0ms wasmtime 0.36.0
wasm 1.rs 370ms 7.6ms 48.5MB 370ms 10ms node 16.15.0
ruby 1-m.rb 3310ms 16ms 583.4MB 6047ms 240ms truffleruby 22.1.0
ruby 1.rb 3946ms 4.7ms 300.9MB 3780ms 147ms ruby/yjit 3.1.2
ruby 1.rb 4797ms 7.7ms 44.4MB 4757ms 23ms ruby 3.1.2

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 470ms 1.7ms 4.9MB 457ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 503ms 0.2ms 9.3MB 490ms 0ms wasmedgec 0.9.1
wasm 1.rs 519ms 0.1ms 9.0MB 503ms 0ms wasmtime 0.36.0
wasm 1.rs 566ms 1.9ms 47.5MB 590ms 0ms node 16.15.0
wasm 2.rs 664ms 3.3ms 5.1MB 653ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 685ms 0.8ms 9.2MB 673ms 0ms wasmedgec 0.9.1
wasm 2.rs 721ms 0.3ms 9.0MB 710ms 0ms wasmtime 0.36.0
wasm 2.rs 753ms 1.5ms 47.4MB 773ms 10ms node 16.15.0
ruby 2.rb 1338ms 3.0ms 301.9MB 1703ms 93ms truffleruby 22.1.0
ruby 2.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 2.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 56ms 11ms 6.0MB 40ms 0ms wasmer/llvm 2.2.1
wasm 1.rs 59ms 0.7ms 11.2MB 43ms 0ms wasmtime 0.36.0
wasm 1.rs 61ms 0.8ms 9.3MB 50ms 0ms wasmedgec 0.9.1
wasm 2.rs 75ms 8.8ms 5.8MB 57ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 80ms 1.2ms 9.7MB 70ms 0ms wasmedgec 0.9.1
wasm 2.rs 81ms 4.3ms 9.4MB 67ms 0ms wasmtime 0.36.0
wasm 1.rs 143ms 2.4ms 47.4MB 167ms 10ms node 16.15.0
wasm 2.rs 166ms 3.4ms 47.5MB 180ms 10ms node 16.15.0
ruby 2-m.rb 489ms 4.2ms 289.6MB 797ms 83ms truffleruby 22.1.0
ruby 2.rb 2366ms 7.0ms 286.8MB 2220ms 130ms ruby/yjit 3.1.2
ruby 2.rb 3241ms 11ms 30.0MB 3213ms 10ms ruby 3.1.2

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 517ms 5.8ms 11.1MB 507ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 563ms 0.8ms 13.8MB 547ms 0ms wasmedgec 0.9.1
wasm 2.rs 634ms 4.3ms 15.3MB 623ms 0ms wasmtime 0.36.0
wasm 1.rs 700ms 8.8ms 47.9MB 683ms 7ms wasmedgec 0.9.1
wasm 1.rs 704ms 2.2ms 49.4MB 680ms 7ms wasmtime 0.36.0
wasm 2.rs 753ms 2.6ms 47.6MB 763ms 3ms node 16.15.0
wasm 1.rs 794ms 61ms 82.0MB 800ms 13ms node 16.15.0
wasm 1.rs 801ms 1.6ms 45.2MB 767ms 13ms wasmer/llvm 2.2.1
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 125ms 13ms 7.2MB 107ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 137ms 0.4ms 9.9MB 127ms 0ms wasmedgec 0.9.1
wasm 1.rs 151ms 1.7ms 18.7MB 133ms 0ms wasmedgec 0.9.1
wasm 1.rs 151ms 11ms 15.8MB 130ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 155ms 1.0ms 11.6MB 140ms 0ms wasmtime 0.36.0
wasm 1.rs 161ms 2.1ms 20.1MB 140ms 0ms wasmtime 0.36.0
wasm 1.rs 229ms 1.4ms 52.9MB 237ms 3ms node 16.15.0
wasm 2.rs 237ms 1.6ms 43.9MB 247ms 7ms node 16.15.0
ruby 1.rb 3510ms 27ms 408.6MB 3937ms 150ms truffleruby 22.1.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 3578ms 0.2ms 6.9MB 3567ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 3678ms 24ms 10.9MB 3667ms 0ms wasmedgec 0.9.1
wasm 2.rs 4112ms 42ms 47.5MB 4150ms 17ms node 16.15.0
wasm 2.rs 4174ms 1.4ms 10.9MB 4160ms 0ms wasmtime 0.36.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 848ms 13ms 6.6MB 830ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 878ms 4.6ms 10.6MB 863ms 0ms wasmedgec 0.9.1
wasm 2.rs 988ms 1.7ms 10.6MB 977ms 0ms wasmtime 0.36.0
wasm 2.rs 1052ms 10ms 47.4MB 1097ms 10ms node 16.15.0
ruby 1-m.rb 2095ms 83ms 383.5MB 3883ms 117ms truffleruby 22.1.0
ruby 1.rb 2507ms 16ms 162.6MB 2430ms 57ms ruby 3.1.2
ruby 1.rb 2676ms 44ms 420.8MB 2477ms 183ms ruby/yjit 3.1.2

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 4132ms 6.0ms 9.7MB 4120ms 0ms wasmedgec 0.9.1
wasm 7.rs 4217ms 0.7ms 6.1MB 4203ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 4257ms 1.8ms 51.2MB 4283ms 3ms node 16.15.0
wasm 7.rs 4268ms 0.6ms 9.7MB 4253ms 0ms wasmedgec 0.9.1
wasm 2.rs 4393ms 0.8ms 6.3MB 4380ms 0ms wasmer/llvm 2.2.1
wasm 7.rs 4502ms 10ms 47.6MB 4520ms 7ms node 16.15.0
wasm 2.rs 4525ms 3.3ms 10.5MB 4510ms 0ms wasmtime 0.36.0
wasm 7.rs 4615ms 1.5ms 10.5MB 4600ms 0ms wasmtime 0.36.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 1041ms 0.4ms 9.6MB 1023ms 3ms wasmedgec 0.9.1
wasm 7.rs 1059ms 2.5ms 6.1MB 1050ms 0ms wasmer/llvm 2.2.1
wasm 7.rs 1076ms 0.7ms 9.6MB 1060ms 0ms wasmedgec 0.9.1
wasm 2.rs 1102ms 1.0ms 6.2MB 1090ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 1137ms 0.7ms 10.5MB 1120ms 0ms wasmtime 0.36.0
wasm 2.rs 1137ms 0.7ms 47.5MB 1160ms 10ms node 16.15.0
wasm 7.rs 1160ms 0.7ms 11.0MB 1147ms 0ms wasmtime 0.36.0
wasm 7.rs 1197ms 3.5ms 47.5MB 1227ms 3ms node 16.15.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 270ms 0.9ms 9.6MB 257ms 0ms wasmedgec 0.9.1
wasm 7.rs 274ms 9.0ms 5.8MB 257ms 0ms wasmer/llvm 2.2.1
wasm 7.rs 279ms 1.1ms 9.6MB 267ms 0ms wasmedgec 0.9.1
wasm 2.rs 286ms 13ms 5.8MB 270ms 0ms wasmer/llvm 2.2.1
wasm 2.rs 293ms 2.3ms 11.0MB 280ms 0ms wasmtime 0.36.0
wasm 7.rs 297ms 1.1ms 9.4MB 287ms 0ms wasmtime 0.36.0
wasm 2.rs 363ms 4.7ms 47.4MB 380ms 10ms node 16.15.0
wasm 7.rs 374ms 2.0ms 47.5MB 397ms 7ms node 16.15.0
ruby 4.rb 1862ms 8.4ms 436.8MB 2480ms 127ms truffleruby 22.1.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2