https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2011-07-02T23:13:25Z
Ruby Issue Tracking System
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18769
2011-07-02T23:13:25Z
luislavena (Luis Lavena)
luislavena@gmail.com
<ul></ul><p>Yusuke Endoh wrote:</p>
<blockquote>
<p>There are some approaches to address the problem:</p>
<ol>
<li>
<p>to introduce a generational GC; this is impossible until 2.0 because<br>
it requires modifications to all extension libraries.</p>
</li>
<li>
<p>to diet rubygems; do not create any string, array, hash, and any<br>
object as much as possible, and do not keep the references to them.</p>
</li>
<li>
<p>to restore gem_prelude.rb to delay loading rubygems.</p>
</li>
</ol>
<p>I guess that 3 is a reasonable choice for 1.9.3. But I'm fine with any<br>
solution to fix rubygems if 1.9.3 becomes as fast as 1.9.2 on the<br>
benchmarks.</p>
</blockquote>
<p>AFAIK, The issue with gem_prelude in the past has been that it loaded by default the latest version of every gem in $LOAD_PATH, not allowing you at later time decide another version.</p>
<p>1.9.3 is in feature freeze, right? I was hoping Eric Hodel's proposal desscribed in <a href="https://blade.ruby-lang.org/ruby-core/31885">[ruby-core:31885]</a> could be implemented.</p>
<p>--<br>
Luis Lavena</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18771
2011-07-02T23:53:07Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul><li><strong>ruby -v</strong> changed from <i>ruby 1.9.3dev (2011-07-01 trunk 32356) [i686-linux]</i> to <i>-</i></li></ul><p>Hi</p>
<p>2011/7/2 Luis Lavena <a href="mailto:luislavena@gmail.com" class="email">luislavena@gmail.com</a>:</p>
<blockquote>
<p>Issue <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: come back gem_prelude! (Closed)" href="https://redmine.ruby-lang.org/issues/4962">#4962</a> has been updated by Luis Lavena.</p>
<p>Yusuke Endoh wrote:</p>
<blockquote>
<p>There are some approaches to address the problem:</p>
<p>Â 1. to introduce a generational GC; this is impossible until 2.0 because<br>
   it requires modifications to all extension libraries.</p>
<p>Â 2. to diet rubygems; do not create any string, array, hash, and any<br>
   object as much as possible, and do not keep the references to them.</p>
