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

403 Коммитов

Автор SHA1 Сообщение Дата
mrkn d41fb6ce0b benchmark/range_last.yml: remove needless prelude
[ci skip]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66740 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-06 15:46:21 +00:00
mrkn bf6584b5d0 benchmark/range_last.yml: add benchmark cases
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66733 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-06 00:46:35 +00:00
mrkn 56a6dd66d4 benchmark/range_last.yml: add a benchmark of Range#last
[ci skip]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66721 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-05 10:07:40 +00:00
mrkn 8d473272db benchmark/complex_float_*.yml: New benchmarks
Add new benchmark scripts for binary operations of Complex with float
components.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66680 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-01 12:20:04 +00:00
shyouhei bc64df876e delete emacs mode lines [ci skip]
These settings are now covered by .dir-locals.el.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66584 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-27 06:12:09 +00:00
k0kubun 17ca870a4d benchmark/app_erb.yml: remove unused variable
3efcb74036 (r31762996)

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66490 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-22 01:43:45 +00:00
tenderlove bf41340ebb Add benchmark for hash small literals
Co-Authored-By: Krzysztof Rybka <krzysztof.rybka@gmail.com>

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-06 18:20:11 +00:00
samuel 5547c65bdf Rename fiber chain benchmark.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65859 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-20 10:17:08 +00:00
svn b58dc42abb * remove trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65852 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-20 10:16:35 +00:00
samuel 20f1c6c185 Remove `Benchmark` times.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65851 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-20 10:16:34 +00:00
samuel 9a324cf9cc Better benchmark name.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65845 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-20 10:13:51 +00:00
svn 3f0ae69186 * remove trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65844 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-20 10:09:55 +00:00
samuel 12ae8c0813 Fix broken benchmark
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65843 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-20 10:09:53 +00:00
svn 635dd3408f * remove trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65842 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-20 10:06:59 +00:00
samuel 995f6ee102 Fix code climate cognitive complexity issue
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65841 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-20 10:06:58 +00:00
svn acd84d3208 * remove trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65837 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-20 09:59:19 +00:00
samuel 748c497a6d Rewrite fiber benchmark
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65836 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-20 09:59:18 +00:00
ko1 f251ce9f48 don't use GC::Profiler on default.
* benchmark/gc/gcbench.rb: disable GC::Profiler on default.
  add -p option instead.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64872 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-09-28 05:28:12 +00:00
ko1 cebd2c4aba add small utility for benchmarking.
* benchmark/lib/load.rb: add small utility which requires
  benchmark-driver.rb. You can load this file and can
  use benchmark-driver.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64870 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-09-28 03:32:49 +00:00
