Skip to content

Latest commit

 

History

History
345 lines (330 loc) · 72.6 KB

Performance250.md

File metadata and controls

345 lines (330 loc) · 72.6 KB

Duktape 2.5.0 performance measurement

Octane

Octane sub-scores and overall score. Higher is better, highest of 10 runs. Omits a few Octane tests which fail to run (see Duktape repo tests/octane).

Test duk.O2.250 duk.O2.240 duk.O2.200 duk.O2.180
Box2D 508 524 474 351
CodeLoad 4451 4372 4237 3529
Crypto 270 155 138 121
DeltaBlue 130 131 115 85.8
EarleyBoyer 320 341 268 230
Gameboy 888 888 832 651
NavierStokes 357 356 319 288
PdfJS 494 491 350 286
RayTrace 286 284 196 174
Richards 107 108 96.3 70.0
Splay 790 773 572 549
SplayLatency 4379 4228 3103 3103
SCORE 524 501 416 350

Duktape microbenchmarks, comparison to 2.4.0

Baseline is duk.O2.240, compared to duk.O2.250 and older versions. Lower is better, lowest of 5 runs.

duk.O2.250duk.O2.240duk.O2.200duk.O2.180duk.O2.100
test-add-fastint1.771.78(1.91)(1.94)(4.82)
test-add-float1.711.76(2.07)(1.96)(4.82)
test-add-int1.771.76(2.02)(1.98)(4.82)
test-add-nan-fastint1.801.86(2.04)(2.06)(4.82)
test-add-nan1.711.76(2.07)(1.96)(4.83)
test-add-string24.9125.11(30.39)(33.11)(38.68)
test-arith-add7.097.10(7.72)(7.74)(19.26)
test-arith-add-string2.492.52(3.03)(3.29)(3.85)
test-arith-div10.1510.14(10.61)(10.99)(20.30)
test-arith-mod9.869.81(10.88)(10.29)(26.75)
test-arith-mul(8.15)7.79(8.50)(8.78)(20.71)
test-arith-sub7.327.34(8.38)(7.68)(20.62)
test-array-append1.491.53(1.66)(1.76)(6.10)
test-array-cons-list0.981.04(1.41)(2.42)(4.34)
test-array-foreach4.024.01(4.34)(4.42)(7.16)
test-array-literal-1004.194.25(9.76)(7.33)(13.42)
test-array-literal-201.011.03(2.40)(1.70)(3.40)
test-array-literal-30.440.46(0.79)(0.74)(1.34)
test-array-pop(3.05)2.96(3.96)(10.61)(14.83)
test-array-push3.253.27(3.96)(7.47)(12.72)
test-array-read5.004.98(5.34)(5.78)(7.79)
test-array-read-lenloop5.725.64(6.02)(7.01)(10.99)
test-array-sort5.225.405.475.55(5.67)
test-array-write4.424.51(4.98)(5.86)(25.02)
test-array-write-length4.394.37(4.71)(6.86)(10.38)
test-assign-add11.2611.51(12.23)(12.19)(32.61)
test-assign-addto11.3311.51(12.19)(12.24)(32.82)
test-assign-addto-nan2.942.99(3.34)(3.42)(7.98)
test-assign-boolean9.939.92(11.64)(17.89)(44.53)
test-assign-const-int220.1420.50(22.85)(21.63)(49.38)
test-assign-const-int(10.09)9.34(11.27)(10.25)(37.87)
test-assign-const10.3810.30(11.91)(10.68)(38.06)
test-assign-literal12.3512.54(14.08)(19.90)(45.96)
test-assign-proplhs-reg6.046.09(6.54)(8.65)(9.09)
test-assign-proprhs7.107.077.11(9.97)(13.44)
test-assign-reg10.199.92(12.12)(10.72)(20.36)
test-base64-decode1.131.13(1.24)--
test-base64-decode-whitespace1.371.39(1.45)--
test-base64-encode1.271.28(1.42)--
test-bitwise-ops5.075.10(5.86)(8.64)(58.02)
test-break-fast3.723.68(5.20)(6.11)(6.49)
test-break-slow16.0515.76(18.60)(21.34)(28.92)
test-buffer-float32array-write9.329.389.61(9.78)-
test-buffer-nodejs-read6.816.87(7.27)(7.58)-
test-buffer-nodejs-write8.638.69(9.01)8.63-
test-buffer-object-read6.896.90(7.29)(7.61)-
test-buffer-object-write8.638.67(8.99)8.64-
test-buffer-plain-read5.145.23(5.44)(5.79)-
test-buffer-plain-write4.724.77(5.38)4.89-
test-call-apply4.033.99(7.25)(8.53)(11.48)
test-call-basic-110.4010.59(12.76)(15.20)(25.15)
test-call-basic-210.4110.67(12.69)(15.22)(26.17)
test-call-basic-312.3412.29(14.57)(21.25)(33.55)
test-call-basic-4(27.22)26.11(30.09)(48.95)(75.03)
test-call-bound-deep4.154.23(51.98)(61.94)(90.78)
test-call-bound4.064.14(10.45)(10.66)(15.79)
test-call-call3.573.56(5.37)(6.25)(8.57)
test-call-closure-12.772.85(5.00)(4.80)(7.18)
test-call-native20.3920.35(22.42)(22.50)(34.58)
test-call-prop7.147.13(7.89)(10.05)(14.81)
test-call-proxy-apply-143.5444.95---
test-call-proxy-pass-122.8422.75---
test-call-reg4.154.22(5.08)(6.08)(10.02)
test-call-reg-new7.657.61(9.82)(10.00)(13.16)
test-call-tail-12.012.03(2.90)(3.05)(3.66)
test-call-tail-22.222.26(4.95)(5.02)(5.64)
test-call-var9.249.28(11.85)(13.05)(17.37)
test-cbor-decode-13.633.63---
test-cbor-decode-26.676.88---
test-cbor-decode-39.589.71---
test-cbor-decode-fastints1.071.06---
test-cbor-decode-largeobj3.183.21---
test-cbor-decode-strings1.311.31---
test-cbor-encode-18.628.66---
test-cbor-encode-213.0413.43---
test-cbor-encode-39.9010.61---
test-cbor-encode-double0.951.03---
test-cbor-encode-float0.941.01---
test-cbor-encode-half-float0.961.02---
test-cbor-encode-largeobj5.825.96---
test-cbor-encode-largestr1.401.50---
test-cbor-encode-simple3.893.97---
test-closure-inner-functions1.401.45(2.31)(2.48)(3.60)
test-compile-mandel21.0521.3221.66(24.85)(32.26)
test-compile-mandel-nofrac14.2714.40(15.43)(18.30)(26.00)
test-compile-short6.877.06(9.03)(11.44)(16.40)
test-compile-string-ascii9.189.219.20(15.05)(23.77)
test-continue-fast5.795.74(7.42)(8.19)(8.91)
test-continue-slow18.1417.79(21.03)(23.29)(31.78)
test-empty-loop6.576.44(7.10)(7.53)(17.73)
test-empty-loop-slowpath(2.04)1.96(3.14)(3.69)(4.55)
test-empty-loop-step36.596.45(7.18)(7.63)(12.74)
test-enum-basic4.914.90(6.52)(6.80)(8.74)
test-equals-fastint1.511.49(1.65)(2.72)(3.54)
test-equals-nonfastint1.561.56(1.71)(2.66)(3.52)
test-error-create2.272.34(3.07)(3.85)(5.85)
test-fib-25.535.59(6.43)(7.43)(12.18)
test-fib9.179.22(11.04)(12.16)(16.68)
test-func-bind2.802.81(5.40)(4.16)(6.50)
test-func-tostring5.535.54(6.04)(6.94)(8.11)
test-global-lookup12.0912.02(15.62)(19.29)(22.61)
test-hello-world0.000.000.000.000.00
test-hex-decode2.702.642.652.64(7.03)
test-hex-encode1.941.971.95--
test-jc-serialize-indented5.005.04(5.42)(5.85)(57.64)
test-jc-serialize2.852.86(3.18)(3.57)(50.92)
test-json-parse-hex2.292.29(3.31)--
test-json-parse-integer4.034.16(5.00)(5.09)(5.31)
test-json-parse-number8.168.428.448.62(8.72)
test-json-parse-string3.203.18(4.11)(3.55)(78.58)
test-json-serialize-fastpath-loop5.395.41(6.07)(6.31)(54.05)
test-json-serialize-forceslow(10.95)10.50(12.08)(12.35)(18.37)
test-json-serialize-hex1.071.071.07--
test-json-serialize-indented-deep1001.891.92(2.49)(2.89)(5.15)
test-json-serialize-indented-deep254.975.02(5.68)(5.82)(71.18)
test-json-serialize-indented-deep5001.231.20(1.64)(1.83)(3.21)
test-json-serialize-indented9.249.16(10.06)(11.06)(112.84)
test-json-serialize-jsonrpc-message2.012.03(2.42)(2.47)-
test-json-serialize-largeobj5.155.275.29(5.43)(18.84)
test-json-serialize-nofrac0.870.86(0.96)(1.12)(11.62)
test-json-serialize-plainbuf4.594.54(36.65)0.23-
test-json-serialize-simple(7.25)6.71(7.41)6.69(18.52)
test-json-serialize-slowpath-loop5.085.15(6.67)(7.77)(14.90)
test-json-string-bench4.634.71(5.54)(7.79)(10.30)
test-json-string-stringify6.856.847.01(7.13)(42.13)
test-jx-serialize-bufobj-forceslow5.385.40(6.11)(7.20)-
test-jx-serialize-bufobj1.611.61(1.88)(2.08)-
test-jx-serialize-indented5.235.27(5.74)(6.22)(57.99)
test-jx-serialize3.083.14(3.36)(3.79)(50.71)
test-mandel-iter10-normal0.080.08(0.10)(0.12)(0.19)
test-mandel-iter10-promise-----
test-mandel8.868.81(10.20)(10.05)(18.97)
test-mandel-promise-----
test-math-clz324.083.98---
test-misc-1dcell8.078.12(8.66)(9.34)(15.13)
test-object-garbage-23.673.68(6.96)(5.06)(8.64)
test-object-garbage7.257.527.58(8.03)(8.89)
test-object-literal-10010.6410.76(21.85)(17.11)(25.25)
test-object-literal-202.372.38(3.82)(2.81)(4.82)
test-object-literal-30.560.56(0.88)(0.66)(1.14)
test-prop-read-10247.887.847.99(10.89)(15.58)
test-prop-read-167.887.83(8.36)(11.45)(15.52)
test-prop-read-2567.847.86(8.12)(10.84)(15.25)
test-prop-read-327.867.828.04(10.94)(15.32)
test-prop-read-487.877.867.98(11.08)(15.36)
test-prop-read-47.917.848.06(10.88)(15.33)
test-prop-read-647.887.93(8.17)(10.84)(23.51)
test-prop-read-87.857.84(8.16)(10.98)(15.36)
test-prop-read-inherited10.009.83(10.31)(13.35)(17.72)
test-prop-read8.147.928.12(10.92)(15.36)
test-prop-write-10246.866.86(7.54)(9.54)(10.86)
test-prop-write-166.826.93(7.76)(9.99)(11.29)
test-prop-write-2566.846.86(7.38)(9.52)(11.10)
test-prop-write-326.856.86(7.43)(9.61)(10.88)
test-prop-write-486.836.83(7.36)(10.08)(10.91)
test-prop-write-46.826.82(7.38)(9.52)(10.92)
test-prop-write-646.876.86(7.38)(9.92)(11.06)
test-prop-write-86.876.86(7.44)(9.61)(11.06)
test-prop-write6.856.86(7.42)(9.51)(10.94)
test-proxy-get2.862.88(3.32)(3.86)(5.29)
test-random2.802.78(3.70)(6.76)(7.84)
test-reflect-ownkeys-sorted1.261.32(1.74)--
test-reflect-ownkeys-unsorted1.321.32(1.76)--
test-regexp-case-insensitive-compile(0.85)0.81(30.70)(28.65)(28.23)
test-regexp-case-insensitive-execute2.482.48(2.75)2.53(2.58)
test-regexp-case-sensitive-compile1.911.97(2.36)(2.46)(3.09)
test-regexp-case-sensitive-execute1.992.00(2.37)(2.58)(3.14)
test-regexp-compile2.762.84(3.24)(3.88)(4.65)
test-regexp-execute2.372.31(2.74)(2.93)(3.31)
test-regexp-string-parse13.8713.9514.24(25.07)(20.87)
test-reg-readwrite-object8.048.60(10.24)8.75(21.20)
test-reg-readwrite-plain7.567.74(9.17)7.89(18.38)
test-strict-equals-fastint1.531.53(1.73)(2.70)(3.58)
test-strict-equals-nonfastint1.611.61(1.80)(2.68)(3.58)
test-string-array-concat14.3513.98(14.60)(15.48)(37.83)
test-string-arridx2.552.60(3.12)(3.40)(3.75)
test-string-charlen-ascii1.601.771.39(2.27)(4.31)
test-string-charlen-nonascii2.562.562.46(2.67)(3.26)
test-string-compare7.267.32(7.80)(10.86)(14.69)
test-string-decodeuri9.409.389.329.33(10.41)
test-string-encodeuri8.878.94(9.33)9.03(15.28)
test-string-garbage5.585.71(7.30)(8.08)(8.91)
test-string-intern-grow20.870.87(1.58)(1.80)-
test-string-intern-grow7.627.62(19.70)(21.73)-
test-string-intern-grow-short25.355.38(6.85)(7.68)-
test-string-intern-grow-short5.645.53(14.30)(14.84)-
test-string-intern-match(0.26)0.25(0.30)(0.33)-
test-string-intern-match-short2.082.08(2.93)(3.32)-
test-string-intern-miss0.510.52(0.94)(1.01)-
test-string-intern-miss-short2.522.54(3.74)(3.99)-
test-string-literal-intern4.834.84(5.14)(5.49)-
test-string-number-list0.820.82(1.36)(1.74)(2.38)
test-string-plain-concat0.890.88(1.28)(1.78)(3.45)
test-string-scan-nonascii4.814.814.90(5.56)(6.98)
test-string-uppercase(4.74)4.56(4.80)(4.78)(6.34)
test-symbol-tostring5.936.05(8.61)--
test-textdecoder-ascii4.034.11(4.29)--
test-textdecoder-nonascii2.922.88(3.32)--
test-textencoder-ascii13.9314.1113.91--
test-textencoder-nonascii20.2420.6920.30--
test-try-catch-nothrow7.817.737.457.837.46
test-try-catch-throw43.9343.49(62.06)(54.41)(68.55)
test-try-finally-nothrow10.029.839.75(10.94)(10.25)
test-try-finally-throw56.0156.06(76.40)(69.44)(80.24)

Setup

Measurement host:

  • "Intel(R) Core(TM) i5-8600K CPU @ 3.60GHz" (Changed from previous performance test.)

Duktape is compiled with:

  • gcc version 8.3.0 (Debian 8.3.0-6)
  • gcc -O2
  • duk.O2: defaults + debugger and executor interrupt enabled, fastints enabled

Note that:

  • These are microbenchmarks, and don't necessarily represent application performance very well. Microbenchmarks are useful for measuring how well different parts of the engine work.

  • Only relative numbers matter. Loop counts differ between test cases so the numbers for two tests are not directly comparable. Absolute numbers may also change between test runs if test target is different.

  • The measurement process is not very accurate: it's based on running the test multiple times and measuring time using the time command.