<p>Â 3. to restore gem_prelude.rb to delay loading rubygems.</p>
<p>I guess that 3 is a reasonable choice for 1.9.3. Â But I'm fine with any<br>
solution to fix rubygems if 1.9.3 becomes as fast as 1.9.2 on the<br>
benchmarks.</p>
</blockquote>
<p>AFAIK, The issue with gem_prelude in the past has been that it loaded by default the latest version of every gem in $LOAD_PATH, not allowing you at later time decide another version.</p>
<p>1.9.3 is in feature freeze, right? I was hoping Eric Hodel's proposal desscribed in <a href="https://blade.ruby-lang.org/ruby-core/31885">[ruby-core:31885]</a> could be implemented.</p>
</blockquote>
<p>Right. but I think this large degression can be considered blocker.<br>
I've compared 192, 192 w/o gem, trunk, trunk w/o gems by following way.</p>
<p>/usr/bin/ruby ../benchmark/driver.rb -v<br>
--executables</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18851
2011-07-06T06:59:05Z
tenderlovemaking (Aaron Patterson)
tenderlove@ruby-lang.org
<ul></ul><p>On Sat, Jul 02, 2011 at 02:18:35PM +0900, Yusuke Endoh wrote:</p>
<blockquote>
<p>Issue <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: come back gem_prelude! (Closed)" href="https://redmine.ruby-lang.org/issues/4962">#4962</a> has been reported by Yusuke Endoh.</p>
<hr>
<p>Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: come back gem_prelude! (Closed)" href="https://redmine.ruby-lang.org/issues/4962">#4962</a>: come back gem_prelude!<br>
<a href="http://redmine.ruby-lang.org/issues/4962" class="external">http://redmine.ruby-lang.org/issues/4962</a></p>
<p>Author: Yusuke Endoh<br>
Status: Open<br>
Priority: Normal<br>
Assignee: Eric Hodel<br>
Category: lib<br>
Target version: 1.9.3<br>
ruby -v: ruby 1.9.3dev (2011-07-01 trunk 32356) [i686-linux]</p>
<p>Hello, rubygems developers</p>
<p>Kosaki-san noticed that 1.9.3 is slower than 1.9.2 on many benchmarks.<br>
<a href="http://www.atdot.net/sp/view/5qunnl" class="external">http://www.atdot.net/sp/view/5qunnl</a></p>
<p>I investigated and found that the cause is the lack of gem_prelude.rb.</p>
<p>Loading rubygems seems to create many objects and keep the references<br>
to them. See below:</p>
<p>$ ruby -ve 'GC.start; p ObjectSpace.count_objects[:TOTAL]'<br>
ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux]<br>
9821</p>
<p>$ ./ruby -ve 'GC.start; p ObjectSpace.count_objects[:TOTAL]'<br>
ruby 1.9.3dev (2011-07-01 trunk 32356) [i686-linux]<br>
19638</p>
<p>$ ./ruby --disable-gems -ve 'GC.start; p ObjectSpace.count_objects[:TOTAL]'<br>
ruby 1.9.3dev (2011-07-01 trunk 32356) [i686-linux]<br>
9821</p>
<p>The number of live objects is proportional to the cost of GC mark phase.<br>
You can actually confirm the performance degradation with the following<br>
benchmark script:</p>
<p>require 'tempfile'<br>
max = 200_000<br>
str = "Hello world! " * 1000<br>
f = Tempfile.new('yarv-benchmark')<br>
f.write str<br>
GC::Profiler.enable<br>
max.times{<br>
f.seek 0<br>
f.read<br>
}<br>
p GC::Profiler.total_time</p>
<p>$ time ruby -v bm_io_file_read.rb<br>
ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux]<br>
0.7280460000000308</p>
<p>real 0m3.965s<br>
user 0m2.940s<br>
sys 0m1.024s</p>
<p>$ time ./ruby -v bm_io_file_read.rb<br>
ruby 1.9.3dev (2011-07-01 trunk 32356) [i686-linux]<br>
1.396088000000029</p>
<p>real 0m4.786s<br>
user 0m3.716s<br>
sys 0m1.060s</p>
<p>$ time ./ruby --disable-gems -v bm_io_file_read.rb<br>
ruby 1.9.3dev (2011-07-01 trunk 32356) [i686-linux]<br>
0.7640390000000309</p>
<p>real 0m4.079s<br>
user 0m2.872s<br>
sys 0m1.192s</p>
<p>The performance degradation can be seen by not only such micro benckmarks,<br>
but also my puzzle solvers :-(</p>
<p>There are some approaches to address the problem:</p>
<ol>
<li>
<p>to introduce a generational GC; this is impossible until 2.0 because<br>
it requires modifications to all extension libraries.</p>
</li>
<li>
<p>to diet rubygems; do not create any string, array, hash, and any<br>
object as much as possible, and do not keep the references to them.</p>
</li>
<li>
<p>to restore gem_prelude.rb to delay loading rubygems.</p>
</li>
</ol>
</blockquote>
<p>We can also help rbconfig go on a diet. I know it's not enough, but<br>
this eliminated ~400 object allocations on my machine. (what is the<br>
MAKEFILE_CONFIG for anyway?)</p>
<p>diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb<br>
index a2221f0..d78a347 100755<br>
--- a/tool/mkconfig.rb<br>
+++ b/tool/mkconfig.rb<br>
@@ -202,8 +202,6 @@ print <<EOS<br>
CONFIG["vendorlibdir"] = "$(vendordir)/$(ruby_version)"<br>
CONFIG["vendorarchdir"] = "$(vendorlibdir)/$(sitearch)"<br>
CONFIG["topdir"] = File.dirname(<strong>FILE</strong>)</p>
<ul>
<li>MAKEFILE_CONFIG = {}</li>
<li>CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}<br>
def RbConfig::expand(val, config = CONFIG)<br>
newval = val.gsub(/\$\$|\$\(([^()]+)\)|\$\{([^{}]+)\}/) {<br>
var = $&<br>
@@ -233,6 +231,13 @@ print <<EOS<br>
RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"]<br>
)<br>
end</li>
</ul>
<ul>
<li>
<li>def self.const_missing const</li>
<li>return super unless :MAKEFILE_CONFIG == const</li>
<li>const_set :MAKEFILE_CONFIG, {}</li>
<li>CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}</li>
<li>MAKEFILE_CONFIG</li>
<li>end<br>
end<br>
autoload :Config, "rbconfig/obsolete.rb" # compatibility for ruby-1.8.4 and older.<br>
CROSS_COMPILING = nil unless defined? CROSS_COMPILING</li>
</ul>
<p>--<br>
Aaron Patterson<br>
<a href="http://tenderlovemaking.com/" class="external">http://tenderlovemaking.com/</a></p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18852
2011-07-06T07:23:09Z
luislavena (Luis Lavena)
luislavena@gmail.com
<ul></ul><p>On Tue, Jul 5, 2011 at 6:56 PM, Aaron Patterson<br>
<a href="mailto:aaron@tenderlovemaking.com" class="email">aaron@tenderlovemaking.com</a> wrote:</p>
<blockquote>
<p>We can also help rbconfig go on a diet. Â I know it's not enough, but<br>
this eliminated ~400 object allocations on my machine. Â (what is the<br>
MAKEFILE_CONFIG for anyway?)</p>
</blockquote>
<h2>Is used by mkmf, which raises another round of questions: why is not<br>
using RbConfig::CONFIG directly?</h2>
<h2>Luis Lavena<br>
AREA 17</h2>
<p>Perfection in design is achieved not when there is nothing more to add,<br>
but rather when there is nothing more to take away.<br>
Antoine de Saint-Exupéry</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18853
2011-07-06T07:23:12Z
tenderlovemaking (Aaron Patterson)
tenderlove@ruby-lang.org
<ul></ul><p>On Wed, Jul 06, 2011 at 07:01:37AM +0900, Luis Lavena wrote:</p>
<blockquote>
<p>On Tue, Jul 5, 2011 at 6:56 PM, Aaron Patterson<br>
<a href="mailto:aaron@tenderlovemaking.com" class="email">aaron@tenderlovemaking.com</a> wrote:</p>
<blockquote>
<p>We can also help rbconfig go on a diet. I know it's not enough, but<br>
this eliminated ~400 object allocations on my machine. (what is the<br>
MAKEFILE_CONFIG for anyway?)</p>
</blockquote>
<p>Is used by mkmf, which raises another round of questions: why is not<br>
using RbConfig::CONFIG directly?</p>
</blockquote>
<p>I assume it's so that if someone mutates the hash, it doesn't impact the<br>
RbConfig::CONFIG hash. Though, if that's the case, why doesn't mkmf.rb<br>
just dup the hash rather than relying on rbconfig.</p>
<p>Maybe this patch is more appropriate:</p>
<p>diff --git a/lib/mkmf.rb b/lib/mkmf.rb<br>
index 9b0b8c7..efaa603 100644<br>
--- a/lib/mkmf.rb<br>
+++ b/lib/mkmf.rb<br>
@@ -6,7 +6,7 @@ require 'rbconfig'<br>
require 'fileutils'<br>
require 'shellwords'</p>
<p>-CONFIG = RbConfig::MAKEFILE_CONFIG<br>
+CONFIG = RbConfig.makefile_config<br>
ORIG_LIBPATH = ENV['LIB']</p>
<p>C_EXT = %w[c m]<br>
diff --git a/template/fake.rb.in b/template/fake.rb.in<br>
index 7bfa0ae..b487a79 100755<br>
--- a/template/fake.rb.in<br>
+++ b/template/fake.rb.in<br>
@@ -24,7 +24,7 @@ end</p>
<p>$:.unshift(File.expand_path("..", <strong>FILE</strong>))<br>
posthook = proc do</p>
<ul>
<li>mkconfig = RbConfig::MAKEFILE_CONFIG</li>
</ul>
<ul>
<li>mkconfig = RbConfig.makefile_config<br>
extout = File.expand_path(mkconfig["EXTOUT"], mkconfig["builddir"])<br>
$arch_hdrdir = "#{extout}/include/$(arch)"<br>
$ruby = baseruby<br>
@@ -33,7 +33,7 @@ end<br>
prehook = proc do |extmk|<br>
unless extmk<br>
config = RbConfig::CONFIG</li>
</ul>
<ul>
<li>mkconfig = RbConfig::MAKEFILE_CONFIG</li>
</ul>
<ul>
<li>mkconfig = RbConfig.makefile_config<br>
builddir = File.expand_path(File.dirname(<strong>FILE</strong>))<br>
mkconfig["top_srcdir"] = $top_srcdir = File.expand_path("@top_srcdir@", builddir)<br>
mkconfig["rubyhdrdir"] = "$(top_srcdir)/include"<br>
diff --git a/tool/compile_prelude.rb b/tool/compile_prelude.rb<br>
index 6ad9fce..0674754 100755<br>
--- a/tool/compile_prelude.rb<br>
+++ b/tool/compile_prelude.rb<br>
@@ -49,9 +49,9 @@ class Prelude<br>
key = $1<br>
unless @mkconf<br>
require './rbconfig'</li>
</ul>
<ul>
<li>
<pre><code> @mkconf = RbConfig::MAKEFILE_CONFIG.merge('prefix'=>'#{TMP_RUBY_PREFIX}')
</code></pre>
</li>
</ul>
<ul>
<li>
<pre><code> @mkconf = RbConfig.makefile_config.merge('prefix'=>'#{TMP_RUBY_PREFIX}')
end
</code></pre>
</li>
</ul>
<ul>
<li>
<pre><code> if RbConfig::MAKEFILE_CONFIG.has_key? key
</code></pre>
</li>
</ul>
<ul>
<li>
<pre><code> @mkconf.has_key? key
val = RbConfig.expand("$(#{key})", @mkconf)
@need_ruby_prefix ||= /\A\#\{TMP_RUBY_PREFIX\}/ =~ val
c_esc(val)
</code></pre>
</li>
</ul>
<p>diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb<br>
index a2221f0..e924696 100755<br>
--- a/tool/mkconfig.rb<br>
+++ b/tool/mkconfig.rb<br>
@@ -202,8 +202,6 @@ print <<EOS<br>
CONFIG["vendorlibdir"] = "$(vendordir)/$(ruby_version)"<br>
CONFIG["vendorarchdir"] = "$(vendorlibdir)/$(sitearch)"<br>
CONFIG["topdir"] = File.dirname(<strong>FILE</strong>)</p>
<ul>
<li>MAKEFILE_CONFIG = {}</li>
<li>CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}<br>
def RbConfig::expand(val, config = CONFIG)<br>
newval = val.gsub(/\$\$|\$\(([^()]+)\)|\$\{([^{}]+)\}/) {<br>
var = $&<br>
@@ -233,6 +231,17 @@ print <<EOS<br>
RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"]<br>
)<br>
end</li>
</ul>
<ul>
<li>
<li>def self.makefile_config</li>
<li>hash = CONFIG.dup</li>
<li>hash.each { |k,v| hash[k] = v.dup }</li>
<li>end</li>
<li>
<li>def self.const_missing const</li>
<li>return super unless :MAKEFILE_CONFIG == const</li>
<li>const_set :MAKEFILE_CONFIG, makefile_config</li>
<li>MAKEFILE_CONFIG</li>
<li>end<br>
end<br>
autoload :Config, "rbconfig/obsolete.rb" # compatibility for ruby-1.8.4 and older.<br>
CROSS_COMPILING = nil unless defined? CROSS_COMPILING<br>
diff --git a/win32/Makefile.sub b/win32/Makefile.sub<br>
index 0b1361a..34be069 100644<br>
--- a/win32/Makefile.sub<br>
+++ b/win32/Makefile.sub<br>
@@ -968,7 +968,7 @@ $(ruby_pc): $(RBCONFIG)<br>
@$(MINIRUBY) -r./rbconfig -p <br>
-e 'STDOUT.binmode' <br>
-e '$$<em>.gsub!(/@([a-z</em>]\w*)@/i) {' \</li>
</ul>
<ul>
<li>-e '(RbConfig::MAKEFILE_CONFIG[$$1] or "").gsub(/$$((.+?))/, %Q[$${\1}])' \</li>
</ul>
<ul>
<li>-e '(RbConfig::CONFIG[$$1] or "").gsub(/$$((.+?))/, %Q[$${\1}])' <br>
-e '}' <br>
$(srcdir)/template/ruby.pc.in > $@</li>
</ul>
<p>diff --git a/win32/resource.rb b/win32/resource.rb<br>
index 786edb0..34a1df2 100755<br>
--- a/win32/resource.rb<br>
+++ b/win32/resource.rb<br>
@@ -2,7 +2,7 @@</p>
<p>require './rbconfig'</p>
<p>-CONFIG = RbConfig::MAKEFILE_CONFIG<br>
+CONFIG = RbConfig.makefile_config</p>
<p>version = RUBY_VERSION.split(/./)<br>
patch = CONFIG['PATCHLEVEL']</p>
<p>--<br>
Aaron Patterson<br>
<a href="http://tenderlovemaking.com/" class="external">http://tenderlovemaking.com/</a></p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18858
2011-07-06T08:46:38Z
drbrain (Eric Hodel)
drbrain@segment7.net
<ul></ul><p>I have found some unnecessary work in rubygems and am running benchmarks to see what effect delaying them until they're necessary have on <code>make benchmark</code>.</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18859
2011-07-06T09:23:06Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul></ul><blockquote>
<p>I have found some unnecessary work in rubygems and am running benchmarks to see what effect delaying them until they're necessary have on <code>make benchmark</code>.</p>
</blockquote>
<p>Great!<br>
Do we have any chance to get your improvement until 1.9.3 release?</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18860
2011-07-06T11:06:17Z
drbrain (Eric Hodel)
drbrain@segment7.net
<ul></ul><p>I need to verify both correctness of the behavior of RubyGems and speed improvements in <code>make benchmark</code>.</p>
<p>I should be able to commit my changes and report my findings tomorrow.</p>
<p>It would help if someone could comment on Aaron's rbconfig.rb patch, I do not have enough experience to commit it, but it should help increase startup speed.</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18863
2011-07-06T13:13:44Z
drbrain (Eric Hodel)
drbrain@segment7.net
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Assigned</i></li></ul><p>I have made three runs of <code>make benchmark</code> using the following revisions of ruby:</p>
<p>ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.8.0]</p>
<p>ruby 1.9.3dev (2011-07-05 trunk 32413) [x86_64-darwin10.8.0]</p>
<p>The benchmark bm_vm_thread_mutex3.rb was disabled as it presented an an extreme outlier for 1.9.2p180.</p>
<p>I took the total time it took all benchmarks to run.</p>
<p>The first run is with the ruby checkout</p>
<p>1.9.2: 204.890 206.312 209.319<br>
1.9.3: 210.793 215.815 214.773<br>
diff: 5.903 9.503 5.454</p>
<p>(For diff, smaller is better)</p>
<p>The second run is with --disable-gems for 1.9.3. I modified RUNRUBY in Makefile:</p>
<p>RUNRUBY = $(MINIRUBY) $(srcdir)/tool/runruby.rb --extout=$(EXTOUT) $(RUNRUBYOPT) -- --disable-gems</p>
<p>1.9.2: 215.472 206.452 205.110<br>
1.9.3: 201.837 194.694 191.747<br>
diff: -13.635 -11.758 -13.363</p>
<p>The third run is with my changes to delay work in rubygems.rb:</p>
<p>1.9.2: 208.982 211.249 208.637<br>
1.9.3: 198.714 201.984 198.293<br>
diff: -10.268 -9.265 -10.344</p>
<p>Here are the average differences from 1.9.2-p180:</p>
<p>stock ruby trunk: 6.953<br>
--disable-gems: -12.919<br>
rubygems patches: -9.959</p>
<p>Is the slowdown of 2.96 seconds between --disable-gems and my fixes across all benchmarks acceptable?</p>
<p>Should I look for additional improvements?</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18867
2011-07-06T18:53:05Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul></ul><p>Hi</p>
<p>Nice improvement!</p>
<blockquote>
<p>Issue <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: come back gem_prelude! (Closed)" href="https://redmine.ruby-lang.org/issues/4962">#4962</a> has been updated by Eric Hodel.</p>
<p>Status changed from Open to Assigned</p>
<p>I have made three runs of <code>make benchmark</code> using the following revisions of ruby:</p>
<p>ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.8.0]</p>
<p>ruby 1.9.3dev (2011-07-05 trunk 32413) [x86_64-darwin10.8.0]</p>
<p>The benchmark bm_vm_thread_mutex3.rb was disabled as it presented an an extreme outlier for 1.9.2p180.</p>
</blockquote>
<p>Ah, yes. This is the reason why I rewrote GVL. We should ignore it.</p>
<blockquote>
<p>I took the total time it took all benchmarks to run.</p>
<p>The first run is with the ruby checkout</p>
<p>1.9.2: Â 204.890 206.312 209.319<br>
1.9.3: Â 210.793 215.815 214.773<br>
diff: Â 5.903 Â 9.503 Â 5.454</p>
<p>(For diff, smaller is better)</p>
<p>The second run is with --disable-gems for 1.9.3. Â I modified RUNRUBY in Makefile:</p>
<p>RUNRUBY</p>
</blockquote>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18869
2011-07-06T20:59:06Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p>Hello,</p>
<p>2011/7/6 KOSAKI Motohiro <a href="mailto:kosaki.motohiro@gmail.com" class="email">kosaki.motohiro@gmail.com</a>:</p>
<blockquote>
<p>Anyway, personally I think it is acceptable and no more improvemnt<br>
because usually people only<br>
compare 1.9.2 and 1.9.3 and don't compare individual patches in 1.9.3 changes.</p>
<p>Endoh-san, What do you think?</p>
</blockquote>
<p>Looks very good. I'd like to try it myself. Eric, could you<br>
show the patch? Or, you may commit it directly to ruby trunk<br>
if you think the patch is simple.</p>
<p>--<br>
Yusuke Endoh <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a></p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18875
2011-07-07T03:23:11Z
drbrain (Eric Hodel)
drbrain@segment7.net
<ul></ul><p>On Jul 6, 2011, at 2:48 AM, KOSAKI Motohiro wrote:</p>
<blockquote>
<blockquote>
<p>Here are the average differences from 1.9.2-p180:</p>
<p>stock ruby trunk: 6.953<br>
--disable-gems: -12.919<br>
rubygems patches: -9.959</p>
<p>Is the slowdown of 2.96 seconds between --disable-gems and my fixes across all benchmarks acceptable?</p>
<p>Should I look for additional improvements?</p>
</blockquote>
<p>Great!</p>
<p>Can you please tell us a result of vm3_gc and io_file_read? They have<br>
most big degressions and I'm worry about it.</p>
</blockquote>
<p>io_file_read</p>
<p>--disable-gems: 3.978 3.768 4.007<br>
rubygems patch: 3.944 3.960 4.072</p>
<p>vm3_gc</p>
<p>--disable-gems: 1.166 1.157 1.154<br>
rubygems patch: 1.616 1.630 1.632</p>
<p>I poked at setting RUBY_HEAP_MIN_SLOTS@000 when starting up ruby with rubygems enabled. This allowed ruby to start up without running the garbage collector and didn't affect the resident size of the process much.</p>
<p>I didn't run a full <code>make benchmark</code> to see if it made any larger difference.</p>
<blockquote>
<p>Anyway, personally I think it is acceptable and no more improvemnt<br>
because usually people only compare 1.9.2 and 1.9.3 and don't compare individual patches in 1.9.3 changes.</p>
</blockquote>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18876
2011-07-07T03:23:12Z
drbrain (Eric Hodel)
drbrain@segment7.net
<ul></ul><p>On Jul 6, 2011, at 4:57 AM, Yusuke ENDOH wrote:</p>
<blockquote>
<p>2011/7/6 KOSAKI Motohiro <a href="mailto:kosaki.motohiro@gmail.com" class="email">kosaki.motohiro@gmail.com</a>:</p>
<blockquote>
<p>Anyway, personally I think it is acceptable and no more improvemnt<br>
because usually people only<br>
compare 1.9.2 and 1.9.3 and don't compare individual patches in 1.9.3 changes.</p>
<p>Endoh-san, What do you think?</p>
</blockquote>
<p>Looks very good. I'd like to try it myself. Eric, could you<br>
show the patch? Or, you may commit it directly to ruby trunk<br>
if you think the patch is simple.</p>
</blockquote>
<p>The patch is simple, I will commit it after I eat lunch (about 2 hours).</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18880
2011-07-07T06:21:07Z
drbrain (Eric Hodel)
drbrain@segment7.net
<ul></ul><p>Please try r32429</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18882
2011-07-07T07:23:07Z
Eregon (Benoit Daloze)
<ul></ul><p>On 6 July 2011 23:21, Eric Hodel <a href="mailto:drbrain@segment7.net" class="email">drbrain@segment7.net</a> wrote:</p>
<blockquote>
<p>Please try r32429</p>
</blockquote>
<p>I just tried, and here are some numbers.<br>
Surprising how such a change can move numbers.</p>
<p>$ time ruby -e ''<br>
before: 0.045<br>
no-gems: 0.013<br>
after: 0.024</p>
<p>$ ruby -e 'p ObjectSpace.count_objects[:TOTAL]'<br>
before: 20033<br>
no-gems: 9811<br>
after: 14308</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18883
2011-07-07T07:29:13Z
drbrain (Eric Hodel)
drbrain@segment7.net
<ul></ul><p>On Jul 6, 2011, at 3:02 PM, Benoit Daloze wrote:</p>
<blockquote>
<p>On 6 July 2011 23:21, Eric Hodel <a href="mailto:drbrain@segment7.net" class="email">drbrain@segment7.net</a> wrote:</p>
<blockquote>
<p>Please try r32429</p>
</blockquote>
<p>I just tried, and here are some numbers.<br>
Surprising how such a change can move numbers.</p>
<p>$ time ruby -e ''<br>
before: 0.045<br>
no-gems: 0.013<br>
after: 0.024</p>
<p>$ ruby -e 'p ObjectSpace.count_objects[:TOTAL]'<br>
before: 20033<br>
no-gems: 9811<br>
after: 14308</p>
</blockquote>
<p>I'm unsure if TOTAL is counting what we think it's counting. It seems to be showing the size of the object space not the number of allocated objects. If you add allocated and FREE from the output below you'll get TOTAL.</p>
<p>$ cat diffhash.rb<br>
gems</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18965
2011-07-09T09:36:50Z
drbrain (Eric Hodel)
drbrain@segment7.net
<ul></ul><p>May I close this ticket?</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18967
2011-07-09T13:20:50Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul><li><strong>Assignee</strong> changed from <i>drbrain (Eric Hodel)</i> to <i>nobu (Nobuyoshi Nakada)</i></li></ul><p>Now, nobu is reviewing Aaron's patch. Please don't close it awhile. Instead I reassign the ticket to nobu.</p>
<p>Thanks.</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=18968
2011-07-09T13:34:04Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul></ul><p>And, here is laster benchmark comparision on Linux Fedora15 x86-64.</p>
<p>You have to ignore vm_thead_xx and vm3_clearmethodcache. They are influenced another changes.<br>
And only followint three have significant difference.</p>
<p>name 192r31932-nogems 192r31932 trunk-nogems trunk<br>
app_mandelbrot 3.240 3.274 3.398 4.125<br>
io_file_read 6.756 7.214 7.685 8.123<br>
vm3_gc 2.084 2.167 2.259 3.296</p>
<p>Do anyone have more improvement idea?</p>
<p>Cheeers.</p>
% /usr/bin/ruby ../benchmark/driver.rb -v --executables="192r31932-nogems::~/ruby/bin/ruby-192-r31932 --disable-gems; 192r31932::~/ruby/bin/ruby-192-r31932; trunk-nogems::~/ruby/bin/ruby-trunk --disable-gems; trunk::~/ruby/bin/ruby-trunk -I../lib -I. -I.ext/common ../tool/runruby.rb --extout=.ext --" --pattern='bm_' --directory=../benchmark -r 5
Elapesed time: 39930.060974 (sec)
-----------------------------------------------------------
benchmark results:
minimum results in each 5 measurements.
name 192r31932-nogems 192r31932 trunk-nogems trunk
app_answer 0.157 0.154 0.156 0.195
app_erb 2.475 2.484 2.517 2.652
app_factorial 2.558 2.591 2.482 2.737
app_fib 1.833 1.845 1.777 1.906
app_mandelbrot 3.240 3.274 3.398 4.125
app_pentomino 32.655 32.803 33.764 34.966
app_raise 1.146 1.148 1.081 1.189
app_strconcat 2.734 2.808 2.821 2.832
app_tak 2.791 2.787 2.714 2.770
app_tarai 2.153 2.145 2.170 2.225
app_uri 1.633 1.628 1.654 1.767
io_file_create 2.514 2.482 2.035 2.214
io_file_read 6.756 7.214 7.685 8.123
io_file_write 2.206 2.152 2.161 2.254
io_select 2.253 2.283 2.550 2.619
io_select2 6.379 6.478 7.192 6.084
io_select3 0.871 0.847 0.887 0.937
loop_for 3.003 3.036 2.863 2.905
loop_generator 1.031 1.073 0.889 0.945
loop_times 2.606 2.593 2.636 2.753
loop_whileloop 1.608 1.606 1.534 1.265
loop_whileloop2 0.347 0.334 0.335 0.321
so_ackermann 2.034 2.008 2.023 2.062
so_array 2.369 2.375 2.884 2.935
so_binary_trees 0.889 0.913 0.932 0.995
so_concatenate 7.358 7.322 7.271 7.310
so_count_words 0.534 0.535 0.515 0.585
so_exception 2.150 2.172 2.022 2.245
so_fannkuch 2.821 2.809 2.793 3.147
so_fasta 4.160 4.225 4.446 4.784
so_k_nucleotide 3.341 3.400 3.232 3.313
so_lists 1.651 1.675 1.661 1.717
so_mandelbrot 11.325 11.690 11.764 11.530
so_matrix 1.530 1.526 1.542 1.592
so_meteor_contest 9.493 8.700 8.517 9.820
so_nbody 8.184 8.339 8.191 7.797
so_nested_loop 2.527 2.447 2.443 2.491
so_nsieve 7.351 7.252 8.503 8.516
so_nsieve_bits 4.920 4.945 4.896 4.973
so_object 1.779 1.781 1.752 1.750
so_partial_sums 10.433 10.625 10.520 10.269
so_pidigits 1.710 1.750 1.811 1.986
so_random 1.834 1.899 1.958 1.863
so_reverse_complement 3.198 3.351 3.542 3.615
so_sieve 2.141 2.161 2.439 2.489
so_spectralnorm 7.887 8.088 7.805 7.412
vm1_block* 3.863 3.462 3.850 3.953
vm1_const* 0.821 0.860 1.107 0.668
vm1_ensure* 0.951 1.012 1.197 0.973
vm1_ivar* 1.238 1.232 0.879 0.878
vm1_ivar_set* 1.824 1.286 1.126 1.201
vm1_length* 1.389 1.329 1.403 1.260
vm1_neq* 0.921 0.902 1.114 0.831
vm1_not* 0.297 0.315 0.407 0.514
vm1_rescue* 0.140 0.124 0.361 0.134
vm1_simplereturn* 2.389 2.409 2.992 2.523
vm1_swap* 2.000 2.011 2.081 1.033
vm2_array* 1.421 1.463 1.443 1.910
vm2_case* 0.314 0.331 0.322 0.297
vm2_defined_method* 6.192 6.221 6.884 6.565
vm2_eval* 29.320 29.618 30.998 38.323
vm2_method* 3.458 3.479 3.610 3.790
vm2_mutex* 1.748 1.776 2.010 1.905
vm2_poly_method* 5.353 5.345 5.992 5.731
vm2_poly_method_ov* 0.546 0.554 0.530 0.472
vm2_proc* 0.913 0.930 0.984 0.994
vm2_regexp* 2.351 2.379 2.412 2.398
vm2_send* 0.554 0.595 0.500 0.552
vm2_super* 1.119 1.145 1.328 1.244
vm2_unif1* 0.566 0.587 0.599 0.580
vm2_zsuper* 1.242 1.290 1.476 1.385
vm3_clearmethodcache 4.762 4.992 0.822 1.008
vm3_gc 2.084 2.167 2.259 3.296
vm_thread_alive_check1 0.346 0.356 0.436 0.516
vm_thread_create_join 5.791 5.737 5.932 5.915
vm_thread_mutex1 1.568 1.587 1.642 1.700
vm_thread_mutex2 1.596 1.616 5.558 2.638
vm_thread_mutex3 3131.381 1335.436 4.009 4.089
vm_thread_pass 0.130 0.137 1.687 1.862
vm_thread_pass_flood 0.356 0.311 0.705 0.847
vm_thread_pipe 1.154 1.133 2.515 2.459
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=19061
2011-07-11T08:53:14Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul></ul><p>Hi,</p>
<p>At Wed, 6 Jul 2011 06:56:09 +0900,<br>
Aaron Patterson wrote in <a href="/issues/4962">[ruby-core:37813]</a>:</p>
<blockquote>
<p>We can also help rbconfig go on a diet. I know it's not enough, but<br>
this eliminated ~400 object allocations on my machine. (what is the<br>
MAKEFILE_CONFIG for anyway?)</p>
</blockquote>
<p>MAKEFILE_CONFIG keeps make macros unexpanded. So you should<br>
keep MAKEFILE_CONFIG not CONFIG, and expand it dynamically when<br>
the latter is accessed.</p>
<p>--<br>
Nobu Nakada</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=19062
2011-07-11T08:56:58Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul><li><strong>Status</strong> changed from <i>Assigned</i> to <i>Closed</i></li></ul><blockquote>
<p>MAKEFILE_CONFIG keeps make macros unexpanded. So you should<br>
keep MAKEFILE_CONFIG not CONFIG, and expand it dynamically when<br>
the latter is accessed.</p>
</blockquote>
<p>Then, I'll close this ticket.<br>
Aaron, if you have a motivation of a respin, could you please create a new ticket ?<br>
This thread is already too long and have multiple topics.</p>
Ruby master - Bug #4962: come back gem_prelude!
https://redmine.ruby-lang.org/issues/4962?journal_id=19129
2011-07-13T14:53:15Z
tenderlovemaking (Aaron Patterson)
tenderlove@ruby-lang.org
<ul></ul><p>On Mon, Jul 11, 2011 at 08:50:12AM +0900, Nobuyoshi Nakada wrote:</p>
<blockquote>
<p>Hi,</p>
<p>At Wed, 6 Jul 2011 06:56:09 +0900,<br>
Aaron Patterson wrote in <a href="/issues/4962">[ruby-core:37813]</a>:</p>
<blockquote>
<p>We can also help rbconfig go on a diet. I know it's not enough, but<br>
this eliminated ~400 object allocations on my machine. (what is the<br>
MAKEFILE_CONFIG for anyway?)</p>
</blockquote>
<p>MAKEFILE_CONFIG keeps make macros unexpanded. So you should<br>
keep MAKEFILE_CONFIG not CONFIG, and expand it dynamically when<br>
the latter is accessed.</p>
</blockquote>
<p>I see. What did you think of my patch that only defined MAKEFILE_CONFIG<br>
during const_missing? That /should/ result in the same behavior (I<br>
think).</p>
<p>--<br>
Aaron Patterson<br>
<a href="http://tenderlovemaking.com/" class="external">http://tenderlovemaking.com/</a></p>