[#35961] require performance on 1.9 — Xavier Shay <xavier-list@...>
Hello,
[#35985] [Backport92 - Backport #4641][Open] Please backport r31418 to 1.9.2 stable branch — Aaron Patterson <aaron@...>
[#36013] [Ruby 1.9 - RubySpec #4649][Open] Adding parallel constructors to Ruby 2.0 — Rodrigo Rosenfeld Rosas <rr.rosas@...>
[#36046] [Ruby 1.9 - Bug #4655][Open] String#to_c does not support scientific notation — Tinco Andringa <mail@...>
[#36058] draft schedule of Ruby 1.9.3 — "Yuki Sonoda (Yugui)" <yugui@...>
-----BEGIN PGP SIGNED MESSAGE-----
Hi Yugui, is there any plans for the next patch release of 1.9.2?
[#36108] [Ruby 1.9 - Bug #4666][Open] set ruby compatibility version to 1.9.3 in trunk — Lucas Nussbaum <lucas@...>
Lucas Nussbaum <lucas@lucas-nussbaum.net> wrote:
> Even if 1.9.3 is still binary-compatible with 1.9.1, I think that it would be easier to change
2011/5/12 Urabe Shyouhei <shyouhei@ruby-lang.org>:
[#36131] Re: [ruby-cvs:38172] Ruby:r30989 (trunk): * include/ruby/win32.h: define WIN32 if neither _WIN64 nor WIN32 defined. it forces to use push/pop for pack(4) pragma. — "Yuki Sonoda (Yugui)" <yugui@...>
Hi arton,
Hi,
[#36150] [Ruby 1.9 - Bug #4680][Open] [PATCH] io.c: fix busy wait with sendfile() — Eric Wong <normalperson@...>
[#36156] [Ruby 1.9 - Bug #4683][Open] [PATCH] io.c: copy_stream execute interrupts and retry — Eric Wong <normalperson@...>
[#36167] [Ruby 1.9 - Bug #4421] [ext/openssl] Fix RSA public key encoding — Hiroshi NAKAMURA <nakahiro@...>
[#36255] Whitespace conventions? — Steve Klabnik <steve@...>
So, while working on some documentation, I've noticed that there's a lot of
2011/5/17 Steve Klabnik <steve@steveklabnik.com>:
[#36285] unable to load irb, 1.9.3 mingw — Roger Pack <rogerdpack2@...>
Hello all, with mingw 1.9.3, I get the following when trying to load irb:
[#36314] [Ruby 1.9 - Bug #3167] RDoc issues in interactive mode — Benoit Daloze <redmine@...>
[#36316] [Ruby 1.9 - Bug #4731][Open] ruby -S irb fails with mingw/msys vanilla builds — Roger Pack <rogerpack2005@...>
Hi,
On Sat, Jul 16, 2011 at 7:46 AM, Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:
[#36322] [Ruby 1.9 - Bug #4734][Assigned] [ext/openssl] DSA#sign error — Martin Bosslet <Martin.Bosslet@...>
[#36337] [Ruby 1.9 - Feature #3905] rb_clear_cache_by_class() called often during GC for non-blocking I/O — Akira Tanaka <akr@...>
Akira Tanaka <akr@fsij.org> wrote:
Hi,
SASADA Koichi <ko1@atdot.net> wrote:
[#36373] [Ruby 1.9 - Bug #4757][Open] Attempt to make Enumerator docs more clear (patch included) — David Copeland <davetron5000@...>
2011/5/25 Yusuke Endoh <mame@tsg.ne.jp>:
[#36374] [Ruby 1.9 - Bug #4758][Open] yaml file not human readable when saving utf-8 — Ilias Lazaridis <ilias@...>
[#36390] [Ruby 1.9 - Feature #4766][Open] Range#bsearch — Yusuke Endoh <mame@...>
On Jul 17, 2011, at 7:54 PM, Eric Hodel wrote:
[#36395] [Ruby 1.9 - Bug #4769][Open] Updated SMTP standards — "J.R. Garcia" <mrjohngarcia@...>
[#36406] 1.8.7 release next month — Urabe Shyouhei <shyouhei@...>
Hello core people,
2011/5/23 Urabe Shyouhei <shyouhei@ruby-lang.org>:
Hi Luis,
From: Urabe Shyouhei <shyouhei@ruby-lang.org>
From: Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
Ping Luis, how's it going?
On Fri, Jun 3, 2011 at 5:18 AM, Urabe Shyouhei <shyouhei@ruby-lang.org> wrote:
Hi,
On Sun, Jun 5, 2011 at 4:30 AM, Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp> wrote:
(06/06/2011 01:16 PM), Luis Lavena wrote:
On Mon, Jun 6, 2011 at 1:24 AM, Urabe Shyouhei <shyouhei@ruby-lang.org> wrote:
From: Luis Lavena <luislavena@gmail.com>
[#36419] [Ruby 1.9 - Feature #4772][Open] Hash#add_keys — Joey Zhou <yimutang@...>
[#36429] GC thought — Roger Pack <rogerdpack2@...>
Hello all.
[#36447] [Ruby 1.9 - Bug #4777][Open] Ruby 1.9.2-p180 ignoring INT, TERM, and QUIT until it receives CONT — Nathan Sobo <nathansobo@...>
[#36463] [Ruby 1.9 - Feature #4778][Open] IO#each_chomped — Joey Zhou <yimutang@...>
[#36474] Error reporting, backtraces and the debugger — Clifford Heath <clifford.heath@...>
Dear people,
[#36479] [Ruby 1.9 - Feature #4784][Open] Import the JSON library — Lazaridis Ilias <ilias@...>
[#36494] [Ruby 1.9 - Feature #4786][Open] RCR new Feature: Numeric#grouped — Roger Pack <rogerpack2005@...>
[#36528] [Ruby 1.9 - Bug #4795][Open] Nested classes don't seem to resolve correctly when another class exists with the same name — John Feminella <johnf@...>
[#36536] [Ruby 1.9 - Bug #3924] Performance bug (in require?) — Xavier Shay <xavier-list@...>
[#36550] [Ruby 1.9 - Bug #4798][Open] test_process and test_signal errors and halts on Windows — Luis Lavena <luislavena@...>
[#36551] [Ruby 1.9 - Bug #4799][Open] M17N tests are too JP specific — Luis Lavena <luislavena@...>
[#36558] [Ruby 1.9 - Bug #3924] Performance bug (in require?) — Xavier Shay <xavier-list@...>
Hello,
Hello, Xavier
[#36559] [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Tom Wardrop <tom@...>
Hi,
> Iff 'key': 'value'} means {:key => 'value'} I have no objection.
Hi,
On Mon, May 30, 2011 at 04:21:32PM +0900, Yukihiro Matsumoto wrote:
Em 30-05-2011 07:58, Cezary escreveu:
Since :"#{abc}" is allowed in Ruby, I imagine that any such substitute syntax would preserve that property.
Em 30-05-2011 09:05, Michael Edgar escreveu:
On Mon, May 30, 2011 at 09:05:04PM +0900, Michael Edgar wrote:
Cezary:
On Tue, May 31, 2011 at 05:55:39AM +0900, Piotr Szotkowski wrote:
On May 30, 2011, at 10:19 AM, Cezary wrote:
On 5/30/11 9:24 AM, Michael Edgar wrote:
On 02/06/2011, at 10:28 AM, Kurt Stephens wrote:
On 6/1/11 10:17 PM, Bill Kelly wrote:
[#36565] [Ruby 1.9 - Bug #4803][Open] RCLASS_SUPER won't compile for C extensions as of revision 31627 — Daniel Azuma <dazuma@...>
Hi,
[#36628] [Ruby 1.9 - Feature #4805][Open] Add X509::Name#hash_old for 0.9.X compat — Hiroshi NAKAMURA <nakahiro@...>
[ruby-core:36195] [Ruby 1.9 - Bug #3924] Performance bug (in require?)
Issue #3924 has been updated by Xavier Shay. Progress update time! tl;dr - I've made the performance linear, still need to do a bit more clean up though. I have started switching out the current loop of $LOADED_FEATURES to use a hash look up (using st.h) in order to fix this problem. You can try it now by using `require_2` rather than `require` on my fork (or by changing the mapping of require at the bottom of `load.c`): https://github.com/xaviershay/ruby/compare/require-performance-fix This fork passes all ruby tests and rubyspec require tests. It can also load a rails stack. That doesn't mean it is correct (the tests are not comprehensive), but it's a start. It displays near-linear performance. Here are some graphs: versus 1.9 - https://skitch.com/xaviershay/r9pwb/tc-load-time versus 1.8 - https://skitch.com/xaviershay/r9pwn/tc-load-time This is a pretty big patch, and also my first on MRI so there are a few potential issues: * This is pretty much a rewrite for load.c, since I couldn't get my head around `rb_feature_p`. That means it's risky. It is likely possibly to add a hash-table lookup to the existing architecture, but someone else would have to volunteer to do this. On the up side, it is far easier to follow the algorithm in the new code. * It doesn't use the file search functions in `file.c`, so I suspect there could be some safe level issues not covered yet. * I have made public one or two functions in `file.c` and `array.c`. Pretty sure I could rewrite what I have to avoid doing this. * `rb_provide` no longer makes sense. It was being used in `enumerator.c` but I found another method of providing backwards compatility. Since it is in `intern.h`, it can maybe just be removed? * I use a proxy class for $LOADED_FEATURES to keep the loaded features hash up to date. Bit of a hack but I couldn't come up with a nicer way of doing it. * Is it OK to add a new member to the VM struct? I added new_loaded_features (to be renamed shortly). * Not tested on windows yet. Outstanding tasks still on my list (hopefully will be able to do in the next week): * Autoload still uses the old rb_feature_provided. * It is much faster on synthetic benchmarks, but still slower on many real world cases because I have only optimized the general algorithm so far and still am using a lot of `rb_funcall`s that are not necessary. * I haven't marked all my methods as static yet. * Remove old require code once I'm satisfied the new code works. * Clean up the vm->new_loaded_features stuff. Re the original ticket description, I saw the `lstats` in profiling too but believe it is a symptom not a cause. ---------------------------------------- Bug #3924: Performance bug (in require?) http://redmine.ruby-lang.org/issues/3924 Author: Carsten Bormann Status: Open Priority: Normal Assignee: Category: core Target version: 1.9.3 ruby -v: ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10] =begin Running irb < /dev/null in 1.9.2 causes 3016 calls to lstat64. For instance, there is a sequence of 28 repetitions each of lstat calls to all 6 non-empty path prefixes of /opt/local/lib/ruby1.9/1.9.1/irb.rb -- a total of 170 lstats apparently just to load this file; another set of lstats then occurs later for another 18 (times 6) times. Clearly, something is running amok in the calling sequence rb_require_safe -> realpath_rec -> lstat. Another example: Running a simple test with the baretest gem causes 17008 calls to lstat. According to perftools.rb, 80 % of the 1.2 seconds of CPU is used in Kernel#gem_original_require (and another 12 in GC, some of which may be caused by this). =end -- http://redmine.ruby-lang.org