mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
02b52b2733
Simply use DISPATCH_ORIGINAL_INSN instead of rb_funcall. This is, when possible, overall performant because method dispatch results are cached inside of CALL_CACHE. Should also be good for JIT. ---- trunk: ruby 2.6.0dev (2018-09-12 trunk 64689) [x86_64-darwin15] ours: ruby 2.6.0dev (2018-09-12 leaf-insn 64688) [x86_64-darwin15] last_commit=make opt_str_freeze leaf Calculating ------------------------------------- trunk ours vm2_freezestring 5.440M 31.411M i/s - 6.000M times in 1.102968s 0.191017s Comparison: vm2_freezestring ours: 31410864.5 i/s trunk: 5439865.4 i/s - 5.77x slower git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64690 b2dd03c8-39d4-4d8f-98ff-823fe69b080e |
||
---|---|---|
.. | ||
gc | ||
lib/benchmark_driver | ||
other-lang | ||
app_answer.rb | ||
app_aobench.rb | ||
app_erb.yml | ||
app_factorial.rb | ||
app_fib.rb | ||
app_lc_fizzbuzz.rb | ||
app_mandelbrot.rb | ||
app_pentomino.rb | ||
app_raise.rb | ||
app_strconcat.rb | ||
app_tak.rb | ||
app_tarai.rb | ||
app_uri.rb | ||
array_sample_100k_10.rb | ||
array_sample_100k_11.rb | ||
array_sample_100k__1k.rb | ||
array_sample_100k__6k.rb | ||
array_sample_100k__100.rb | ||
array_sample_100k___10k.rb | ||
array_sample_100k___50k.rb | ||
array_shift.rb | ||
array_small_and.rb | ||
array_small_diff.rb | ||
array_small_or.rb | ||
array_sort_block.rb | ||
array_sort_float.rb | ||
array_values_at_int.rb | ||
array_values_at_range.rb | ||
bighash.rb | ||
dir_empty_p.rb | ||
enum_lazy_grep_v_20.rb | ||
enum_lazy_grep_v_50.rb | ||
enum_lazy_grep_v_100.rb | ||
enum_lazy_uniq_20.rb | ||
enum_lazy_uniq_50.rb | ||
enum_lazy_uniq_100.rb | ||
erb_render.yml | ||
file_chmod.rb | ||
file_rename.rb | ||
hash_aref_dsym.rb | ||
hash_aref_dsym_long.rb | ||
hash_aref_fix.rb | ||
hash_aref_flo.rb | ||
hash_aref_miss.rb | ||
hash_aref_str.rb | ||
hash_aref_sym.rb | ||
hash_aref_sym_long.rb | ||
hash_flatten.rb | ||
hash_ident_flo.rb | ||
hash_ident_num.rb | ||
hash_ident_obj.rb | ||
hash_ident_str.rb | ||
hash_ident_sym.rb | ||
hash_keys.rb | ||
hash_long.rb | ||
hash_shift.rb | ||
hash_shift_u16.rb | ||
hash_shift_u24.rb | ||
hash_shift_u32.rb | ||
hash_small2.rb | ||
hash_small4.rb | ||
hash_small8.rb | ||
hash_to_proc.rb | ||
hash_values.rb | ||
int_quo.rb | ||
io_copy_stream_write.rb | ||
io_copy_stream_write_socket.rb | ||
io_file_create.rb | ||
io_file_read.rb | ||
io_file_write.rb | ||
io_nonblock_noex.rb | ||
io_nonblock_noex2.rb | ||
io_pipe_rw.rb | ||
io_select.rb | ||
io_select2.rb | ||
io_select3.rb | ||
loop_for.rb | ||
loop_generator.rb | ||
loop_times.rb | ||
loop_whileloop.rb | ||
loop_whileloop2.rb | ||
marshal_dump_flo.rb | ||
marshal_dump_load_geniv.rb | ||
marshal_dump_load_time.rb | ||
README.md | ||
require.yml | ||
require_thread.yml | ||
securerandom.rb | ||
so_ackermann.rb | ||
so_array.rb | ||
so_binary_trees.rb | ||
so_concatenate.rb | ||
so_count_words.yml | ||
so_exception.rb | ||
so_fannkuch.rb | ||
so_fasta.rb | ||
so_k_nucleotide.yml | ||
so_lists.rb | ||
so_mandelbrot.rb | ||
so_matrix.rb | ||
so_meteor_contest.rb | ||
so_nbody.rb | ||
so_nested_loop.rb | ||
so_nsieve.rb | ||
so_nsieve_bits.rb | ||
so_object.rb | ||
so_partial_sums.rb | ||
so_pidigits.rb | ||
so_random.rb | ||
so_reverse_complement.yml | ||
so_sieve.rb | ||
so_spectralnorm.rb | ||
string_index.rb | ||
string_scan_re.rb | ||
string_scan_str.rb | ||
time_subsec.rb | ||
vm1_attr_ivar.yml | ||
vm1_attr_ivar_set.yml | ||
vm1_block.yml | ||
vm1_blockparam.yml | ||
vm1_blockparam_call.yml | ||
vm1_blockparam_pass.yml | ||
vm1_blockparam_yield.yml | ||
vm1_const.yml | ||
vm1_ensure.yml | ||
vm1_float_simple.yml | ||
vm1_gc_short_lived.yml | ||
vm1_gc_short_with_complex_long.yml | ||
vm1_gc_short_with_long.yml | ||
vm1_gc_short_with_symbol.yml | ||
vm1_gc_wb_ary.yml | ||
vm1_gc_wb_ary_promoted.yml | ||
vm1_gc_wb_obj.yml | ||
vm1_gc_wb_obj_promoted.yml | ||
vm1_ivar.yml | ||
vm1_ivar_set.yml | ||
vm1_length.yml | ||
vm1_lvar_init.yml | ||
vm1_lvar_set.yml | ||
vm1_neq.yml | ||
vm1_not.yml | ||
vm1_rescue.yml | ||
vm1_simplereturn.yml | ||
vm1_swap.yml | ||
vm1_yield.yml | ||
vm2_array.yml | ||
vm2_bigarray.yml | ||
vm2_bighash.yml | ||
vm2_case.yml | ||
vm2_case_lit.yml | ||
vm2_defined_method.yml | ||
vm2_dstr.yml | ||
vm2_eval.yml | ||
vm2_fiber_switch.yml | ||
vm2_freezestring.yml | ||
vm2_method.yml | ||
vm2_method_missing.yml | ||
vm2_method_with_block.yml | ||
vm2_module_ann_const_set.yml | ||
vm2_module_const_set.yml | ||
vm2_mutex.yml | ||
vm2_newlambda.yml | ||
vm2_poly_method.yml | ||
vm2_poly_method_ov.yml | ||
vm2_poly_singleton.yml | ||
vm2_proc.yml | ||
vm2_raise1.yml | ||
vm2_raise2.yml | ||
vm2_regexp.yml | ||
vm2_send.yml | ||
vm2_string_literal.yml | ||
vm2_struct_big_aref_hi.yml | ||
vm2_struct_big_aref_lo.yml | ||
vm2_struct_big_aset.yml | ||
vm2_struct_big_href_hi.yml | ||
vm2_struct_big_href_lo.yml | ||
vm2_struct_big_hset.yml | ||
vm2_struct_small_aref.yml | ||
vm2_struct_small_aset.yml | ||
vm2_struct_small_href.yml | ||
vm2_struct_small_hset.yml | ||
vm2_super.yml | ||
vm2_unif1.yml | ||
vm2_zsuper.yml | ||
vm3_backtrace.rb | ||
vm3_clearmethodcache.rb | ||
vm3_gc.rb | ||
vm3_gc_old_full.rb | ||
vm3_gc_old_immediate.rb | ||
vm3_gc_old_lazy.rb | ||
vm_symbol_block_pass.rb | ||
vm_thread_alive_check1.rb | ||
vm_thread_close.rb | ||
vm_thread_condvar1.rb | ||
vm_thread_condvar2.rb | ||
vm_thread_create_join.rb | ||
vm_thread_mutex1.rb | ||
vm_thread_mutex2.rb | ||
vm_thread_mutex3.rb | ||
vm_thread_pass.rb | ||
vm_thread_pass_flood.rb | ||
vm_thread_pipe.rb | ||
vm_thread_queue.rb | ||
vm_thread_sized_queue.rb | ||
vm_thread_sized_queue2.rb | ||
vm_thread_sized_queue3.rb | ||
vm_thread_sized_queue4.rb |
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"