deno_core icon indicating copy to clipboard operation
deno_core copied to clipboard

WIP: use v8::Value for strings in fast API

Open lucacasonato opened this issue 1 year ago • 0 comments

In seqonebytestring cases this is currently WAAAYYY slower than previously. It moderately speeds up other cases. I am relatively confident we can fix this.

// main
running 36 tests
test baseline                                   ... bench:         306 ns/iter (+/- 5)
test bench_op_arraybuffer                       ... bench:       6,165 ns/iter (+/- 276)
test bench_op_bigint                            ... bench:       3,553 ns/iter (+/- 27)
test bench_op_bigint_return                     ... bench:       5,253 ns/iter (+/- 254)
test bench_op_buffer                            ... bench:       3,997 ns/iter (+/- 37)
test bench_op_buffer_jsbuffer                   ... bench:      38,745 ns/iter (+/- 980)
test bench_op_buffer_nofast                     ... bench:      43,536 ns/iter (+/- 833)
test bench_op_external                          ... bench:       3,649 ns/iter (+/- 28)
test bench_op_external_nofast                   ... bench:       9,199 ns/iter (+/- 91)
test bench_op_option_u32                        ... bench:       6,377 ns/iter (+/- 494)
test bench_op_string                            ... bench:       9,621 ns/iter (+/- 227)
test bench_op_string_bytestring                 ... bench:      50,056 ns/iter (+/- 2,717)
test bench_op_string_bytestring_no_side_effects ... bench:      50,244 ns/iter (+/- 6,436)
test bench_op_string_large_1000                 ... bench:     142,834 ns/iter (+/- 2,709)
test bench_op_string_large_1000000              ... bench:     637,223 ns/iter (+/- 7,831)
test bench_op_string_large_utf8_1000            ... bench:   2,276,399 ns/iter (+/- 7,891)
test bench_op_string_large_utf8_1000000         ... bench:  11,121,529 ns/iter (+/- 82,151)
test bench_op_string_onebyte                    ... bench:       3,972 ns/iter (+/- 33)
test bench_op_string_onebyte_large_1000         ... bench:      36,197 ns/iter (+/- 295)
test bench_op_string_onebyte_large_1000000      ... bench:   1,038,117 ns/iter (+/- 140,790)
test bench_op_string_option_u32                 ... bench:      40,460 ns/iter (+/- 821)
test bench_op_u32                               ... bench:       3,682 ns/iter (+/- 79)
test bench_op_v8_global                         ... bench:      30,163 ns/iter (+/- 592)
test bench_op_v8_global_scope                   ... bench:      31,256 ns/iter (+/- 438)
test bench_op_v8_isolate_nofast                 ... bench:       8,938 ns/iter (+/- 98)
test bench_op_v8_local                          ... bench:       3,759 ns/iter (+/- 35)
test bench_op_v8_local_nofast                   ... bench:       7,094 ns/iter (+/- 42)
test bench_op_v8_local_scope                    ... bench:      13,348 ns/iter (+/- 799)
test bench_op_v8_scope                          ... bench:      11,985 ns/iter (+/- 583)
test bench_op_void                              ... bench:       3,495 ns/iter (+/- 32)
test bench_op_void_2x                           ... bench:       3,590 ns/iter (+/- 25)
test bench_op_void_metrics                      ... bench:       5,375 ns/iter (+/- 29)
test bench_op_void_no_side_effects              ... bench:       3,491 ns/iter (+/- 35)
test bench_op_void_nofast                       ... bench:       6,961 ns/iter (+/- 45)
test bench_op_void_nofast_metrics               ... bench:      10,763 ns/iter (+/- 112)
test bench_op_void_nofast_no_side_effects       ... bench:       6,962 ns/iter (+/- 51)

// this pr
running 36 tests
test baseline                                   ... bench:         300 ns/iter (+/- 8)
test bench_op_arraybuffer                       ... bench:       5,776 ns/iter (+/- 309)
test bench_op_bigint                            ... bench:       3,351 ns/iter (+/- 80)
test bench_op_bigint_return                     ... bench:       4,848 ns/iter (+/- 107)
test bench_op_buffer                            ... bench:       3,779 ns/iter (+/- 46)
test bench_op_buffer_jsbuffer                   ... bench:      38,008 ns/iter (+/- 748)
test bench_op_buffer_nofast                     ... bench:      42,417 ns/iter (+/- 923)
test bench_op_external                          ... bench:       3,451 ns/iter (+/- 22)
test bench_op_external_nofast                   ... bench:       8,320 ns/iter (+/- 107)
test bench_op_option_u32                        ... bench:       6,020 ns/iter (+/- 834)
test bench_op_string                            ... bench:      32,722 ns/iter (+/- 1,349)
test bench_op_string_bytestring                 ... bench:      49,294 ns/iter (+/- 789)
test bench_op_string_bytestring_no_side_effects ... bench:      48,040 ns/iter (+/- 1,760)
test bench_op_string_large_1000                 ... bench:     128,966 ns/iter (+/- 2,475)
test bench_op_string_large_1000000              ... bench:     616,682 ns/iter (+/- 5,926)
test bench_op_string_large_utf8_1000            ... bench:   1,935,236 ns/iter (+/- 36,602)
test bench_op_string_large_utf8_1000000         ... bench:   9,848,884 ns/iter (+/- 99,671)
test bench_op_string_onebyte                    ... bench:      23,294 ns/iter (+/- 422)
test bench_op_string_onebyte_large_1000         ... bench:      28,742 ns/iter (+/- 360)
test bench_op_string_onebyte_large_1000000      ... bench:     178,023 ns/iter (+/- 2,295)
test bench_op_string_option_u32                 ... bench:      43,096 ns/iter (+/- 828)
test bench_op_u32                               ... bench:       3,626 ns/iter (+/- 42)
test bench_op_v8_global                         ... bench:      29,646 ns/iter (+/- 514)
test bench_op_v8_global_scope                   ... bench:      30,858 ns/iter (+/- 785)
test bench_op_v8_isolate_nofast                 ... bench:       8,898 ns/iter (+/- 141)
test bench_op_v8_local                          ... bench:       3,937 ns/iter (+/- 39)
test bench_op_v8_local_nofast                   ... bench:       6,996 ns/iter (+/- 85)
test bench_op_v8_local_scope                    ... bench:      13,558 ns/iter (+/- 220)
test bench_op_v8_scope                          ... bench:      12,178 ns/iter (+/- 193)
test bench_op_void                              ... bench:       3,442 ns/iter (+/- 39)
test bench_op_void_2x                           ... bench:       3,543 ns/iter (+/- 86)
test bench_op_void_metrics                      ... bench:       5,531 ns/iter (+/- 44)
test bench_op_void_no_side_effects              ... bench:       3,445 ns/iter (+/- 24)
test bench_op_void_nofast                       ... bench:       6,884 ns/iter (+/- 105)
test bench_op_void_nofast_metrics               ... bench:      10,662 ns/iter (+/- 135)
test bench_op_void_nofast_no_side_effects       ... bench:       6,870 ns/iter (+/- 57)

Main causes for the slow down:

  • in ASCII only and OneByte cases, rusty_v8 still allocates and copies

lucacasonato avatar Oct 25 '24 18:10 lucacasonato