shyouhei 02b52b2733 make opt_str_freeze leaf
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
2018-09-12 03:39:36 +00:00
nobu 7d6a26f2a1 Adding Enumerator::Lazy#uniq and Enumerator::Lazy#grep_v to proc chaining
[Feature #14994]

[Fix GH-1930]

From: Anmol Chopra <chopraanmol1@gmail.com>

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64385 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-08-16 00:58:21 +00:00
k0kubun 706d266496 benchmark/README.md: skip showing --timeout option [ci skip]
because it's only available for limited platforms for now.
I'll make it portable and show it later.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63954 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-11 22:49:48 +00:00
k0kubun 3e93bf3b46 common.mk: upgrade benchmark_driver
benchmark/README.md: fix help output, which is changed on v0.14.6.
Especially `e1::path1,arg1,...; e2::path2,arg2` part was wrong since `,`
can't be used to split arguments anymore.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63945 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-11 00:34:32 +00:00
k0kubun 1053c3d4bf benchmark/README.md: some are defined with YAML [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63944 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-10 23:56:57 +00:00
k0kubun fdd7f57b97 benchmark/README.md: fix typo [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63942 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-10 16:03:51 +00:00
k0kubun 3efcb74036 benchmark: revise ERB benchmarks using YAML syntax
to improve the accuracy of measurement by stop using block.

benchmark/app_erb.rb -> benchmark/app_erb.yml: renamed and revised
benchmark/erb_render.rb -> benchmark/erb_render.yml: ditto

benchmark/README.md: follow renames

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63941 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-10 15:58:52 +00:00
k0kubun 498487ec2a benchmark/README.md: erb_render is no longer yml but rb [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63940 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-10 15:51:29 +00:00
k0kubun 301cb9ea7c benchmark/README.md: wording consistency in one sentence [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63939 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-10 15:49:42 +00:00
k0kubun 5d35664ad6 output/driver.rb: add output plugin to reproduce
the original behavior of benchmark/driver.rb.
Probably I won't use this but this is requested by ko1.

Use this with:
make benchmark OPTS="-o driver"

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-10 15:44:45 +00:00
k0kubun 020bb75808 revert r63899
this is no longer needed due to r63926

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63936 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-10 15:06:59 +00:00
k0kubun f328fe40b3 benchmark_driver/runner: add runners for metrics
supported by legacy benchmark/driver.rb.

benchmark/README.md: document them

common.mk: update benchmark_driver to correct 0.0 output and to fix
spacing format of `-o simple` and `-o markdown`.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63933 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-10 15:01:27 +00:00
k0kubun 79a8c10b0b runner/size.rb: fix metric passed to output
runner/peak.rb: ditto

This is needed to make commands like `make -C .ruby-svn benchmark
ITEM=erb OPTS="-r size -o simple"` succeed.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63932 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-10 14:16:57 +00:00
k0kubun 34eed0cd47 benchmark/README.md: add help output [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63931 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-10 13:41:13 +00:00
k0kubun 59ec265e33 benchmark/README.md: don't recommend alias installation [ci skip]
benchmark_driver is the official way to install benchmark_driver.
benchmark-driver is just an alias for it.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63930 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-10 13:36:44 +00:00
k0kubun 433af16167 benchmark: drop all bm_ prefix for legacy driver.rb
benchmark/*.rb is only benchmarks now. We don't need prefixes.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63928 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-10 13:08:40 +00:00
k0kubun 8068d34cfe Revert "benchmark/*.yml: convert from benchmark/bm_*.rb"
This reverts r63900.

Having single-execution benchmark as a normal Ruby script is preferred
by ko1. I'm not a big fan of having inconsistent benchmark formats, but
I can understand some benefits of it.

common.mk: remove obsolsted benchmark-each PHONY declaration, support
running Ruby scripts added by this commit.

README.md: follow ARGS change

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63926 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-10 13:05:29 +00:00
k0kubun 12a38cbac0 benchmark: resurrect peak / size metrics
by adding runner plugins for them.

benchmark/lib/benchmark_driver/runner/peak.rb: added peak runner plugin
benchmark/lib/benchmark_driver/runner/size.rb: added size runner plugin
common.mk: allow using them

benchmark/memory_wrapper.rb: deleted in favor of those runner plugins

benchmark/README.md: document them

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63924 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-10 12:14:04 +00:00
k0kubun 443773836e benchmark/README.md: fix -e interface for v0.14 [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63919 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-09 16:43:42 +00:00
k0kubun 7bed459a26 benchmark/driver.rb: fully obsolete this
in favor of just using benchmark_driver.gem.

common.mk: The new `make benchmark` covers the both usages for old `make
benchmark` and old `make benchmark-each`. So `make benchmark-each` is
dropped now.

benchmark/README.md: Explain its details

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63918 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-09 16:31:35 +00:00
k0kubun 5b9ff71077 common.mk: upgrade benchmark_driver to v0.14
benchmark/driver.rb: deal with breaking changes which are actually
introduced for this driver.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63916 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-09 15:45:02 +00:00
k0kubun 6c4e05d2d8 file_rename.yml: allow running this on mswin/mingw
Suggested by MSP-Grep:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/87883

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63914 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-09 13:20:25 +00:00
k0kubun 14153a9bab app_pentominio.yml: drop unnecessary prelude
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-09 12:50:50 +00:00
k0kubun 2a12b82dcd benchmark/driver.rb: make this more similar
to original benchmark-driver command.

I'm going to add some runner plugins to resurrect metrics which were
originally supported by benchmark/driver.rb...

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63906 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 18:33:43 +00:00
k0kubun 2cab2fc8b1 benchmark/README.md: [ci skip] change syntax highlight
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63905 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 18:10:14 +00:00
k0kubun 8b0158671b benchmark/README.md: [ci skip] write documentation
about this directory

benchmark/driver.rb: ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63903 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 18:08:26 +00:00
k0kubun dc8327d79a benchmark/driver.rb: drop legacy Ruby script support
Now all benchmarks are converted to YAMLs.

common.mk: Drop obsoleted bm_* pattern

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63902 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 17:48:58 +00:00
k0kubun a7681376e0 benchmark/app_pentomino.yml: remove original scripts after __END__
mistakenly left by conversion script...

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63901 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 17:47:32 +00:00
k0kubun 929982ecea benchmark/*.yml: convert from benchmark/bm_*.rb
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63900 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 17:36:26 +00:00
k0kubun d933fe9b85 benchmark/gc: prevent GC bench from depending on normal benchmark
scripts.

This is needed to finish converting Ruby scripts to YAMLs.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63899 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 17:31:06 +00:00
k0kubun 2079fe863c benchmark/vm2_struct_small_aset.yml: unwrap loop_count
since `i` is involved in this script as well...

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63898 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 17:22:58 +00:00
k0kubun 71f8406f6c benchmark/vm2_*.yml: fix ugly conversion errors
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63897 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 17:19:57 +00:00
k0kubun 12068aa4e9 benchmark/vm2_*.yml: abstract away the while loop
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63896 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 17:03:23 +00:00
k0kubun 1aedeaa476 benchmark/vm1_ensure.yml: rollback loop_count abstraction
for now.

When measured script is really too fast, while loop substituion may
return a negative benchmark result.

Probably benchmark_driver.gem has rooms to be improved about this.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63895 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 16:46:49 +00:00
k0kubun 94e55bbd37 benchmark/vm1_*.yml: manual fixes for ugly conversions
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63894 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 16:35:44 +00:00
k0kubun 820ad9cb1d benchmark/vm1_*.yml: abstract away the while loop
benchmark/driver.rb had removed the cost for while loop in benchmark/bm_vm1_*.rb,
and benchmark_driver.gem can achieve the same thing with `loop_count`.

But unfortunately current benchmark_driver.gem can't solve it only for vm1_yield.yml...

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63893 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 16:28:34 +00:00
k0kubun 9e62c93d0d benchmark: convert bm_vm2_*.rb to vm2_*.yml
This YAML transformation is needed to support whileloop2 time substituion
by benchmark_driver.gem later.

This commmit changes no benchmark behavior.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63892 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 15:35:22 +00:00
k0kubun 95a187e040 benchmark: convert bm_vm1_*.rb to vm1_*.yml
This YAML transformation is needed to support whileloop time substituion
by benchmark_driver.gem later.

This commmit changes no benchmark behavior.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63891 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 15:12:24 +00:00
k0kubun 893b2d97a0 benchmark/driver.rb: fix wrong multiline regexp
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63889 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 15:05:18 +00:00
k0kubun 3293322a39 benchmark: introduce benchmark_driver.gem
Makefile.in: Clone benchmark-driver repository in benchmark/benchmark-driver
  `make update-benchmark-driver`, like simplecov.
win32/Makefile.sub: Roughly do the same thing.
.gitignore: Ignore the cloned repository.
common.mk: Trigger `make update-benchmark-driver` to run `make benchmark`
  and adjust arguments for benchmark_driver.gem.

benchmark/require.yml: renamed from benchmark/bm_require.rb, benchmark/prepare_require.rb
benchmark/require_thread.yml: renamed from benchmark/bm_require_thread.rb, benchmark/prepare_require_thread.rb
benchmark/so_count_words.yml: renamed from benchmark/bm_so_count_words.rb, benchmark/prepare_so_count_words.rb,
  benchmark/wc.input.base
benchmark/so_k_nucleotide.yml: renamed from benchmark/bm_so_k_nucleotide.rb, benchmark/prepare_so_k_nucleotide.rb,
  benchmark/make_fasta_output.rb
benchmark/so_reverse_complement.yml: renamed from benchmark/bm_so_reverse_complement.rb, benchmark/prepare_so_reverse_complement.rb,
  benchmark/make_fasta_output.rb

I'm sorry but I made some duplications between benchmark/require.yml and benchmark/require_thread.yml,
and between benchmark/so_k_nucleotide.yml and benchmark/so_reverse_complement.yml.

If you're not comfortable with it, please combine these YAMLs to share
the same prelude. One YAML file can have multiple benchmark definitions
sharing prelude.

benchmark/driver.rb: Replace its core feature with benchmark_driver.gem.
  Some old features are gone for now, but I'll add them again later.

[Misc #14902]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63888 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 14:38:05 +00:00
k0kubun 9fd839c0b2 benchmark: drop legacy benchmark drivers
It seems like they are all benchmark drivers but "benchmark/driver.rb"
is the latest and others are no longer used.

It's confusing to have multiple drivers (and actually I used
benchmark/run.rb since I didn't know I should use benchmark/driver.rb).

As I'm going to support only benchmark/driver.rb features in Misc#14902,
let me delete them.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63886 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 13:03:01 +00:00
k0kubun c2ae11e308 benchmark/driver.rb: simplify LoadError handling
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63882 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-07-08 04:12:04 +00:00
normal c27a8e87a9 benchmark/driver.rb: add CPU time measurement targets
"Real" time is too unstable on my systems, hopefully counting
only CPU time can gain more reliable benchmark results.

[ruby-core:87362] [Feature #14815]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63564 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-06-03 21:06:26 +00:00
normal 8a2aa4eddc benchmark/bm_*erb*: fix for --measure=size/peak in driver.rb
benchmark/memory_wrapper.rb will Kernel#load these
scripts, preventing DATA from being initialized, so
use heredoc instead.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63497 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-05-23 20:58:46 +00:00
ko1 19a1899470 use `--version`.
* benchmark/driver.rb: use `--version` instead of `-v` to get version
  information.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62515 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-02-21 08:51:49 +00:00
nobu 9a9a4e874d Benchmarks for Array#values_at
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62412 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-02-15 06:14:42 +00:00
ko1 5ee9513a71 Lazy Proc allocation for block parameters
[Feature #14045]

* insns.def (getblockparam, setblockparam): add special access
  instructions for block parameters.
  getblockparam checks VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM and
  if it is not set this instruction creates a Proc object from
  a given blcok and set VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM.
  setblockparam is similar to setlocal, but set
  VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM.

* compile.c: use get/setblockparm instead get/setlocal instructions.
  Note that they are used for method local block parameters (def m(&b)),
  not for block local method parameters (iter{|&b|).

* proc.c (get_local_variable_ptr): creates Proc object for
  Binding#local_variable_get/set.

* safe.c (safe_setter): we need to create Proc objects for postponed
  block parameters when $SAFE is changed.

* vm_args.c (args_setup_block_parameter): used only for block local blcok
  parameters.

* vm_args.c (vm_caller_setup_arg_block): if called with
  VM_CALL_ARGS_BLOCKARG_BLOCKPARAM flag then passed block values should be
  a block handler.

* test/ruby/test_optimization.rb: add tests.

* benchmark/bm_vm1_blockparam*: added.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60397 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-24 11:13:49 +00:00
normal cb9c849af6 file.c: apply2files releases GVL
This means File.chmod, File.lchmod, File.chown, File.lchown,
File.unlink, and File.utime operations on slow filesystems
no longer hold up other threads.

The platform-specific utime_failed changes is compile-tested
using a new UTIME_EINVAL macro

This hurts performance on fast filesystem, but these methods
are unlikely to be performance bottlenecks and (IMHO) avoiding
pathological slowdowns and stalls are more important.

benchmark results:
minimum results in each 3 measurements.
Execution time (sec)
name	trunk	built
file_chmod	0.591	0.801

Speedup ratio: compare with the result of `trunk' (greater is better)
name	built
file_chmod	0.737

* file.c (UTIME_EINVAL): new macro to ease compile-testing
* file.c (struct apply_arg): new struct
* file.c (no_gvl_apply2files): new function
* file.c (apply2files): release GVL
* file.c (chmod_internal): adjust for apply2files changes
* file.c (lchmod_internal): ditto
* file.c (chown_internal): ditto
* file.c (lchown_internal): ditto
* file.c (utime_failed): ditto
* file.c (utime_internal): ditto
* file.c (unlink_internal): ditto
  [ruby-core:83200] [Feature #13996]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60386 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-24 01:20:04 +00:00
k0kubun dafb230c0b driver.rb: allow executing driver.rb directly
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60301 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-21 15:45:32 +00:00
k0kubun 8949479e1a driver.rb: add option to specify target with rbenv
[close GH-1724]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60299 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-21 15:39:35 +00:00
normal 1e14126b4f Dir.empty? releases GVL
This converts all slow syscalls in the Dir.empty? implementation
to release GVL.  We avoid unnecessarily GVL release and
reacquire for each slow call (opendir, readdir, closedir) and
instead only release and acquire the GVL once in the common
case.

Benchmark results show a small degradation in single-threaded
performance:
Execution time (sec)
name	trunk	built
dir_empty_p	0.689	0.758

Speedup ratio: compare with the result of `trunk' (greater is better)
name	built
dir_empty_p	0.909

* dir.c (rb_gc_for_fd_with_gvl): new function
  (nogvl_dir_empty_p): ditto
  (dir_s_empty_p): use new functions to release GVL
* benchmark/bm_dir_empty_p.rb: new benchmark
  [ruby-core:83071] [Feature #13958]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60111 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-04 00:04:51 +00:00
normal e552afc30e File#rename releases GVL
rename(2) requires two pathname resolution operations which can
take considerable time on slow filesystems, release the GVL so
operations on other threads may proceed.

On fast, local filesystems, this change results in some slowdown
as shown by the new benchmark.  I consider the performance trade
off acceptable as cases are avoided.

benchmark results:
minimum results in each 3 measurements.
Execution time (sec)
name	trunk	built
file_rename	2.648	2.804

Speedup ratio: compare with the result of `trunk' (greater is better)
name	built
file_rename	0.944

* file.c (no_gvl_rename): new function
  (rb_file_s_rename): release GVL for renames
* benchmark/bm_file_rename.rb: new benchmark

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60088 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-01 21:19:24 +00:00
glass 8320be1007 string.c: avoid unnecessary call of str_strlen()
* string.c (rb_strseq_index): refactor and avoid
  call of str_strlen() when offset == 0.
  it will improve performance of String#index and #include?

* benchmark/bm_string_index.rb: benchmark for this change

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60086 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-01 13:44:49 +00:00
nobu 9bc73cd81f array.c: improve operations on small arrays
[Feature #13884]

Reduce number of memory allocations for "and", "or" and "diff"
operations on small arrays

Very often, arrays are used to filter parameters and to select
interesting items from 2 collections and very often these
collections are small enough, for example:

```ruby
SAFE_COLUMNS = [:id, :title, :created_at]

def columns
  @all_columns & SAFE_COLUMNS
end
```

In this patch, I got rid of unnecessary memory allocations for
small arrays when "and", "or" and "diff" operations are performed.

name             | HEAD  | PATCH
-----------------+------:+------:
array_small_and  | 0.615 | 0.263
array_small_diff | 0.676 | 0.282
array_small_or   | 0.953 | 0.463

name             | PATCH
-----------------+------:
array_small_and  | 2.343
array_small_diff | 2.392
array_small_or   | 2.056

name             | HEAD  | PATCH
-----------------+------:+------:
array_small_and  | 1.429 | 1.005
array_small_diff | 1.493 | 0.878
array_small_or   | 1.672 | 1.152

name             | PATCH
-----------------+------:
array_small_and  | 1.422
array_small_diff | 1.700
array_small_or   | 1.452

Author:    Dmitry Bochkarev <dimabochkarev@gmail.com>

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60057 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-09-29 07:43:22 +00:00
nobu c751bad51d benchmarks for String#scan
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59494 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-08-04 04:25:12 +00:00
k0kubun 697c82b691 benchmark: Rename to bm_erb_render.rb
from bm_app_erb_render.rb.

I'm told from ko1 that bm_app_* is namespace for Ruby applications,
not for ERB and we should use bm_erb_* for ERB benchmark instead.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58915 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-27 02:47:11 +00:00
k0kubun 6f685e106c erb.rb: Generate static string with opt_str_uminus
to skip object allocation for static string.

We can't always enable frozen_string_literal pragma because we can't
freeze string literals embedded by user for backward compatibility.
So we need to use fstring for each static string.

Since adding ".freeze" to string literals in #content_dump is slow
on compiling, I used unary "-" operator instead.

benchmark/bm_app_erb_render.rb: Added rendering-only benchmark to
test rendering performance on production environment.

This benchmark is created to reproduce the behavior on Sinatra (Tilt).
Thus it doesn't use ERB#result to skip parsing compiled code.
It doesn't use ERB#def_method too to regard `title` and `content` as
local variables. If we use #def_method, `title` and `content` needs
to be method call. I wanted to avoid it.

This patch's benchmark results is:

* Before

app_erb_render  1.250
app_erb 0.704

* After

app_erb_render  1.066
app_erb 0.686

This patch optimizes rendering performance (app_erb_render) without
spoiling (total of rendering +) compiling performance (app_erb).

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58905 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-26 13:49:35 +00:00
normal 60473fe0e3 benchmark/bm_vm2_fiber_switch.rb: check for fiber performance
There are currently no benchmarks for Fiber performance, I
should've committed this years ago when [Feature #10341] was
implemented.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58606 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-08 01:59:12 +00:00
normal 1267dad8da benchmark/bm_vm_thread_pass_flood.rb: add comment
I was about to write off this benchmark while working on GVL
improvements on multi-core systems.

However I noticed it exposes a weakness in my work-in-progress
code when I tested on an old single CPU system.  Further testing
reveals setting CPU affinity ("schedtool -a 0x1" on Linux) on a
modern multi-core system is enough to reproduce the problem
exposed by this benchmark.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58571 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-04 16:47:17 +00:00
normal 9f9d9e5000 benchmark/bm_vm1_gc_wb_*.rb: fix GC.start args for invalid keyword
"lazy_sweep" does not appear to have ever been a valid kwarg
for GC.start, however the opposite of "lazy_sweep" appears
to be "immediate_sweep".  So use immediate_sweep, and flip
the boolean value of each arg.

I guess this only started failing with r56981 in Dec 2016
("class.c: missing unknown_keyword_error",
 commit e3f0cca2f26ba44c810ac980cdff7dda129ae533)

* benchmark/bm_vm1_gc_wb_ary.rb: "lazy_sweep: false" => "immediate_sweep: true"
* benchmark/bm_vm1_gc_wb_ary_promoted.rb: ditto
* benchmark/bm_vm1_gc_wb_obj.rb: ditto
* benchmark/bm_vm1_gc_wb_obj_promoted.rb: ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58565 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-04 08:55:54 +00:00
normal cbd34360ac benchmark: new single-threaded read/write benchmark with pipe
This is currently for testing GVL performance in the uncontended
case: IO#write and IO#read unconditionally release GVL for
blocking I/O with pipe.

It will also be interesting to see how this changes if we switch
to M:N threading model.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58556 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-04 02:13:11 +00:00
normal 7ef49716d5 more benchmarks for SizedQueue and ConditionVariable
I'm working on patches to improve everything in thread_sync.c,
add these to track progress.

* benchmark/bm_vm_thread_sized_queue.rb: add description
* benchmark/bm_vm_thread_condvar1.rb: new benchmark
* benchmark/bm_vm_thread_condvar2.rb: ditto
* benchmark/bm_vm_thread_sized_queue2.rb: ditto
* benchmark/bm_vm_thread_sized_queue3.rb: ditto
* benchmark/bm_vm_thread_sized_queue4.rb: ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58535 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-02 02:40:46 +00:00
normal 8e147f1b0d new benchmark for SizedQueue
The performance of SizedQueue is a bit more complex than
regular Queue, so it deserves a separate benchmark.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58509 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-04-30 07:24:36 +00:00
mrkn 8561baf340 Improve performance of type conversion using to_r
* object.c: Add to_r in conv_method_tbl.

* defs/id.def: add to_r.

* benchmark/bm_int_quo.rb: added.

* benchmark/bm_time_subsec.rb: added.

[Bug #13426]
[ruby-core:80665]
[Fix GH-1582]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58347 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-04-14 05:19:12 +00:00
mrkn cb8012f5c0 array.c: improve performance of Array#sort with block
* array.c (sort_1): improve performance of Array#sort with block

* benchmark/bm_array_sort_block.rb: added for Array#sort with block

[Bug #13344]
[ruby-dev:50027]
[Fix GH-1544]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58339 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-04-13 09:25:38 +00:00
mrkn c121171525 Add a benchmark script for Array#sort of float array
[Bug #13340]
[ruby-dev:50023]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58337 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-04-13 08:09:06 +00:00
nobu 8f76ad3795 benchmarks for Bug#13136
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57379 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-01-20 02:27:28 +00:00
normal e7bd5b8810 another benchmark for IO.copy_stream socket writing
For testing Linux socket-only workaround for
https://bugs.ruby-lang.org/issues/13085

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57364 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-01-18 18:23:49 +00:00
nobu 4794ce55a5 driver.rb: measure_target option [ci skip]
* benchmark/driver.rb (BenchmarkDriver.load): restore
  measure_target option from the loaded results.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57288 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-01-08 03:51:35 +00:00
nobu 437a8cc4ca driver.rb: out output file when loading [ci skip]
* benchmark/driver.rb: default output file is not used when
  loading rawdata.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57287 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-01-08 03:50:32 +00:00
nobu caca9a473f driver.rb: extract loop times [ci skip]
* benchmark/driver.rb (BenchmarkDriver.load): extract loop times
  from the loaded results to adjust the results.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57286 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-01-08 03:46:17 +00:00
nobu 1bf10e33fd driver.rb: adjust name width [ci skip]
* benchmark/driver.rb (show_results): count adjusted result marks
  as the name width.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57285 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-01-08 03:45:34 +00:00
nobu 8e98002701 benchmarks for [Bug #13113] [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57283 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-01-08 01:46:10 +00:00
normal f01d3b2334 add benchmark for IO.copy_stream IO#write case
I will attempt to reduce garbage in proposed fix
for https://bugs.ruby-lang.org/issues/13085

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57237 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-12-31 00:41:14 +00:00
nobu 716610ae56 get rid of ambiguous parentheses warnings
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-11-29 16:06:54 +00:00
naruse 2abf156304 * benchmark/: add vnmakarov's benchmarks around hash [ruby-core:75265]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56161 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-09-14 16:00:55 +00:00
tenderlove c4c53310c2 Copy the serial number from the super class to the singleton class
This helps hit inline method caches more frequently.  Before this
commit:

```
[aaron@TC ruby (trunk)]$ time ./ruby -v benchmark/bm_vm2_poly_singleton.rb
ruby 2.4.0dev (2016-09-12 trunk 56141) [x86_64-darwin15]

real  0m3.679s
user  0m3.632s
sys 0m0.022s
```

After this commit:

```
[aaron@TC ruby (trunk)]$ time ./ruby -v benchmark/bm_vm2_poly_singleton.rb
ruby 2.4.0dev (2016-09-12 trunk 56141) [x86_64-darwin15]
last_commit=Copy the serial number from the super class to the singleton class

real  0m2.246s
user  0m2.203s
sys 0m0.020s
```

[Feature #12364]
[ruby-core:75425]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56144 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-09-12 15:40:09 +00:00
nobu 4b298ad77a Use qualified names
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56037 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-08-30 06:22:30 +00:00
hsbt 6f6e35f4ca * benchmark/bm_so_meteor_contest.rb: fix a typo.
[fix GH-1330][ci skip] Patch by @sachin21

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54667 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-04-22 01:02:01 +00:00
nobu 649736deaf driver.rb: unused variable
* benchmark/driver.rb (BenchmarkDriver.load): remove unused
  variable.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54064 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-03-09 07:52:27 +00:00
ko1 dc39baa9c9 * benchmark/driver.rb: fix my last commit (syntax error).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54063 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-03-09 07:49:06 +00:00
ko1 a036c02650 * benchmark/driver.rb: fix output messages.
* benchmark/memory_wrapper.rb: use respond_to? because
  member? does not work well.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54062 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-03-09 07:42:32 +00:00
ko1 61aa2685d3 * benchmark/driver.rb: support memory usage benchmark.
use `--measure-target=[target]'.
  Now, we can use the following targets:
    * real (default): real time which returns process time in sec.
    * peak: peak memory usage (physical memory) in bytes.
    * size: last memory usage (physical memory) in bytes.

* benchmark/memory_wrapper.rb: ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54060 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-03-09 07:22:27 +00:00
ko1 1228d134dd * benchmark/bm_vm3_gc_old_full.rb: add GC.start benchmark.
* benchmark/bm_vm3_gc_old_immediate.rb: ditto.

* benchmark/bm_vm3_gc_old_lazy.rb: ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54053 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-03-09 06:05:53 +00:00
ko1 b065141050 * benchmark/driver.rb: exit benchmarking if a benchmark process
receives signals.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54052 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-03-09 06:02:18 +00:00
hsbt 30280ef6cd * benchmark/bm_app_aobench.rb: fix typos.
[ci skip][fix GH-1140] Patch by @jutaz
* benchmark/bm_vm_thread_pipe.rb: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53101 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-14 02:50:01 +00:00
normal e52b3a0e2c hash.c (rb_num_hash_start): avoid pathological behavior
The OR-ing itself is bad for a hash function, and shifting 3 bits
left was not enough to undo the damage done by shifting
(RUBY_SPECIAL_SHIFT+3) bits right.  Experimentally, shifting 16-17
bits seemed to work well in preparing the number for murmur hash.

Add a few more benchmarks to based on bm_hash_shift to ensure
we don't hurt performance too much with tweaks.

I'm pretty confident about this change and commiting it now;
especially since we're still using Murmur behind it (but perhaps
we can update to a newer hash from Murmur...)

[ruby-core:72028] [Feature #11405]

target 0: a (ruby 2.3.0dev (2015-12-11 trunk 53027) [x86_64-linux]) at "/home/ew/rrrr/b/ruby"
target 1: b (ruby 2.3.0dev (2015-12-11 master 53027) [x86_64-linux]) at "/home/ew/ruby/b/ruby"

benchmark results:
minimum results in each 5 measurements.
Execution time (sec)
name	a	b
hash_aref_dsym	0.279	0.276
hash_aref_dsym_long	4.951	4.936
hash_aref_fix	0.281	0.283
hash_aref_flo	0.060	0.060
hash_aref_miss	0.409	0.410
hash_aref_str	0.387	0.385
hash_aref_sym	0.275	0.270
hash_aref_sym_long	0.410	0.411
hash_flatten	0.252	0.237
hash_ident_flo	0.035	0.032
hash_ident_num	0.254	0.251
hash_ident_obj	0.252	0.256
hash_ident_str	0.250	0.252
hash_ident_sym	0.259	0.270
hash_keys	0.267	0.267
hash_shift	0.016	0.015
hash_shift_u16	0.074	0.072
hash_shift_u24	0.071	0.071
hash_shift_u32	0.073	0.072
hash_to_proc	0.008	0.008
hash_values	0.263	0.264

Speedup ratio: compare with the result of `a' (greater is better)
name	b
hash_aref_dsym	1.009
hash_aref_dsym_long	1.003
hash_aref_fix	0.993
hash_aref_flo	1.001
hash_aref_miss	0.996
hash_aref_str	1.006
hash_aref_sym	1.017
hash_aref_sym_long	0.998
hash_flatten	1.061
hash_ident_flo	1.072
hash_ident_num	1.012
hash_ident_obj	0.987
hash_ident_str	0.993
hash_ident_sym	0.959
hash_keys	0.997
hash_shift	1.036
hash_shift_u16	1.039
hash_shift_u24	1.001
hash_shift_u32	1.017
hash_to_proc	1.001
hash_values	0.995

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53037 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-11 08:23:46 +00:00
normal 4ebab10bf5 compile optimized case dispatch for nil/true/false
nil/true/false are special literals just like floats, integers,
literal strings, and symbols.  Optimize when statements with
them by using a jump table, too.

target 0: a (ruby 2.3.0dev (2015-12-08 trunk 52928) [x86_64-linux]) at "/home/ew/rrrr/b/ruby"
target 1: b (ruby 2.3.0dev (2015-12-08 master 52928) [x86_64-linux]) at "/home/ew/ruby/b/ruby"

benchmark results:
minimum results in each 5 measurements.
Execution time (sec)
name	a	b
loop_whileloop2	0.102	0.103
vm2_case_lit*	1.657	0.549

Speedup ratio: compare with the result of `a' (greater is better)
name	b
loop_whileloop2	0.988
vm2_case_lit*	3.017

* benchmark/bm_vm2_case_lit.rb: new benchmark
* compile.c (case_when_optimizable_literal): add nil/true/false
* insns.def (opt_case_dispatch): ditto
* vm.c (vm_redefinition_check_flag): ditto
* vm.c (vm_init_redefined_flag): ditto
* vm_core.h: ditto
* object.c (InitVM_Object): define === explicitly for nil/true/false
* test/ruby/test_case.rb (test_deoptimize_nil): new test
* test/ruby/test_optimization.rb (test_opt_case_dispatch): update
  (test_eqq): new test
  [ruby-core:71923] [Feature #11769]
  Original patch by Aaron Patterson <tenderlove@ruby-lang.org>

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52931 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-08 01:46:45 +00:00
normal cee7f6911b io.c: avoid kwarg parsing in C API
* benchmark/bm_io_nonblock_noex2.rb: new benchmark based
  on bm_io_nonblock_noex.rb
* io.c (io_read_nonblock): move documentation to prelude.rb
  (io_write_nonblock): ditto
  (Init_io): private, internal methods for prelude.rb use only
* prelude.rb (IO#read_nonblock): wrapper + documentation
  (IO#write_nonblock): ditto
  [ruby-core:71439] [Feature #11339]

rb_scan_args and hash lookups for kwargs in the C API are clumsy and
slow.  Instead of improving the C API for performance, use Ruby
instead :)

Implement IO#read_nonblock and IO#write_nonblock in prelude.rb
to avoid argument parsing via rb_scan_args and hash lookups.

This speeds up IO#write_nonblock and IO#read_nonblock benchmarks
in both cases, including the original non-idiomatic case where
the `exception: false' hash is pre-allocated to avoid GC pressure.

Now, writing the kwargs in natural, idiomatic Ruby is fastest.
I've added the noex2 benchmark to show this.

2015-11-12 01:41:12 +0000
target 0: a (ruby 2.3.0dev (2015-11-11 trunk 52540) [x86_64-linux])
target 1: b (ruby 2.3.0dev (2015-11-11 avoid-kwarg-capi 52540)
-----------------------------------------------------------
benchmark results:
minimum results in each 10 measurements.
Execution time (sec)
name              a       b
io_nonblock_noex    2.508   2.382
io_nonblock_noex2   2.950   1.882

Speedup ratio: compare with the result of `a' (greater is better)
name              b
io_nonblock_noex    1.053
io_nonblock_noex2   1.567

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52541 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-12 02:00:41 +00:00
nobu a56b0f8b29 bm_hash_to_proc.rb
* benchmark/bm_hash_to_proc.rb: benchmark for Hash#to_proc.
  [Feature #11653]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52522 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-10 09:22:37 +00:00
kosaki 68c35d8bb9 * benchmark/prepare_require.rb: skip file creation if it already
exist. Suggested by ko1.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52086 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-08 21:53:48 +00:00
kosaki 8c84716b24 * benchmark/bm_require.rb: new benchmark for require.
* benchmark/bm_require_thread.rb: new benchmark for conflicting
  require vs thread. like [Bug #11559]
* prepare_require.rb: new file for preparing above tests.
* prepare_require.rb: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52083 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-08 21:31:49 +00:00
nobu 2c31c3b45e string.c: fix non-embedded string
* string.c (rb_str_resurrect): fix resurrection of short enough to
  be embedded but not embedded string.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52073 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-07 11:43:17 +00:00
nobu ecefee85b7 bm_vm3_gc.rb: no shebang
* benchmark/bm_vm3_gc.rb: remove unnecessary shebang line.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51973 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-29 08:03:12 +00:00
nobu 06b3702753 bm_vm_symbol_block_pass.rb: rename
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51969 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-29 00:21:10 +00:00
nobu 7f99972869 benchmark for symbol block passing
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51968 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-28 18:10:16 +00:00
normal cb87005f69 new benchmarks for hashing dsyms and fixnums
* 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-29 19:54:12 +00:00
normal df4e282eeb delay `exception: false' checks for minor speedup
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-07-02 22:22:14 +00:00
normal a63c5b2646 add benchmarks for struct[:name]
* 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-06-22 20:10:07 +00:00
normal f6cd582505 variable.c: avoid compatibility table with generic ivars
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-05-30 00:20:15 +00:00
hsbt c97064c79d * benchmark/bm_so_meteor_contest.rb: fix a typo.
[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-04-20 03:45:35 +00:00
nobu 69a2df4eb6 bm_hash_aref_flo.rb: fix data
* 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-25 02:20:43 +00:00
ko1 683e823669 * benchmark/bm_vm1_gc_wb_ary.rb: run GC to finish "marking" phase.
* 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-18 05:15:08 +00:00
ko1 f6e9452b23 * benchmark/bm_vm1_gc_wb_ary(_promoted).rb: separate fastpath and
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-17 09:57:47 +00:00
nobu b6dbffcd89 driver.rb: load-rawdata
* 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-06 01:33:43 +00:00
nobu db6a84b9cf driver.rb: rawdata format
* 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-06 01:33:39 +00:00
nobu 71a352f0a7 driver.rb: name width
* 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-05 08:17:26 +00:00
nobu a161bdf6f3 driver.rb: fix index
* 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-05 07:01:26 +00:00
nobu e5eb9a16df driver.rb: plain text table
* 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-05 02:39:09 +00:00
nobu d816b8e4e6 driver.rb: suffix
* 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-05 02:38:54 +00:00
nobu 589436f417 driver.rb: MarkDown table
* 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-03-05 00:14:02 +00:00
normal 200b582f1e benchmark/bm_marshal_dump_flo.rb: new benchmark for [Bug #10761]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49387 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-01-23 08:13:59 +00:00
normal 6d56fd067e fix flonum hashing regression from r45384
* 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-22 07:48:59 +00:00
hsbt 574422733d * array.c: Improve performance of Array#shift. use shared instead of
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
2015-01-03 02:27:50 +00:00
normal 65651b34b1 struct: avoid all O(n) behavior on access
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-12-09 15:43:49 +00:00
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
ko1 9b68747be0 * benchmark/driver.rb: add `-x' or `--exclude' option
to specify exclude benchmark name pattern.
  You can specify "-x foo" if you want to exclude the benchmarks
  if the name of benchmark contains `foo'.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37314 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-24 08:46:01 +00:00
ko1 e99989bf4f * benchmark/driver.rb: remove unexpected `output'.
(commit miss)



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37265 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-19 02:15:00 +00:00
ko1 f2a9c42c7a * benchmark/bmx_temp.rb: removed.
This file should not be in repository.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37263 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-19 01:23:50 +00:00
ko1 a31d53ecf5 * benchmark/driver.rb: add new option `--ruby-arg [ARG]'
which is passed as a launch parameter for each ruby's execution.
  ($ ruby [ARG] [File])



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37261 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-19 01:22:08 +00:00
ko1 aef5f90281 * benchmark/bm_vm2_method_missing.rb: add a benchmark to measure
performance of invoking `method_missing'.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37245 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-17 07:26:58 +00:00
ko1 5e2625eebd * benchmark/bm_vm2_dstr.rb: add a benchmark to measure
performance of dynamic generated string ("foo#{bar}baz").



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37236 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-16 23:47:51 +00:00
ko1 db3898fe90 * benchmark/bm_vm1_yield.rb: add a benchmark to measure `yield'
(invoke empty block) performance.
* benchmark/bm_vm2_method_with_block.rb: add a benchmark to measure
  method invocation with empty block.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37230 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-16 20:37:25 +00:00
ko1 f8c2a968dd * benchmark/driver.rb (show_results): Show speedup ratio
with first executables score at last of results
  if two or more executrables are given.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37225 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-16 13:26:46 +00:00
ko1 64b1751194 * benchmark/driver.rb: some refactoring.
(1) Remove `average differential'.
  In this benchmark driver, We should not care about `average'.
  We use fastest score because this score should not include
  any disturbances (affections of background process, etc).
  If you care about timing affect, I recommend `median'
  score with more than 5 examinations rather than simple
  `average' score (`average' score was affected by error scores).
  (2) Show log file name.
  (3) Change default directory from './' to driver's directory.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37224 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-16 13:07:44 +00:00
kou a17cb167ea * benchmark/: add missing spaces around assignment operators (= and +=) for
consistency.
  Approved by ko1.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37192 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-15 12:53:12 +00:00
ko1 fd3b0dec4a * benchmark/bm_vm1_attr_ivar(_set).rb: added (for method dispatch speed).
* benchmark/bm_vm1_float_simple.rb: added (for flonum/float).



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37184 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-14 18:53:01 +00:00
ko1 b3b5e626ad * include/ruby/ruby.h: introduce flonum technique for
64bit CPU environment (sizeof(double) == sizeof(VALUE)).
  flonum technique enables to avoid double object creation
  if the double value d is in range about between
  1.72723e-77 < |d| <= 1.15792e+77 or 0.0.
  flonum Float value is immediate and their lowest two bits
  are b10.
  If flonum is activated, then USE_FLONUM macro is 1.
  I'll write detailed in this technique on
  https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/Flonum_tech
* benchmark/bmx_temp.rb: add an benchmark for simple
  Float calculation.
* gc.c (id2ref, rb_obj_id): add flonum Float support.
* include/ruby/intern.h: move decl of rb_float_new(double)
  to include/ruby/ruby.h.
* insns.def, vm.c, vm_insnhelper.c: add flonum optimization
  and simplify source code.
* vm_insnhelper.h (FLONUM_2_P): added.
* marshal.c: support flonum output.
* numeric.c (rb_float_new_in_heap): added.
* parse.y: support flonum.
* random.c: ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36798 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-23 07:22:40 +00:00
eregon 9955681379 * benchmark/driver.rb: fix typos.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36683 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-11 15:45:54 +00:00
nagachika 77dc968e6c * benchmark/bm_vm1_lvar_init.rb: fix newline code.
* benchmark/bm_vm2_bigarray.rb: ditto.
* benchmark/bm_vm2_bighash.rb: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35824 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-05-27 16:14:46 +00:00
ko1 7796c7d751 * benchmark/bm_vm1_lvar_init.rb: added.
This benchmark measures a initialize time of non-used variable.
* benchmark/bm_vm1_lvar_set.rb: added.
  This benchmark measures a local variables initialization time.
* benchmark/bm_vm2_bigarray.rb: added.
  This benchmark mesures a big array literal creation time.
* benchmark/bm_vm2_bighash.rb:
  This benchmark mesures a big hash literal creation time.
* benchmark/bm*: change notation "i=0" to "i = 0".



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35821 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-05-27 14:41:01 +00:00
ko1 06653c1933 * benchmark/driver.rb: fix to continue benchmarks when
an error is occurred.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35819 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-05-27 04:35:11 +00:00