1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/benchmark
Dylan Thacker-Smith b970259044 Stop making a redundant hash copy in Hash#dup (#2489)
* Stop making a redundant hash copy in Hash#dup

It was making a copy of the hash without rehashing, then created an
extra copy of the hash to do the rehashing.  Since rehashing creates
a new copy already, this change just uses that rehashing to make
the copy.

[Bug #16121]

* Remove redundant Check_Type after to_hash

* Fix freeing and clearing destination hash in Hash#initialize_copy

The code was assuming the state of the destination hash based on the
source hash for clearing any existing table on it. If these don't match,
then that can cause the old table to be leaked. This can be seen by
compiling hash.c with `#define HASH_DEBUG 1` and running the following
script, which will crash from a debug assertion.

```ruby
h = 9.times.map { |i| [i, i] }.to_h
h.send(:initialize_copy, {})
```

* Remove dead code paths in rb_hash_initialize_copy

Given that `RHASH_ST_TABLE_P(h)` is defined as `(!RHASH_AR_TABLE_P(h))`
it shouldn't be possible for a hash to be neither of these, so there
is no need for the removed `else if` blocks.

* Share implementation between Hash#replace and Hash#initialize_copy

This also fixes key rehashing for small hashes backed by an array
table for Hash#replace.  This used to be done consistently in ruby
2.5.x, but stopped being done for small arrays in ruby 2.6.x.

This also bring optimization improvements that were done for
Hash#initialize_copy to Hash#replace.

* Add the Hash#dup benchmark
2019-10-21 17:29:21 +09:00
..
gc don't use GC::Profiler on default. 2018-09-28 05:28:12 +00:00
lib Reduce ISeq size of mjit_exec benchmark 2019-09-26 22:13:31 +09:00
other-lang n+1 to include n in range 2019-08-05 09:04:32 +09:00
app_answer.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
app_aobench.rb benchmark/app_aobench.rb: complete commented code to write the image to a file 2019-01-21 12:31:29 +00:00
app_erb.yml benchmark/app_erb.yml: remove unused variable 2018-12-22 01:43:45 +00:00
app_factorial.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
app_fib.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
app_lc_fizzbuzz.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
app_mandelbrot.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
app_pentomino.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
app_raise.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
app_strconcat.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
app_tak.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
app_tarai.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
app_uri.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_flatten.yml Optimize Array#flatten and flatten! for already flattened arrays (#2495) 2019-09-28 01:24:24 +09:00
array_sample_100k_10.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_sample_100k_11.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_sample_100k__1k.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_sample_100k__6k.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_sample_100k__100.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_sample_100k___10k.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_sample_100k___50k.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_shift.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_small_and.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_small_diff.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_small_or.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_sort_block.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_sort_float.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_values_at_int.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
array_values_at_range.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
bighash.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
cgi_escape_html.yml Optimize CGI.escapeHTML by reducing buffer extension 2019-06-05 21:07:04 +09:00
complex_float_add.yml benchmark/complex_float_*.yml: New benchmarks 2019-01-01 12:20:04 +00:00
complex_float_div.yml benchmark/complex_float_*.yml: New benchmarks 2019-01-01 12:20:04 +00:00
complex_float_mul.yml benchmark/complex_float_*.yml: New benchmarks 2019-01-01 12:20:04 +00:00
complex_float_new.yml benchmark/complex_float_*.yml: New benchmarks 2019-01-01 12:20:04 +00:00
complex_float_power.yml benchmark/complex_float_*.yml: New benchmarks 2019-01-01 12:20:04 +00:00
complex_float_sub.yml benchmark/complex_float_*.yml: New benchmarks 2019-01-01 12:20:04 +00:00
dir_empty_p.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
enum_lazy_grep_v_20.rb Adding Enumerator::Lazy#uniq and Enumerator::Lazy#grep_v to proc chaining 2018-08-16 00:58:21 +00:00
enum_lazy_grep_v_50.rb Adding Enumerator::Lazy#uniq and Enumerator::Lazy#grep_v to proc chaining 2018-08-16 00:58:21 +00:00
enum_lazy_grep_v_100.rb Adding Enumerator::Lazy#uniq and Enumerator::Lazy#grep_v to proc chaining 2018-08-16 00:58:21 +00:00
enum_lazy_uniq_20.rb Adding Enumerator::Lazy#uniq and Enumerator::Lazy#grep_v to proc chaining 2018-08-16 00:58:21 +00:00
enum_lazy_uniq_50.rb Adding Enumerator::Lazy#uniq and Enumerator::Lazy#grep_v to proc chaining 2018-08-16 00:58:21 +00:00
enum_lazy_uniq_100.rb Adding Enumerator::Lazy#uniq and Enumerator::Lazy#grep_v to proc chaining 2018-08-16 00:58:21 +00:00
erb_render.yml benchmark: revise ERB benchmarks using YAML syntax 2018-07-10 15:58:52 +00:00
fiber_chain.yml * remove trailing spaces. 2019-07-12 17:57:28 +09:00
file_chmod.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
file_rename.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_aref_dsym.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_aref_dsym_long.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_aref_fix.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_aref_flo.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_aref_miss.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_aref_str.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_aref_sym.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_aref_sym_long.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_dup.yml Stop making a redundant hash copy in Hash#dup (#2489) 2019-10-21 17:29:21 +09:00
hash_flatten.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_ident_flo.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_ident_num.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_ident_obj.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_ident_str.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_ident_sym.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_keys.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_literal_small2.rb Add benchmark for hash small literals 2018-12-06 18:20:11 +00:00
hash_literal_small4.rb Add benchmark for hash small literals 2018-12-06 18:20:11 +00:00
hash_literal_small8.rb Add benchmark for hash small literals 2018-12-06 18:20:11 +00:00
hash_long.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_shift.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_shift_u16.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_shift_u24.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_shift_u32.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_small2.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_small4.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_small8.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_to_proc.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
hash_values.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
int_quo.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
io_copy_stream_write.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
io_copy_stream_write_socket.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
io_file_create.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
io_file_read.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
io_file_write.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
io_nonblock_noex.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
io_nonblock_noex2.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
io_pipe_rw.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
io_select.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
io_select2.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
io_select3.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
irb_color.yml Add a benchmark using IRB::Color 2019-06-01 20:07:50 +09:00
irb_exec.yml Make sure to suppress .irbrc on benchmark 2019-06-10 22:04:52 +09:00
loop_for.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
loop_generator.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
loop_times.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
loop_whileloop.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
loop_whileloop2.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
marshal_dump_flo.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
marshal_dump_load_geniv.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
marshal_dump_load_time.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
match_gt4.rb Reduce ONIG_NREGION from 10 to 4: power of 2 and testing revealed most pattern matches are less than or equal to 4 results 2019-05-07 21:58:55 +09:00
match_small.rb Reduce ONIG_NREGION from 10 to 4: power of 2 and testing revealed most pattern matches are less than or equal to 4 results 2019-05-07 21:58:55 +09:00
mjit_exec_jt2jt.yml Reduce ISeq size of mjit_exec benchmark 2019-09-26 22:13:31 +09:00
mjit_exec_vm2jt.yml Reduce ISeq size of mjit_exec benchmark 2019-09-26 22:13:31 +09:00
mjit_exec_vm2vm.yml Reduce ISeq size of mjit_exec benchmark 2019-09-26 22:13:31 +09:00
nil_p.yml Revert "Revert "Add a specialized instruction for .nil? calls"" 2019-08-02 23:25:38 +09:00
range_last.yml benchmark/range_last.yml: remove needless prelude 2019-01-06 15:46:21 +00:00
README.md benchmark/README.md: skip showing --timeout option [ci skip] 2018-07-11 22:49:48 +00:00
realpath.yml Use realpath(3) instead of custom realpath implementation if available 2019-07-01 11:46:30 -07:00
require.yml Close created files [ci skip] 2019-08-10 11:26:23 +09:00
require_thread.yml Close created files [ci skip] 2019-08-10 11:26:23 +09:00
securerandom.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
so_ackermann.rb delete emacs mode lines [ci skip] 2018-12-27 06:12:09 +00:00
so_array.rb delete emacs mode lines [ci skip] 2018-12-27 06:12:09 +00:00
so_binary_trees.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
so_concatenate.rb delete emacs mode lines [ci skip] 2018-12-27 06:12:09 +00:00
so_count_words.yml delete emacs mode lines [ci skip] 2018-12-27 06:12:09 +00:00
so_exception.rb delete emacs mode lines [ci skip] 2018-12-27 06:12:09 +00:00
so_fannkuch.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
so_fasta.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
so_k_nucleotide.yml benchmark: introduce benchmark_driver.gem 2018-07-08 14:38:05 +00:00
so_lists.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
so_mandelbrot.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
so_matrix.rb delete emacs mode lines [ci skip] 2018-12-27 06:12:09 +00:00
so_meteor_contest.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
so_nbody.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
so_nested_loop.rb delete emacs mode lines [ci skip] 2018-12-27 06:12:09 +00:00
so_nsieve.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
so_nsieve_bits.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
so_object.rb delete emacs mode lines [ci skip] 2018-12-27 06:12:09 +00:00
so_partial_sums.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
so_pidigits.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
so_random.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
so_reverse_complement.yml benchmark: introduce benchmark_driver.gem 2018-07-08 14:38:05 +00:00
so_sieve.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
so_spectralnorm.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
string_capitalize.yml Improve performance of case-conversion methods 2019-05-03 23:59:18 +09:00
string_downcase.yml Improve performance of case-conversion methods 2019-05-03 23:59:18 +09:00
string_index.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
string_scan_re.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
string_scan_str.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
string_split.yml string.c: improve splitting into chars 2019-04-17 05:34:46 +00:00
string_swapcase.yml Improve performance of case-conversion methods 2019-05-03 23:59:18 +09:00
string_upcase.yml Improve performance of case-conversion methods 2019-05-03 23:59:18 +09:00
time_strptime.yml Time.strptime benchmarks 2019-01-07 02:05:21 +00:00
time_subsec.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm1_attr_ivar.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_attr_ivar_set.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_block.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_blockparam.yml benchmark/vm1_*.yml: manual fixes for ugly conversions 2018-07-08 16:35:44 +00:00
vm1_blockparam_call.yml benchmark/vm1_*.yml: manual fixes for ugly conversions 2018-07-08 16:35:44 +00:00
vm1_blockparam_pass.yml benchmark/vm1_*.yml: manual fixes for ugly conversions 2018-07-08 16:35:44 +00:00
vm1_blockparam_yield.yml benchmark/vm1_*.yml: manual fixes for ugly conversions 2018-07-08 16:35:44 +00:00
vm1_const.yml benchmark/vm1_*.yml: manual fixes for ugly conversions 2018-07-08 16:35:44 +00:00
vm1_ensure.yml benchmark/vm1_ensure.yml: rollback loop_count abstraction 2018-07-08 16:46:49 +00:00
vm1_float_simple.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_gc_short_lived.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_gc_short_with_complex_long.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_gc_short_with_long.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_gc_short_with_symbol.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_gc_wb_ary.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_gc_wb_ary_promoted.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_gc_wb_obj.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_gc_wb_obj_promoted.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_ivar.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_ivar_set.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_length.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_lvar_init.yml benchmark/vm1_*.yml: manual fixes for ugly conversions 2018-07-08 16:35:44 +00:00
vm1_lvar_set.yml benchmark/vm1_*.yml: manual fixes for ugly conversions 2018-07-08 16:35:44 +00:00
vm1_neq.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_not.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_rescue.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm1_simplereturn.yml benchmark/vm1_*.yml: manual fixes for ugly conversions 2018-07-08 16:35:44 +00:00
vm1_swap.yml benchmark/vm1_*.yml: manual fixes for ugly conversions 2018-07-08 16:35:44 +00:00
vm1_yield.yml benchmark/vm1_*.yml: abstract away the while loop 2018-07-08 16:28:34 +00:00
vm2_array.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_bigarray.yml benchmark/vm2_*.yml: abstract away the while loop 2018-07-08 17:03:23 +00:00
vm2_bighash.yml benchmark/vm2_*.yml: abstract away the while loop 2018-07-08 17:03:23 +00:00
vm2_case.yml benchmark/vm2_*.yml: abstract away the while loop 2018-07-08 17:03:23 +00:00
vm2_case_lit.yml benchmark/vm2_*.yml: abstract away the while loop 2018-07-08 17:03:23 +00:00
vm2_defined_method.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_dstr.yml benchmark/vm2_*.yml: abstract away the while loop 2018-07-08 17:03:23 +00:00
vm2_eval.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_fiber_allocate.yml Improved fiber benchmarks. Increase number of iterations. 2019-07-12 11:56:51 +12:00
vm2_fiber_count.yml Add note about setting vm.max_map_count for Linux. 2019-07-18 20:54:55 +12:00
vm2_fiber_reuse.yml * remove trailing spaces. 2019-07-12 17:57:28 +09:00
vm2_fiber_reuse_gc.yml Add benchmark to help diagnose performance regression. 2019-07-18 11:13:49 +12:00
vm2_fiber_switch.yml Improved fiber benchmarks. Increase number of iterations. 2019-07-12 11:56:51 +12:00
vm2_freezestring.yml make opt_str_freeze leaf 2018-09-12 03:39:36 +00:00
vm2_method.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_method_missing.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_method_with_block.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_module_ann_const_set.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_module_const_set.yml benchmark/vm2_*.yml: abstract away the while loop 2018-07-08 17:03:23 +00:00
vm2_mutex.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_newlambda.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_poly_method.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_poly_method_ov.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_poly_same_method.yml reuse cc->call 2019-09-19 15:18:10 +09:00
vm2_poly_singleton.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_proc.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_raise1.yml benchmark/vm2_*.yml: abstract away the while loop 2018-07-08 17:03:23 +00:00
vm2_raise2.yml benchmark/vm2_*.yml: abstract away the while loop 2018-07-08 17:03:23 +00:00
vm2_regexp.yml Add a benchmark for opt_regexpmatch2 2019-09-02 13:46:33 +09:00
vm2_send.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_string_literal.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_struct_big_aref_hi.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_struct_big_aref_lo.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_struct_big_aset.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_struct_big_href_hi.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_struct_big_href_lo.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_struct_big_hset.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_struct_small_aref.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_struct_small_aset.yml benchmark/vm2_struct_small_aset.yml: unwrap loop_count 2018-07-08 17:22:58 +00:00
vm2_struct_small_href.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_struct_small_hset.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_super.yml benchmark/vm2_*.yml: fix ugly conversion errors 2018-07-08 17:19:57 +00:00
vm2_unif1.yml benchmark/vm2_*.yml: abstract away the while loop 2018-07-08 17:03:23 +00:00
vm2_zsuper.yml benchmark/vm2_*.yml: abstract away the while loop 2018-07-08 17:03:23 +00:00
vm3_backtrace.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm3_clearmethodcache.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm3_gc.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm3_gc_old_full.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm3_gc_old_immediate.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm3_gc_old_lazy.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm_symbol_block_pass.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm_thread_alive_check.yml Improve benchmarks and tests for threads. 2019-06-19 20:39:10 +12:00
vm_thread_close.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm_thread_condvar1.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm_thread_condvar2.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm_thread_create_join.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm_thread_mutex1.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm_thread_mutex2.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm_thread_mutex3.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm_thread_pass.rb Fix typo in comment [ci skip] 2019-08-10 09:35:28 +09:00
vm_thread_pass_flood.rb Improve benchmarks and tests for threads. 2019-06-19 20:39:10 +12:00
vm_thread_pipe.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm_thread_queue.rb Improve benchmarks and tests for threads. 2019-06-19 20:39:10 +12:00
vm_thread_sized_queue.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm_thread_sized_queue2.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm_thread_sized_queue3.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm_thread_sized_queue4.rb benchmark: drop all bm_ prefix for legacy driver.rb 2018-07-10 13:08:40 +00:00
vm_thread_sleep.yml Improve benchmarks and tests for threads. 2019-06-19 20:39:10 +12:00

ruby/benchmark

This directory has benchmark definitions to be run with benchmark_driver.gem.

Normal usage

Execute gem install benchmark_driver and run a command like:

# Run a benchmark script with the ruby in the $PATH
benchmark-driver benchmark/app_fib.rb

# Run benchmark scripts with multiple Ruby executables or options
benchmark-driver benchmark/*.rb -e /path/to/ruby -e '/path/to/ruby --jit'

# Or compare Ruby versions managed by rbenv
benchmark-driver benchmark/*.rb --rbenv '2.5.1;2.6.0-preview2 --jit'

# You can collect many metrics in many ways
benchmark-driver benchmark/*.rb --runner memory --output markdown

# Some are defined with YAML for complex setup or accurate measurement
benchmark-driver benchmark/*.yml

See also:

Usage: benchmark-driver [options] RUBY|YAML...
    -r, --runner TYPE                Specify runner type: ips, time, memory, once (default: ips)
    -o, --output TYPE                Specify output type: compare, simple, markdown, record (default: compare)
    -e, --executables EXECS          Ruby executables (e1::path1 arg1; e2::path2 arg2;...)
        --rbenv VERSIONS             Ruby executables in rbenv (x.x.x arg1;y.y.y arg2;...)
        --repeat-count NUM           Try benchmark NUM times and use the fastest result or the worst memory usage
        --repeat-result TYPE         Yield "best", "average" or "worst" result with --repeat-count (default: best)
        --bundler                    Install and use gems specified in Gemfile
        --filter REGEXP              Filter out benchmarks with given regexp
        --run-duration SECONDS       Warmup estimates loop_count to run for this duration (default: 3)
    -v, --verbose                    Verbose mode. Multiple -v options increase visilibity (max: 2)

make benchmark

Using make benchmark, make update-benchmark-driver automatically downloads the supported version of benchmark_driver, and it runs benchmarks with the downloaded benchmark_driver.

# Run all benchmarks with the ruby in the $PATH and the built ruby
make benchmark

# Or compare with specific ruby binary
make benchmark COMPARE_RUBY="/path/to/ruby --jit"

# Run vm1 benchmarks
make benchmark ITEM=vm1

# Run some limited benchmarks in ITEM-matched files
make benchmark ITEM=vm1 OPTS=--filter=block

# You can specify the benchmark by an exact filename instead of using the default argument:
# ARGS = $$(find $(srcdir)/benchmark -maxdepth 1 -name '*$(ITEM)*.yml' -o -name '*$(ITEM)*.rb')
make benchmark ARGS=../benchmark/erb_render.yml

# You can specify any option via $OPTS
make benchmark OPTS="--help"

# With `make benchmark`, some special runner plugins are available:
#   -r peak, -r size, -r total, -r utime, -r stime, -r cutime, -r cstime
make benchmark ITEM=vm2_bigarray OPTS="-r peak"