summaryrefslogtreecommitdiff
path: root/benchmark
AgeCommit message (Collapse)Author
2015-07-29new benchmarks for hashing dsyms and fixnumsnormal
* benchmark/bm_hash_aref_dsym.rb: new benchmark * benchmark/bm_hash_aref_dsym_long.rb: ditto * benchmark/bm_hash_aref_fix.rb: ditto [ruby-core:70129] [Bug #11396] pointed out we need to consider more cases for hashing. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51435 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-02delay `exception: false' checks for minor speedupnormal
Delay hash lookups until we are about to hit an exception. This gives a minor speedup ratio of 2-3% in the new bm_io_nonblock_noex benchmark as well as reducing code. * benchmark/bm_io_nonblock_noex.rb: new benchmark * ext/openssl/ossl_ssl.c (no_exception_p): new function (ossl_start_ssl): adjust for no_exception_p (ossl_ssl_connect): adjust ossl_start_ssl call (ossl_ssl_connect_nonblock): ditto (ossl_ssl_accept): ditto (ossl_ssl_accept_nonblock): ditto (ossl_ssl_read_internal): adjust for no_exception_p (ossl_ssl_write_internal): ditto (ossl_ssl_write): adjust ossl_write_internal call (ossl_ssl_write_nonblock): ditto * ext/stringio/stringio.c (strio_read_nonblock): delay exception check * io.c (no_exception_p): new function (io_getpartial): call no_exception_p (io_readpartial): adjust for io_getpartial (get_kwargs_exception): remove (io_read_nonblock): adjust for io_getpartial, check no_exception_p on EOF (io_write_nonblock): call no_exception_p (rb_io_write_nonblock): do not check `exception: false' (argf_getpartial): adjust for io_getpartial [ruby-core:69778] [Feature #11318] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51113 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-06-22add benchmarks for struct[:name]normal
* benchmark/bm_vm2_struct_big_href_hi.rb: new benchmark * benchmark/bm_vm2_struct_big_href_lo.rb: ditto * benchmark/bm_vm2_struct_big_hset.rb: ditto * benchmark/bm_vm2_struct_small_href.rb: ditto * benchmark/bm_vm2_struct_small_hset.rb: ditto Thanks to Sokolov Yura aka funny_falcon <funny.falcon@gmail.com> in https://bugs.ruby-lang.org/issues/10585 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50996 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-05-30variable.c: avoid compatibility table with generic ivarsnormal
This recovers and improves performance of Marshal.dump/load on Time objects compared to when we implemented generic ivars entirely using st_table. This also recovers some performance on other generic ivar objects, but does not bring bring Marshal.dump/load performance up to previous speeds. benchmark results: minimum results in each 10 measurements. Execution time (sec) name trunk geniv after marshal_dump_flo 0.343 0.334 0.335 marshal_dump_load_geniv 0.487 0.527 0.495 marshal_dump_load_time 1.262 1.401 1.257 Speedup ratio: compare with the result of `trunk' (greater is better) name geniv after marshal_dump_flo 1.026 1.023 marshal_dump_load_geniv 0.925 0.985 marshal_dump_load_time 0.901 1.004 * include/ruby/intern.h (rb_generic_ivar_table): deprecate * internal.h (rb_attr_delete): declare * marshal.c (has_ivars): use rb_ivar_foreach (w_ivar): ditto (w_object): update for new interface * time.c (time_mload): use rb_attr_delete * variable.c (generic_ivar_delete): implement (rb_ivar_delete): ditto (rb_attr_delete): ditto [ruby-core:69323] [Feature #11170] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50680 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-04-20* benchmark/bm_so_meteor_contest.rb: fix a typo.hsbt
[fix GH-876][ci skip] Patch by @davydovanton * tool/bisect.sh: ditto. * tool/update-deps: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50350 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-25bm_hash_aref_flo.rb: fix datanobu
* benchmark/bm_hash_aref_flo.rb: make more realistic data. [ruby-core:68632] [[Bug #10999] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50084 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-18* benchmark/bm_vm1_gc_wb_ary.rb: run GC to finish "marking" phase.ko1
* benchmark/bm_vm1_gc_wb_obj.rb: ditto. * benchmark/bm_vm1_gc_wb_ary_promoted.rb: add parameter full_mark: false to invoke only minor GC. * benchmark/bm_vm1_gc_wb_obj_promoted.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50002 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-17* benchmark/bm_vm1_gc_wb_ary(_promoted).rb: separate fastpath andko1
slowpath for WB. Before this change bm_vm1_gc_wb_ary.rb tried to check the performance for WB slowpath (making a reference from oldobj to newobj). However, from Ruby 2.2, 3 GCs are needed to promote new objects because only 3 age objects are promted objects. To compare fastpath and slowpath, introduce new "promoted" version benchmark. bm_vm1_gc_wb_ary.rb is for fastpath and bm_vm1_gc_wb_ary_promoted.rb is for slowpath. * benchmark/bm_vm1_gc_wb_obj(_promtoed).rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49985 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-06driver.rb: load-rawdatanobu
* benchmark/driver.rb: add --load-rawdata option to load dumped rawdata and just output it without actual benchmark. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49869 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-06driver.rb: rawdata formatnobu
* benchmark/driver.rb (show_results): dump the rawdata in some formats, yaml, json, and pretty_inspect. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49868 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-05driver.rb: name widthnobu
* benchmark/driver.rb (BenchmarkDriver#adjusted_results): calculate max width of names at last. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49856 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-05driver.rb: fix indexnobu
* benchmark/driver.rb (show_results): fix index of results. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49854 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-05driver.rb: plain text tablenobu
* benchmark/driver.rb (show_results): support plain text style table format output. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49850 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-05driver.rb: suffixnobu
* benchmark/driver.rb: add suffix to default output file name. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49849 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-05driver.rb: MarkDown tablenobu
* benchmark/driver.rb (show_results): support MarkDown style table format output. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49846 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-01-23benchmark/bm_marshal_dump_flo.rb: new benchmark for [Bug #10761]normal
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49387 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-01-22fix flonum hashing regression from r45384normal
* st.c (st_numhash): mix float value for flonum * hash.c (rb_any_hash): ditto * benchmark/bm_hash_aref_flo.rb: new benchmark * benchmark/bm_hash_ident_flo.rb: ditto [Bug #10761] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49376 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-01-03* array.c: Improve performance of Array#shift. use shared instead ofhsbt
MEMMOVE if with arguments. Patch by @ksss [fix GH-537] * test/ruby/test_array.rb: ditto. * benchmark/bm_array_shift.rb: Added benchmark of GH-537 issue. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49114 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-12-09struct: avoid all O(n) behavior on accessnormal
This avoids O(n) on lookups with structs over 10 members. This also avoids O(n) behavior on all assignments on Struct members. Members 0..9 still use existing C methods to read in O(1) time Benchmark results: vm2_struct_big_aref_hi* 1.305 vm2_struct_big_aref_lo* 1.157 vm2_struct_big_aset* 3.306 vm2_struct_small_aref* 1.015 vm2_struct_small_aset* 3.273 Note: I chose use loading instructions from an array instead of writing directly to linked-lists in compile.c for ease-of-maintainability. We may move the method definitions to prelude.rb-like files in the future. I have also tested this patch with the following patch to disable the C ref_func methods and ensured the test suite and rubyspec works --- a/struct.c +++ b/struct.c @@ -209,7 +209,7 @@ setup_struct(VALUE nstr, VALUE members) ID id = SYM2ID(ptr_members[i]); VALUE off = LONG2NUM(i); - if (i < N_REF_FUNC) { + if (0 && i < N_REF_FUNC) { rb_define_method_id(nstr, id, ref_func[i], 0); } else { * iseq.c (rb_method_for_self_aref, rb_method_for_self_aset): new methods to generate bytecode for struct.c [Feature #10575] * struct.c (rb_struct_ref, rb_struct_set): remove (define_aref_method, define_aset_method): new functions (setup_struct): use new functions * test/ruby/test_struct.rb: add test for struct >10 members * benchmark/bm_vm2_struct_big_aref_hi.rb: new benchmark * benchmark/bm_vm2_struct_big_aref_lo.rb: ditto * benchmark/bm_vm2_struct_big_aset.rb: ditto * benchmark/bm_vm2_struct_small_aref.rb: ditto * benchmark/bm_vm2_struct_small_aset.rb: ditto git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48748 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-09benchmark/bm_hash_aref_sym*.rb: force static symbolsnormal
Dynamic symbols hash more slowly because they need extra method dispatch in rb_any_hash. I am not sure if dynamic symbols are a realistic use case as hash keys, so this commit only restores performance when comparing against versions of Ruby which lack dsyms. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47854 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-16bm_app_aobench.rb: update links [ci skip]nobu
* benchmark/bm_app_aobench.rb: update outdated links to the original program. [ruby-dev:48550] [Feature #10247] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47603 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-15benchmark/bm_app_aobench.rb: spelling fix [ci skip]normal
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-12proc.c (rb_proc_alloc): inline and move to vm.cnormal
* proc.c (rb_proc_alloc): inline and move to vm.c (rb_proc_wrap): new wrapper function used by rb_proc_alloc (proc_dup): simplify alloc + copy + wrap operation [ruby-core:64994] * vm.c (rb_proc_alloc): new inline function (rb_vm_make_proc): call rb_proc_alloc * vm_core.h: remove rb_proc_alloc, add rb_proc_wrap * benchmark/bm_vm2_newlambda.rb: short test to show difference First we allocate and populate an rb_proc_t struct inline to avoid unnecessary zeroing of the large struct. Inlining speeds up callers as this takes many parameters to ensure correctness. We then call the new rb_proc_wrap function to create the object. rb_proc_wrap - wraps a rb_proc_t pointer as a Ruby object, but we only use it inside rb_proc_alloc. We must call this before the compiler may clobber VALUE parameters passed to rb_proc_alloc. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47562 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-08* benchmark/bm_app_lc_fizzbuzz.rb: should skip output on benchmark.ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47450 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-08* benchmark/bm_app_lc_fizzbuzz.rb: `answer.to_a' does not returnko1
a string, but an array. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47449 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-08* benchmark/bm_app_lc_fizzbuzz.rb: added.ko1
This program is described closely in "Understanding Computation" chapter 6 by Tom Stuart. <http://computationbook.com/> Japanese translation will be published soon. <http://www.oreilly.co.jp/books/9784873116976/> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47447 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-08-08* lib/securerandom.rb: use OpenSSL::BN for performance improvement.glass
* benchmark/bm_securerandom.rb: benchmark script. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47104 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-11* benchmark/prepare_so_k_nucleotide.rb: use require_relative.ko1
* benchmark/prepare_so_reverse_complement.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46779 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-10vm*: doubly-linked list from ccan to manage vm->living_threadsnormal
A doubly-linked list for tracking living threads guarantees constant-time insert/delete performance with no corner cases of a hash table. I chose this ccan implementation of doubly-linked lists over the BSD sys/queue.h implementation since: 1) insertion and removal are both branchless 2) locality is improved if a struct may be a member of multiple lists (0002 patch in Feature 9632 will introduce a secondary list for waiting FDs) This also increases cache locality during iteration: improving performance in a new IO#close benchmark with many sleeping threads while still scanning the same number of threads. vm_thread_close 1.762 * vm_core.h (rb_vm_t): list_head and counter for living_threads (rb_thread_t): vmlt_node for living_threads linkage (rb_vm_living_threads_init): new function wrapper (rb_vm_living_threads_insert): ditto (rb_vm_living_threads_remove): ditto * vm.c (rb_vm_living_threads_foreach): new function wrapper * thread.c (terminate_i, thread_start_func_2, thread_create_core, thread_fd_close_i, thread_fd_close): update to use new APIs * vm.c (vm_mark_each_thread_func, rb_vm_mark, ruby_vm_destruct, vm_memsize, vm_init2, Init_VM): ditto * vm_trace.c (clear_trace_func_i, rb_clear_trace_func): ditto * benchmark/bm_vm_thread_close.rb: added to show improvement * ccan/build_assert/build_assert.h: added as a dependency of list.h * ccan/check_type/check_type.h: ditto * ccan/container_of/container_of.h: ditto * ccan/licenses/BSD-MIT: ditto * ccan/licenses/CC0: ditto * ccan/str/str.h: ditto (stripped of unused macros) * ccan/list/list.h: ditto * common.mk: add CCAN_LIST_INCLUDES [ruby-core:61871][Feature 9632 (part 1)] Apologies for the size of this commit, but I think a good doubly-linked list will be useful for future features, too. This may be used to add ordering to a container_of-based hash table to preserve compatibility if required (e.g. feature 9614). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-07* benchmark/driver.rb: remove debug output and output results intoko1
specified file. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45852 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-07* benchmark/driver.rb: add '--rawdata-output=[FILE] option to outputko1
raw results into FILE. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45851 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-05* benchmark/driver.rb: define File::NULL if not defiend and /dev/nullko1
is available to run benchmark driver on ruby 1.9.2. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45832 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-03-22st.c: use power-of-two sizes to avoid slow modulo opsnormal
* st.c (hash_pos): use bitwise AND to avoid slow modulo op (new_size): power-of-two sizes for hash_pos change (st_numhash): adjust for common keys due to lack of prime modulo [Feature #9425] * hash.c (rb_any_hash): right shift for symbols * benchmark/bm_hash_aref_miss.rb: added to show improvement * benchmark/bm_hash_aref_sym_long.rb: ditto * benchmark/bm_hash_aref_str.rb: ditto * benchmark/bm_hash_aref_sym.rb: ditto * benchmark/bm_hash_ident_num.rb: added to prevent regression * benchmark/bm_hash_ident_obj.rb: ditto * benchmark/bm_hash_ident_str.rb: ditto * benchmark/bm_hash_ident_sym.rb: ditto git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45384 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-01-30benchmark/driver: avoid large alloc in driver processnormal
* benchmark/driver: avoid large alloc in driver process [ruby-core:59869] [Bug #9430] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44772 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-28* benchmark/bm_so_meteor_contest.rb: [DOC] Fix a few typoscharliesome
* ext/fiddle/lib/fiddle/import.rb: ditto * ext/psych/lib/psych.rb: ditto * ext/psych/lib/psych/nodes/sequence.rb: ditto * ext/tk/lib/multi-tk.rb: ditto * ext/tk/lib/tcltk.rb: ditto Closes GH-490 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44451 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-24* benchmark/bm_so_meteor_contest.rb: [DOC] Fix typoa_matsuda
s/accross/across/ [ci skip] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44384 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-19* benchmark/gc/gcbench.rb: check GC::OPTS availabilityko1
for not MRI 2.1.0. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44283 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-28* benchmark/bm_hash_flatten.rb: added. r43896 is about 4 times fasterglass
than 2.0.0p353. * benchmark/bm_hash_keys.rb: added. r43896 is about 5 times faster than 2.0.0p353. * benchmark/bm_hash_values.rb: added. r43896 is about 5 times faster than 2.0.0p353. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43898 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-09* benchmark/gc/gcbench.rb: output version description and GC::OPTS.ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43622 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-06* properties.nobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43548 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-06* benchmark/bm_vm1_gc_short_lived.rb: added.ko1
These GC benchmarks do not reflect practical applications. They are only for tuning. * benchmark/bm_vm1_gc_short_with_complex_long.rb: added. * benchmark/bm_vm1_gc_short_with_long.rb: added. * benchmark/bm_vm1_gc_short_with_symbol.rb: added. * benchmark/bm_vm1_gc_wb_ary.rb: added. * benchmark/bm_vm1_gc_wb_obj.rb: added. * benchmark/bm_vm_thread_queue.rb: added. Thie benchmark is added to know how fast C verion of thread.so. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43547 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-05* benchmark/gc/gcbench.rb: fix typo of r43543eregon
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43545 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-05* benchmark/gc/gcbench.rb: add some options to make quiet.ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43543 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-31* benchmark/gc/gcbench.rb: print HWM (high water mark) if possible.ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43495 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-22* benchmark/bm_app_answer.rb: revert r42990, benchmark scripts shoulderegon
be self-contained and avoid dependencies, especially such small one. See https://github.com/ruby/ruby/pull/393#issuecomment-24861301. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43012 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-20* append newline at EOF.nobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43001 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-20* benchmark/bm_app_answer.rb: removed duplicate code [Fixes GH-393]zzak
https://github.com/ruby/ruby/pull/393 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42990 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21* benchmark/gc/gcbench.rb: fix summary of benchmark result notaton.ko1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41528 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20* benchmark/gc/gcbench.rb: Do not use GC::Profiler::disable becauseko1
GC::Profiler::disable prohibit to access profiling data. It should be spec bug. Skip GC::Profiler::report if RUBY_VERSION < '2.0.0' git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41490 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20* benchmark/gc/gcbench.rb: stop GC::Profiler before output results.ko1
Generating GC::Profiler result under profiling causes infinite loop. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e