Kotlin VS Wasm benchmarks

Current benchmark data was generated on Wed Sep 28 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
kotlin 1.kt 646ms 21ms 412.3MB 653ms 97ms kotlin/jvm 17.0.2
wasm 3.rs 1976ms 14ms 50.8MB 1950ms 13ms wasmedgec 0.11.0
wasm 3.rs 2043ms 5.8ms 37.9MB 2003ms 23ms wasmer/llvm 2.3.0
wasm 5.rs 2087ms 4.6ms 34.9MB 2067ms 3ms wasmedgec 0.11.0
wasm 4.rs 2236ms 2.2ms 34.8MB 2217ms 3ms wasmedgec 0.11.0
wasm 4.rs 2430ms 0.9ms 21.9MB 2403ms 10ms wasmer/llvm 2.3.0
wasm 3.rs 2433ms 3.1ms 42.6MB 2413ms 7ms wasmtime 1.0.1
wasm 5.rs 2533ms 5.5ms 21.8MB 2507ms 13ms wasmer/llvm 2.3.0
wasm 5.rs 2660ms 37ms 62.2MB 2660ms 13ms node 16.17.0
wasm 3.rs 2752ms 59ms 74.5MB 2747ms 20ms node 16.17.0
wasm 4.rs 2757ms 30ms 58.4MB 2767ms 3ms node 16.17.0
wasm 5.rs 2938ms 19ms 26.7MB 2920ms 0ms wasmtime 1.0.1
wasm 4.rs 3075ms 11ms 26.7MB 3060ms 3ms wasmtime 1.0.1
kotlin 1-m.kt 4834ms 48ms 246.8MB 7880ms 53ms kotlin/native 1.7.10

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 126ms 2.8ms 109.7MB 110ms 30ms kotlin/jvm 17.0.2
wasm 3.rs 190ms 1.5ms 22.7MB 180ms 0ms wasmedgec 0.11.0
wasm 3.rs 193ms 0.7ms 10.0MB 180ms 0ms wasmer/llvm 2.3.0
wasm 5.rs 203ms 0.3ms 22.1MB 187ms 0ms wasmedgec 0.11.0
wasm 4.rs 216ms 0.4ms 21.0MB 200ms 0ms wasmedgec 0.11.0
wasm 4.rs 230ms 3.8ms 7.8MB 217ms 0ms wasmer/llvm 2.3.0
wasm 3.rs 231ms 0.7ms 14.7MB 220ms 0ms wasmtime 1.0.1
wasm 5.rs 240ms 1.3ms 7.5MB 230ms 0ms wasmer/llvm 2.3.0
wasm 5.rs 278ms 1.6ms 12.8MB 263ms 0ms wasmtime 1.0.1
wasm 4.rs 293ms 0.9ms 12.8MB 277ms 0ms wasmtime 1.0.1
wasm 5.rs 316ms 3.6ms 44.3MB 323ms 10ms node 16.17.0
wasm 3.rs 331ms 6.2ms 46.6MB 347ms 0ms node 16.17.0
wasm 4.rs 336ms 5.7ms 44.6MB 353ms 0ms node 16.17.0
kotlin 1-m.kt 415ms 1.2ms 30.5MB 690ms 0ms kotlin/native 1.7.10

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 1267ms 0.5ms 8.4MB 1247ms 3ms wasmer/llvm 2.3.0
wasm 3.rs 1440ms 3.1ms 12.8MB 1427ms 0ms wasmtime 1.0.1
wasm 3.rs 1554ms 85ms 46.5MB 1560ms 3ms node 16.17.0
wasm 3.rs 1973ms 2.4ms 21.1MB 1960ms 0ms wasmedgec 0.11.0
kotlin 2-m.kt 2872ms 80ms 157.7MB 5470ms 67ms kotlin/jvm 17.0.2
kotlin 1.kt 3016ms 39ms 154.5MB 3863ms 37ms kotlin/jvm 17.0.2
kotlin 1.kt timeout 0.0ms 0.0MB 0ms 0ms kotlin/native 1.7.10
kotlin 2-m.kt timeout 0.0ms 0.0MB 0ms 0ms kotlin/native 1.7.10

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 3.rs 84ms 0.5ms 7.1MB 70ms 0ms wasmer/llvm 2.3.0
wasm 3.rs 99ms 0.9ms 11.5MB 90ms 0ms wasmtime 1.0.1
wasm 3.rs 137ms 1.7ms 19.5MB 130ms 0ms wasmedgec 0.11.0
wasm 3.rs 210ms 3.1ms 47.0MB 257ms 10ms node 16.17.0
kotlin 1-m.kt 689ms 6.6ms 94.2MB 1210ms 43ms kotlin/jvm 17.0.2
kotlin 2-m.kt 867ms 23ms 29.8MB 1533ms 30ms kotlin/native 1.7.10
kotlin 2-m.kt 1058ms 13ms 103.6MB 1930ms 37ms kotlin/jvm 17.0.2
kotlin 1.kt 1077ms 5.0ms 10.6MB 1237ms 7ms kotlin/native 1.7.10

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 2.4ms 0.6ms 1.1MB 0ms 0ms kotlin/native 1.7.10
wasm 1.rs 2.4ms 0.7ms 4.8MB 0ms 0ms wasmer/llvm 2.3.0
wasm 1.rs 5.7ms 0.5ms 9.3MB 0ms 0ms wasmtime 1.0.1
wasm 1.rs 6.6ms 0.4ms 18.5MB 0ms 0ms wasmedgec 0.11.0
kotlin 1.kt 63ms 5.3ms 40.8MB 46ms 10ms kotlin/jvm 17.0.2
wasm 1.rs 79ms 2.0ms 43.4MB 96ms 2ms node 16.17.0

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt timeout 0.0ms 0.0MB 0ms 0ms kotlin/jvm 17.0.2
kotlin 2.kt timeout 0.0ms 0.0MB 0ms 0ms kotlin/jvm 17.0.2

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 2-m.kt 2265ms 143ms 199.2MB 3520ms 200ms kotlin/jvm 17.0.2
kotlin 1-m.kt 2424ms 263ms 182.4MB 3883ms 237ms kotlin/jvm 17.0.2

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1-m.kt 1139ms 25ms 213.2MB 1950ms 80ms kotlin/jvm 17.0.2

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1-m.kt 4079ms 251ms 946.0MB 5950ms 247ms kotlin/jvm 17.0.2

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 124ms 0.5ms 6.1MB 117ms 0ms wasmer/llvm 2.3.0
wasm 1.rs 137ms 1.6ms 18.9MB 130ms 0ms wasmedgec 0.11.0
wasm 1.rs 150ms 1.5ms 11.1MB 137ms 0ms wasmtime 1.0.1
wasm 1.rs 226ms 3.8ms 44.4MB 247ms 3ms node 16.17.0
kotlin 1.kt 235ms 2.4ms 109.9MB 300ms 20ms kotlin/jvm 17.0.2
kotlin 2-m.kt 240ms 22ms 118.0MB 360ms 23ms kotlin/jvm 17.0.2
kotlin 2-m.kt 464ms 12ms 54.1MB 747ms 3ms kotlin/native 1.7.10
kotlin 1.kt timeout 0.0ms 0.0MB 0ms 0ms kotlin/native 1.7.10

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 366ms 1.1ms 6.1MB 353ms 0ms wasmer/llvm 2.3.0
kotlin 2.kt 369ms 0.6ms 130.6MB 470ms 27ms kotlin/jvm 17.0.2
wasm 1.rs 398ms 5.5ms 18.6MB 387ms 0ms wasmedgec 0.11.0
wasm 1.rs 437ms 2.3ms 11.1MB 420ms 0ms wasmtime 1.0.1
kotlin 1.kt 454ms 2.5ms 132.8MB 503ms 37ms kotlin/jvm 17.0.2
wasm 1.rs 509ms 0.7ms 44.4MB 527ms 3ms node 16.17.0
kotlin 2-m.kt 1384ms 2.6ms 146.0MB 2140ms 37ms kotlin/native 1.7.10
kotlin 1.kt timeout 0.0ms 0.0MB 0ms 0ms kotlin/native 1.7.10

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 63ms 0.5ms 6.4MB 50ms 0ms wasmer/llvm 2.3.0
wasm 1.rs 70ms 0.7ms 18.2MB 60ms 0ms wasmedgec 0.11.0
wasm 1.rs 76ms 0.7ms 9.3MB 67ms 0ms wasmtime 1.0.1
wasm 1.rs 152ms 2.3ms 44.5MB 170ms 3ms node 16.17.0
kotlin 1-m.kt 170ms 2.4ms 75.9MB 250ms 17ms kotlin/jvm 17.0.2
kotlin 2-m.kt 178ms 4.3ms 76.8MB 253ms 20ms kotlin/jvm 17.0.2
kotlin 2-m.kt 237ms 4.8ms 27.9MB 387ms 0ms kotlin/native 1.7.10
kotlin 1.kt timeout 0.0ms 0.0MB 0ms 0ms kotlin/native 1.7.10

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 500ms 21ms 561.1MB 477ms 100ms kotlin/jvm 17.0.2
wasm 1.rs 1094ms 0.3ms 43.0MB 1073ms 7ms wasmedgec 0.11.0
wasm 1.rs 1251ms 5.6ms 29.8MB 1217ms 20ms wasmer/llvm 2.3.0
wasm 1.rs 1375ms 25ms 67.4MB 1377ms 17ms node 16.17.0
wasm 1.rs 1436ms 17ms 34.7MB 1410ms 7ms wasmtime 1.0.1
kotlin 1.kt 2330ms 9.2ms 138.2MB 3397ms 23ms kotlin/native 1.7.10

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 188ms 3.7ms 221.5MB 170ms 47ms kotlin/jvm 17.0.2
wasm 1.rs 238ms 0.2ms 25.0MB 223ms 0ms wasmedgec 0.11.0
wasm 1.rs 268ms 0.1ms 11.8MB 250ms 0ms wasmer/llvm 2.3.0
wasm 1.rs 310ms 1.8ms 17.0MB 293ms 0ms wasmtime 1.0.1
wasm 1.rs 364ms 14ms 55.4MB 377ms 3ms node 16.17.0
kotlin 1.kt 425ms 5.9ms 38.1MB 613ms 3ms kotlin/native 1.7.10

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 472ms 0.6ms 4.7MB 460ms 0ms wasmer/llvm 2.3.0
wasm 1.rs 497ms 0.3ms 11.5MB 487ms 0ms wasmtime 1.0.1
wasm 1.rs 502ms 1.3ms 18.5MB 487ms 0ms wasmedgec 0.11.0
kotlin 1n.kt 537ms 3.4ms 1.1MB 527ms 0ms kotlin/native 1.7.10
kotlin 1.kt 566ms 0.2ms 43.2MB 580ms 17ms kotlin/jvm 17.0.2
wasm 1.rs 572ms 3.4ms 48.3MB 590ms 13ms node 16.17.0
wasm 2.rs 676ms 0.1ms 18.8MB 663ms 0ms wasmedgec 0.11.0
wasm 2.rs 677ms 0.2ms 9.7MB 667ms 0ms wasmtime 1.0.1
wasm 2.rs 702ms 0.3ms 4.9MB 690ms 0ms wasmer/llvm 2.3.0
wasm 2.rs 758ms 1.4ms 48.2MB 780ms 3ms node 16.17.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 1.rs 51ms 0.5ms 4.8MB 40ms 0ms wasmer/llvm 2.3.0
wasm 1.rs 57ms 0.8ms 9.5MB 43ms 0ms wasmtime 1.0.1
kotlin 1n.kt 58ms 0.7ms 1.2MB 50ms 0ms kotlin/native 1.7.10
wasm 1.rs 58ms 1.0ms 17.9MB 43ms 0ms wasmedgec 0.11.0
wasm 2.rs 74ms 0.5ms 6.1MB 67ms 0ms wasmer/llvm 2.3.0
wasm 2.rs 74ms 0.3ms 11.4MB 67ms 0ms wasmtime 1.0.1
wasm 2.rs 76ms 1.0ms 20.5MB 63ms 0ms wasmedgec 0.11.0
kotlin 1.kt 135ms 0.8ms 43.2MB 157ms 10ms kotlin/jvm 17.0.2
wasm 1.rs 149ms 2.8ms 48.1MB 170ms 10ms node 16.17.0
wasm 2.rs 171ms 2.8ms 48.5MB 190ms 13ms node 16.17.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 3004ms 9.1ms 6.6MB 2987ms 0ms wasmer/llvm 2.3.0
wasm 2.rs 3130ms 8.4ms 19.7MB 3117ms 0ms wasmedgec 0.11.0
wasm 2.rs 3378ms 0.6ms 11.3MB 3370ms 0ms wasmtime 1.0.1
wasm 2.rs 3633ms 12ms 47.8MB 3677ms 13ms node 16.17.0
kotlin 1.kt timeout 0.0ms 0.0MB 0ms 0ms kotlin/jvm 17.0.2
kotlin 1n.kt timeout 0.0ms 0.0MB 0ms 0ms kotlin/native 1.7.10
kotlin 2n.kt timeout 0.0ms 0.0MB 0ms 0ms kotlin/native 1.7.10

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 2.rs 706ms 0.2ms 6.3MB 693ms 0ms wasmer/llvm 2.3.0
wasm 2.rs 742ms 3.3ms 19.5MB 727ms 0ms wasmedgec 0.11.0
wasm 2.rs 802ms 0.5ms 11.7MB 790ms 0ms wasmtime 1.0.1
wasm 2.rs 960ms 10ms 48.5MB 1010ms 7ms node 16.17.0
kotlin 1.kt 1434ms 9.9ms 207.7MB 1760ms 50ms kotlin/jvm 17.0.2
kotlin 1n.kt timeout 0.0ms 0.0MB 0ms 0ms kotlin/native 1.7.10
kotlin 2n.kt timeout 0.0ms 0.0MB 0ms 0ms kotlin/native 1.7.10

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt timeout 0.0ms 0.0MB 0ms 0ms kotlin/jvm 17.0.2
kotlin 1n.kt timeout 0.0ms 0.0MB 0ms 0ms kotlin/native 1.7.10

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 1073ms 9.0ms 95.5MB 1470ms 37ms kotlin/jvm 17.0.2
kotlin 1n.kt 4822ms 8.4ms 74.8MB 6053ms 17ms kotlin/native 1.7.10

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 0.rs 414ms 0.3ms 4.9MB 403ms 0ms wasmer/llvm 2.3.0
wasm 0.rs 417ms 0.2ms 18.9MB 407ms 0ms wasmedgec 0.11.0
wasm 0.rs 471ms 2.5ms 9.7MB 457ms 0ms wasmtime 1.0.1
wasm 0.rs 508ms 2.4ms 46.4MB 530ms 3ms node 16.17.0
wasm 1.rs 4473ms 8.8ms 4.9MB 4460ms 0ms wasmer/llvm 2.3.0
kotlin 1.kt 4482ms 21ms 184.2MB 5393ms 47ms kotlin/jvm 17.0.2
wasm 1.rs 4546ms 5.2ms 18.9MB 4533ms 0ms wasmedgec 0.11.0
wasm 1.rs 4870ms 28ms 52.1MB 4910ms 17ms node 16.17.0
wasm 1.rs timeout 0.0ms 0.0MB 0ms 0ms wasmtime 1.0.1

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
wasm 0.rs 106ms 0.1ms 5.0MB 100ms 0ms wasmer/llvm 2.3.0
wasm 0.rs 111ms 0.0ms 19.1MB 100ms 0ms wasmedgec 0.11.0
wasm 0.rs 124ms 0.8ms 9.9MB 110ms 0ms wasmtime 1.0.1
wasm 0.rs 207ms 1.0ms 46.6MB 230ms 10ms node 16.17.0
wasm 1.rs 1120ms 1.7ms 4.9MB 1110ms 0ms wasmer/llvm 2.3.0
wasm 1.rs 1146ms 1.8ms 19.0MB 1133ms 0ms wasmedgec 0.11.0
wasm 1.rs 1286ms 4.3ms 11.6MB 1273ms 0ms wasmtime 1.0.1
wasm 1.rs 1320ms 3.5ms 51.8MB 1360ms 17ms node 16.17.0
kotlin 1-m.kt 1354ms 22ms 181.9MB 2107ms 50ms kotlin/jvm 17.0.2