Граф коммитов

119 Коммитов

Автор SHA1 Сообщение Дата
normal 098b0ba572 benchmark/bm_hash_aref_sym*.rb: force static symbols
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-10-09 03:44:12 +00:00
nobu 29329d55ec bm_app_aobench.rb: update links [ci skip]
* 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-16 10:18:53 +00:00
normal 667d502adb benchmark/bm_app_aobench.rb: spelling fix [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-15 07:17:37 +00:00
normal ec475ab32d proc.c (rb_proc_alloc): inline and move to vm.c
* 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-12 20:57:45 +00:00
ko1 2a0cca3c89 * benchmark/bm_app_lc_fizzbuzz.rb: should skip output on benchmark.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47450 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-08 07:08:56 +00:00
ko1 f5ac3ea6e7 * benchmark/bm_app_lc_fizzbuzz.rb: `answer.to_a' does not return
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 07:08:00 +00:00
ko1 628dac10d3 * benchmark/bm_app_lc_fizzbuzz.rb: added.
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-09-08 04:22:58 +00:00
glass 0a22f4c168 * lib/securerandom.rb: use OpenSSL::BN for performance improvement.
* benchmark/bm_securerandom.rb: benchmark script.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47104 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-08-08 11:00:47 +00:00
ko1 9412551ee2 * benchmark/prepare_so_k_nucleotide.rb: use require_relative.
* 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-07-11 02:13:09 +00:00
normal f11db2a605 vm*: doubly-linked list from ccan to manage vm->living_threads
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-10 23:48:51 +00:00
ko1 d467227486 * benchmark/driver.rb: remove debug output and output results into
specified file.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45852 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-07 03:07:10 +00:00
ko1 1ddb9c5322 * benchmark/driver.rb: add '--rawdata-output=[FILE] option to output
raw results into FILE.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45851 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-07 02:57:11 +00:00
ko1 c47d59a0a7 * benchmark/driver.rb: define File::NULL if not defiend and /dev/null
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-05-05 16:11:00 +00:00
normal ef59670a44 st.c: use power-of-two sizes to avoid slow modulo ops
* 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-03-22 23:34:21 +00:00
normal 3d1108e449 benchmark/driver: avoid large alloc in driver process
* 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
2014-01-30 18:48:40 +00:00
charliesome 75f4731f90 * benchmark/bm_so_meteor_contest.rb: [DOC] Fix a few typos
* 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-28 08:25:28 +00:00
a_matsuda fb725a20e2 * benchmark/bm_so_meteor_contest.rb: [DOC] Fix typo
s/accross/across/
[ci skip]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44384 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-24 11:56:10 +00:00
ko1 2ad4a1600b * benchmark/gc/gcbench.rb: check GC::OPTS availability
for not MRI 2.1.0.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44283 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-19 01:49:59 +00:00
glass 2fbe9eacf7 * benchmark/bm_hash_flatten.rb: added. r43896 is about 4 times faster
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-28 10:50:41 +00:00
ko1 b3abb163f4 * benchmark/gc/gcbench.rb: output version description and GC::OPTS.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43622 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-09 15:43:30 +00:00
nobu 71b70f3cdf * properties.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43548 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-06 00:21:05 +00:00
ko1 df6722d9fc * benchmark/bm_vm1_gc_short_lived.rb: added.
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-06 00:17:14 +00:00
eregon adc4bb95f6 * benchmark/gc/gcbench.rb: fix typo of r43543
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43545 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-05 22:27:27 +00:00
ko1 400a9a7bc2 * benchmark/gc/gcbench.rb: add some options to make quiet.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43543 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-05 22:13:08 +00:00
ko1 cecbcc420e * benchmark/gc/gcbench.rb: print HWM (high water mark) if possible.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43495 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-31 16:09:10 +00:00
eregon 3557a5f85e * benchmark/bm_app_answer.rb: revert r42990, benchmark scripts should
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-22 10:01:22 +00:00
nobu 53dfd965e6 * append newline at EOF.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43001 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-20 16:05:17 +00:00
zzak 000f39b4ff * benchmark/bm_app_answer.rb: removed duplicate code [Fixes GH-393]
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-09-20 14:35:32 +00:00
ko1 372272c245 * benchmark/gc/gcbench.rb: fix summary of benchmark result notaton.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41528 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-21 08:57:18 +00:00
ko1 45f7b78d29 * benchmark/gc/gcbench.rb: Do not use GC::Profiler::disable because
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 09:31:51 +00:00
ko1 07b6816583 * benchmark/gc/gcbench.rb: stop GC::Profiler before output results.
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
2013-06-20 09:00:41 +00:00
ko1 1db64a2035 * benchmark/gc/gcbench.rb: don't use __dir__ to make compatible
with ruby 1.9.3.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41487 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 08:25:16 +00:00
ko1 8fbffe61cc * benchmark/bm_app_aobench.rb: use attr_accessor/reader instead of
defining methods.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41486 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 07:58:13 +00:00
nobu 5dad18386e * remove trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41485 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 07:51:05 +00:00
nobu f0361ca416 * properties.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41483 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 07:49:15 +00:00
ko1 8e94c01653 * benchmark/bm_app_aobench.rb: added.
* benchmark/gc/aobench.rb: added.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41482 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 07:47:10 +00:00
nobu e832046b9a * properties.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41481 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 07:31:06 +00:00
ko1 c5c1e8b8d4 * benchmark/bm_so_binary_trees.rb: disable `puts' method
and change iteration parameter to increase execution time.
* benchmark/gc/binarytree.rb: added.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41480 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 07:30:41 +00:00
nobu 0ec4589259 * properties.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41479 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 07:10:06 +00:00
ko1 fe6b76e789 * benchmark/gc/pentomino.rb: added.
Simply load pentomino puzzle in the benchmark/ directory.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41478 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 07:07:46 +00:00
nobu 60051eacac * remove trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41477 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 07:06:05 +00:00
nobu 85797ea0a7 * properties.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41476 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 07:03:15 +00:00
ko1 2802afffd6 * benchmark/gc/redblack.rb: import red black tree benchmark from
https://github.com/jruby/rubybench/blob/master/time/bench_red_black.rb
* benchmark/gc/ring.rb: add a benchmark. This benchmark create many
  old objects.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41475 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 07:01:58 +00:00
nobu ae39bfc5dc * properties.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41474 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 06:21:07 +00:00
ko1 99b10ff471 * benchmark/gc: create a directory to store GC related benchmark.
* benchmark/gc/gcbench.rb: moved from tool/gcbench.rb.
* benchmark/gc/hash(1|2).rb: ditto.
* benchmark/gc/rdoc.rb: ditto.
* benchmark/gc/null.rb: added.
* common.mk: fix rule.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41473 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-06-20 06:18:09 +00:00
charliesome 5d7b5481ca * benchmark/bm_hash_shift.rb: add benchmark for Hash#shift
* hash.c (rb_hash_shift): use st_shift if hash is not being iterated to
  delete element without iterating the whole hash.

* hash.c (shift_i): remove function

* include/ruby/st.h (st_shift): add st_shift function

* st.c (st_shift): ditto

[Bug #8312] [ruby-core:54524] Patch by funny-falcon

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40457 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-04-25 05:03:30 +00:00
ko1 7b918be3d4 * common.mk: specify label `built-ruby'.
* benchmark/driver.rb: quote path.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37858 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-26 09:30:32 +00:00
ko1 2e87867a8f * benchmark/driver.rb: accept multiple `-e'.
You don't need to use `;' separation character.
  [ruby-core:50139] [ruby-trunk - Bug #7380]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37854 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-26 09:19:00 +00:00
ko1 c13f83471a * benchmark/bm_so_nsieve_bits.rb: add an encoding pragma.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37777 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-21 07:15:03 +00:00
eregon ee6cfa9cca benchmark/driver.rb: fix typos and output.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37699 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-17 11:07:05 +00:00