summaryrefslogtreecommitdiff
path: root/tool
AgeCommit message (Collapse)Author
2020-04-13Make vm_call_cfunc_with_frame a fastpath (#3027)Takashi Kokubun
when there's no need to call CALLER_SETUP_ARG and CALLER_REMOVE_EMPTY_KW_SPLAT (i.e. !rb_splat_or_kwargs_p(ci) && !calling->kw_splat). Micro benchmark: ``` $ benchmark-driver -v --rbenv 'before;after' benchmark/vm_send_cfunc.yml --repeat-count=4 before: ruby 2.8.0dev (2020-04-13T23:45:05Z master b9d3ceee8f) [x86_64-linux] after: ruby 2.8.0dev (2020-04-14T00:48:52Z no-splat-fastpath 418d363722) [x86_64-linux] Calculating ------------------------------------- before after vm_send_cfunc 69.585M 88.724M i/s - 100.000M times in 1.437097s 1.127096s Comparison: vm_send_cfunc after: 88723605.2 i/s before: 69584737.1 i/s - 1.28x slower ``` Optcarrot: ``` $ benchmark-driver -v --rbenv 'before;after' benchmark.yml --repeat-count=12 --output=all before: ruby 2.8.0dev (2020-04-13T23:45:05Z master b9d3ceee8f) [x86_64-linux] after: ruby 2.8.0dev (2020-04-14T00:48:52Z no-splat-fastpath 418d363722) [x86_64-linux] Calculating ------------------------------------- before after Optcarrot Lan_Master.nes 50.76119601545175 42.73858236484051 fps 50.76388649761503 51.04211379912850 50.80930672252514 51.39455790755538 50.90236000778749 51.75656936556145 51.01744746340430 51.86875277356489 51.06495279015112 51.88692482485558 51.07785337168974 51.93429603190578 51.20163525187862 51.95768145071314 51.34671771913112 52.45577266040274 51.35918340835583 52.53163888762858 51.46641337418146 52.62172484121034 51.50835463462257 52.85064021113239 ``` Notes: Merged-By: k0kubun <takashikkbn@gmail.com>
2020-04-13Unwrap vm_call_cfunc indirection on JITTakashi Kokubun
for VM_METHOD_TYPE_CFUNC. This has been known to decrease optcarrot fps: ``` $ benchmark-driver -v --rbenv 'before --jit;after --jit' benchmark.yml --repeat-count=24 --output=all before --jit: ruby 2.8.0dev (2020-04-13T16:25:13Z master fb40495cd9) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-04-13T23:23:11Z mjit-inline-c bdcd06d159) +JIT [x86_64-linux] Calculating ------------------------------------- before --jit after --jit Optcarrot Lan_Master.nes 66.38132676191719 67.41369177299630 fps 69.42728743772243 68.90327567263054 72.16028300263211 69.62605130880686 72.46631319102777 70.48818243767207 73.37078877002490 70.79522887347566 73.69422431217367 70.99021920193194 74.01471487018695 74.69931965402584 75.48685183295630 74.86714575949016 75.54445264507932 75.97864419721677 77.28089738169756 76.48908637569581 78.04183397891302 76.54320932488021 78.36807984096562 76.59407262898067 78.92898762543574 77.31316743361343 78.93576483233765 77.97153484180480 79.13754917503078 77.98478782102325 79.62648945850653 78.02263322726446 79.86334213878064 78.26333724045934 80.05100635898518 78.60056756355614 80.26186843769584 78.91082645644468 80.34205717020330 79.01226659142263 80.62286066044338 79.32733939423721 80.95883033058557 79.63793060542024 80.97376819251613 79.73108936622778 81.23050939202896 80.18280109433088 ``` and I deleted this capability in an early stage of YARV-MJIT development: https://github.com/k0kubun/yarv-mjit/commit/0ab130feeefc2b9078a1077e4fec93b3f5e45d07 I suspect either of the following things could be the cause: * Directly calling vm_call_cfunc requires more optimization effort in GCC, resulting in 30ms-ish compilation time increase for such methods and decreasing the number of methods compiled in a benchmarked period. * Code size increase => icache miss hit These hypotheses could be verified by some methodologies. However, I'd like to introduce this regardless of the result because this blocks inlining C method's definition. I may revert this commit when I give up to implement inlining C method definition, which requires this change. Microbenchmark-wise, this gives slight performance improvement: ``` $ benchmark-driver -v --rbenv 'before --jit;after --jit' benchmark/mjit_send_cfunc.yml --repeat-count=4 before --jit: ruby 2.8.0dev (2020-04-13T16:25:13Z master fb40495cd9) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-04-13T23:23:11Z mjit-inline-c bdcd06d159) +JIT [x86_64-linux] Calculating ------------------------------------- before --jit after --jit mjit_send_cfunc 41.961M 56.489M i/s - 100.000M times in 2.383143s 1.770244s Comparison: mjit_send_cfunc after --jit: 56489372.5 i/s before --jit: 41961388.1 i/s - 1.35x slower ```
2020-04-09Fixed to initialize ruby-core repository when it has no master branchHiroshi SHIBATA
2020-04-09Support one repository for updating the latest commitsHiroshi SHIBATA
2020-04-08Merge pull request #2991 from shyouhei/ruby.h卜部昌平
Split ruby.h Notes: Merged-By: shyouhei <shyouhei@ruby-lang.org>
2020-04-06Remove unused variable stack_sizeTakashi Kokubun
_mjit_compile_send.erb doesn't use _mjit_compile_insn_body.erb
2020-04-06Delay definition of pc_moved_pTakashi Kokubun
to unify the duplicated declarations and to make sure it's not used until set properly. Also changed it from legacy TRUE/FALSE to stdbool.
2020-04-06Fix -Wshorten-64-to-32 in 4f802828f4Takashi Kokubun
2020-04-06Refactor `argc` in mjit_compile_sendTakashi Kokubun
using sp_inc_of_sendish for consistency and to make it easier to understand
2020-04-06Update outdated comments in mjit_compile_sendTakashi Kokubun
and simplify `v` variable references a little. There's no CALL_METHOD anymore, and the original code lives in vm_sendish instead of insns.def now.
2020-04-06Collapse `if` conditions to decrease indentationTakashi Kokubun
in mjit_compile_send to clarify it's not that deeply branched.
2020-04-05Fallback if Pathname#relative_path_from failsNobuyoshi Nakada
It can fail due to different prefixes, e.g., drive letters or UNC paths on DOSish platform.
2020-04-05Revert "Moved aclocal.m4 to macro directory"Nobuyoshi Nakada
This reverts commit 4a6571dbc14ee4e88c12cd9931f7695077a3ee6e, because chkbuild does not follow.
2020-04-05Moved aclocal.m4 to macro directoryNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/3003
2020-04-04Also scan `rescue` clausesNobuyoshi Nakada
2020-04-04Remove unnecessary escapeKazuhiro NISHIYAMA
2020-04-03[sync_default_gems.rb] Reset files to be ignoredNobuyoshi Nakada
[ci skip]
2020-04-03[sync_default_gems.rb] Ignore files under .github directoryNobuyoshi Nakada
[ci skip]
2020-04-03[sync_default_gems.rb] Use block form `IO.popen` to reap zombiesNobuyoshi Nakada
[ci skip]
2020-03-31Make JIT-ed leave insn leafTakashi Kokubun
to eliminate sp / pc moves by cancelling JIT execution on interrupts. $ benchmark-driver benchmark.yml -v --rbenv 'before --jit;after --jit' --repeat-count=12 --output=all before --jit: ruby 2.8.0dev (2020-04-01T03:48:56Z master 5a81562dfe) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-04-01T04:58:01Z master 39beb26a27) +JIT [x86_64-linux] Calculating ------------------------------------- before --jit after --jit Optcarrot Lan_Master.nes 75.06409603894944 76.06422026555558 fps 75.12025067279242 78.48161731616810 77.42020273492177 79.78958240950033 79.07253675128945 79.88645902325614 79.99179109732327 80.33743931749331 80.07633091008627 80.53790081529166 80.15450942667547 80.99048270668010 80.48372803283709 81.70497146081003 80.57410149187352 82.79494539467382 81.80449157081202 82.85797792223954 82.24629397834902 83.00603891515506 82.63708148686703 83.23221006969828 $ benchmark-driver -v --rbenv 'before;before --jit;after --jit' benchmark/mjit_leave.yml --repeat-count=4 before: ruby 2.8.0dev (2020-04-01T03:48:56Z master 5a81562dfe) [x86_64-linux] before --jit: ruby 2.8.0dev (2020-04-01T03:48:56Z master 5a81562dfe) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-04-01T04:58:01Z master 39beb26a27) +JIT [x86_64-linux] Calculating ------------------------------------- before before --jit after --jit mjit_leave 106.656M 82.786M 91.635M i/s - 200.000M times in 1.875183s 2.415881s 2.182569s Comparison: mjit_leave before: 106656239.9 i/s after --jit: 91635143.7 i/s - 1.16x slower before --jit: 82785537.2 i/s - 1.29x slower
2020-03-30Optimize exivar access on JIT-ed getivarTakashi Kokubun
JIT support of dd723771c11. $ benchmark-driver -v --rbenv 'before;before --jit;after --jit' benchmark/mjit_exivar.yml --repeat-count=4 before: ruby 2.8.0dev (2020-03-30T12:32:26Z master e5db3da9d3) [x86_64-linux] before --jit: ruby 2.8.0dev (2020-03-30T12:32:26Z master e5db3da9d3) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-03-31T05:57:24Z mjit-exivar 128625baec) +JIT [x86_64-linux] Calculating ------------------------------------- before before --jit after --jit mjit_exivar 57.944M 53.579M 54.471M i/s - 200.000M times in 3.451588s 3.732772s 3.671687s Comparison: mjit_exivar before: 57944345.1 i/s after --jit: 54470876.7 i/s - 1.06x slower before --jit: 53579483.4 i/s - 1.08x slower
2020-03-30Migrate {assert,refute}_patch_exits for compatibility with Minitest5Hiroshi SHIBATA
2020-03-30[DOC] Updated module name [ci skip]Nobuyoshi Nakada
2020-03-25Make RbConfig::CONFIG values mutable [Bug #16738]Nobuyoshi Nakada
As `RbConfig.expand` modifies the argument and involved `CONFIG` values, its values should be mutable.
2020-03-23Make file names and variable names consistentTakashi Kokubun
2020-03-22Change the filename like make variableTakashi Kokubun
for consistency
2020-03-22Change the run_without_tabs switching to dedicatedTakashi Kokubun
variable of make instead of d059714746 as requested. You can disable this like `make MJIT_WITHOUT_TABS=false` or `export MJIT_WITHOUT_TABS=false`.
2020-03-22Disable run_without_tabs when there's no -ggdb3Takashi Kokubun
in debugflags, as requested by nobu I actually wanted to check debugflags directly rather than MJIT_DEBUGFLAGS because debugflags is always used but MJIT_DEBUGFLAGS may not be always used. But I couldn't find a better way to check debugflags.
2020-03-22Expand tabs of include/ruby/ruby.h in MJIT headerTakashi Kokubun
rb_class_of is indented with tabs
2020-03-22Try asserting no static decl rather than warningTakashi Kokubun
This didn't exist in my machine, but it may exist in some CI environments.
2020-03-22Reduce the number of lines used by transform_mjit_headerTakashi Kokubun
2020-03-22Workaround an encoding problem in run_without_tabsTakashi Kokubun
It's to be fixed properly later. But this should be able to avoid the failure. https://travis-ci.org/github/ruby/ruby/jobs/665580361 https://rubyci.org/logs/rubyci.s3.amazonaws.com/solaris10-gcc/ruby-master/log/20200322T190003Z.fail.html.gz
2020-03-22Expand tabs for rb_mjit_header.h (#2975)Takashi Kokubun
This is necessary to avoid converting a hard tab to just 1 space in preprocessor to generate rb_mjit_header.h, which is helpful when using gdb or perf report. See also: [Misc #16112] This reverts commit 91acdd17c4b4bb69a8fa3ada46e09dad46b9362e. Fixed permission failure on Travis, encoding, and added SKIPPED_FILES. Notes: Merged-By: k0kubun <takashikkbn@gmail.com>
2020-03-22Revert "Expand tabs for rb_mjit_header.h"Takashi Kokubun
This reverts commit 57119dd561418c917b885db5f5af7f129a96d1ec. Temporarily reverting for Travis failures
2020-03-22Expand tabs for rb_mjit_header.hTakashi Kokubun
I can't live without this when using gdb or perf report. See also: [Misc #16112]
2020-03-21[ci skip]Fix return type on RbConfig.fire_update!taki
Notes: Merged: https://github.com/ruby/ruby/pull/2972
2020-03-21Enablie IPv6 on Travis s390s case again.Jun Aruga
It seems the issue was fixed by Travis. See https://travis-ci.community/t/6719/5 . Notes: Merged: https://github.com/ruby/ruby/pull/2970
2020-03-16The upstream repository of bundler was changed rubygems/rubygems now.Hiroshi SHIBATA
https://github.com/rubygems/rubygems/pull/3166
2020-03-16Do not make disabled directories at installation [Bug #12392]Nobuyoshi Nakada
2020-03-13tool/redmine-backporter.rb: fix typoNARUSE, Yui
2020-03-12Avoid referring to an old value of reallocTakashi Kokubun
OpenBSD RubyCI has failed with SEGV since 4bcd5981e80d3e1852c8723741a0069779464128. https://rubyci.org/logs/rubyci.s3.amazonaws.com/openbsd-current/ruby-master/log/20200312T223005Z.fail.html.gz This was because `status->cc_entries` could be stale after `realloc` call for inlined iseqs.
2020-03-11Pin and inline cme in JIT-ed method callsTakashi Kokubun
``` $ benchmark-driver benchmark.yml -v --rbenv 'before --jit;after --jit' --repeat-count=12 --output=all before --jit: ruby 2.8.0dev (2020-03-11T07:43:12Z master e89ebdcb87) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-03-11T07:54:18Z master 143776a0da) +JIT [x86_64-linux] Calculating ------------------------------------- before --jit after --jit Optcarrot Lan_Master.nes 73.86976729561439 77.20184819316513 fps 74.46997176460742 78.43493030231805 77.59686308754307 78.55714131655935 78.53693921126656 79.08984255596820 80.10158944910573 79.17751731838183 80.12254974411167 79.60853122429181 80.28678655204945 79.74674066871896 80.38690681095379 79.90624544440300 80.79223498756919 80.57881084206193 80.82857188422419 80.70677614429169 81.06447745878245 81.03868541295149 81.21620802278490 82.16354660940607 ```
2020-03-10Optimize away call data refs in JIT-ed method callsTakashi Kokubun
According to ko1, `cd->cc != cc` was for GC.compact guard. As we pin cc by rb_gc_mark(), we don't need the check. ``` $ benchmark-driver benchmark.yml -v --rbenv 'before --jit;after --jit' --repeat-count=12 --output=all before --jit: ruby 2.8.0dev (2020-03-11T05:36:48Z master da6948753e) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-03-11T06:26:34Z master 36b20b8b4a) +JIT [x86_64-linux] Calculating ------------------------------------- before --jit after --jit Optcarrot Lan_Master.nes 74.03480698689405 71.63404803273507 fps 74.15085286586992 73.43923328104295 75.51738277744781 75.75465268365384 76.24922600109410 76.74071607861318 76.45513422802325 77.47521029238116 76.86617230739330 78.14759496269018 77.71509137131933 79.14051571125866 77.72839157096146 79.35884822673313 78.25218904561633 79.92538876408051 78.72521071333249 79.98075556706726 78.79950460165091 80.51747831497875 79.43884960720381 80.97973166525254 ```
2020-03-10tool/sync_default_gems.rb: update paths for opensslKazuki Yamaguchi
Now ruby/openssl has a different directory structure. The test suite is moved from /test/test_* to /test/openssl/test_*.
2020-03-10Remove an unnecessary TODO commentTakashi Kokubun
Fixing https://github.com/ruby/ruby/blob/4bcd5981e80d3e1852c8723741a0069779464128/mjit.c#L338 should be the right solution for this. We may not be able to free the cc immediately. Plus, we're not copying cc but just holding references to be marked. cc should be GC-ed once jit_unit is freed.
2020-03-10Capture inlined iseq's cc entries in root iseq'sTakashi Kokubun
jit_unit to avoid marking wrong cc entries when inlined iseq is compiled multiple times, resolving the TODO added by daf7c48d88. This obviates pseudo jit_unit in inlined iseq introduced by 7ec2359374 and fixes memory leak of the adhoc unit.
2020-03-09Use https for downloading Unicode data.Hiroshi SHIBATA
Retry with 90de118a75921a08497b41de2950971073b3c924 [Bug #13962][ruby-core:83074]
2020-03-08Specify explicit separator not to be affected by $;Nobuyoshi Nakada
2020-03-08Fix rbinstall bugs (#2930)David Rodríguez
* Fix incorrect calls to `Gem.ensure_gem_subdirectories` This method doesn't take keyword args. * Remove stuff no longer necessary Now `Gem.ensure_gem_subdirectories` is doing its job, so some stuff is no longer needed. * Use the proper method for default gems * Respect DESTDIR when creating rubygems folder layout * Use `Gem.default_specifications_dir` Notes: Merged-By: hsbt <hsbt@ruby-lang.org>
2020-03-04tool/lib/test/unit: support TESTS='-- -ext-' again卜部昌平
There is a test directory named test/-ext-. Because this directry starts with a hyphen, we have to cheat test/unit in order for it to run the tests underneath. TESTS='-- -ext' worked for a long time. Let's not break that maneuver.