public
Created

Compare different performance patches for Ruby 2.0.0dev under Windows

  • Download Gist
0-setup.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
Environment information:
CPU: Core 2 Duo T7500 2.2 GHz
RAM: 4 GB
OS: Windows 7 x64 Ultimate
AV: Windows Security Essentials 2.1.1116.0 (WSE)
Profile: High Performance
 
HDD: ImDisk 1.5GB, 0% fragmentation
 
Bench on emptyapp were perform against Rails 3.1.3 with sqlite3 1.3.5
Bench on Enki application were using it's Gemfile and slightly modified to use sqlite3 1.3.5
 
NOTE: This is the RAW information I've collected, there has been no alteration or further analysis on it. Make your own conclusions about it.
 
Patches tested:
 
Feature #5767 - Cache expanded_load_path to reduce startup time
http://bugs.ruby-lang.org/issues/5767
 
Feature #5427 - Not complex patch to improve `require` time (load.c)
http://bugs.ruby-lang.org/issues/5427
 
load_ok performance improvements
https://groups.google.com/group/thecodeshop/browse_thread/thread/a684b15cb54a33dd
 
Fenix
https://github.com/luislavena/fenix
1-bench-default.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
# ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
# default build
 
V:\emptyapp>ruby script\rails runner -e development "puts $LOAD_PATH.size, $LOADED_FEATURES.size"
62
729
 
V:\emptyapp>ruby script\rails runner -e production "puts $LOAD_PATH.size, $LOADED_FEATURES.size"
62
740
 
real 7.488
system 4.820
user 2.636
 
real 7.472
system 4.773
user 2.620
 
real 7.503
system 4.976
user 2.511
 
real 7.425
system 4.914
user 2.496
 
real 7.612
system 4.726
user 2.854
 
V:\emptyapp>ruby script\rails runner -e production "0"
$LOAD_PATH: 62
$LOADED_FEATURES: 743
expanded_count: 134276
absolute_count: 0
realpath_count: 716
 
V:\measurements>rci --disable-gems bench core_require_empty
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal ------------------------------------------------------
core_require_empty 1.139000 3.463000 4.602000 ( 4.700006)
--------------------------------------------- total: 4.602000sec
 
user system total real
core_require_empty 1.170000 3.463000 4.633000 ( 4.670007)
 
V:\measurements>rci --disable-gems bench core_require_empty
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal ------------------------------------------------------
core_require_empty 1.295000 3.260000 4.555000 ( 4.660006)
--------------------------------------------- total: 4.555000sec
 
user system total real
core_require_empty 1.107000 3.463000 4.570000 ( 4.650007)
 
V:\measurements>rci --disable-gems bench core_require_empty
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal ------------------------------------------------------
core_require_empty 1.357000 3.245000 4.602000 ( 4.680006)
--------------------------------------------- total: 4.602000sec
 
user system total real
core_require_empty 1.217000 3.354000 4.571000 ( 4.670007)
 
V:\measurements>rci --disable-gems bench core_require_nested
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal -------------------------------------------------------
core_require_nested 1.513000 3.682000 5.195000 ( 5.280007)
---------------------------------------------- total: 5.195000sec
 
user system total real
core_require_nested 1.654000 3.494000 5.148000 ( 5.230008)
 
V:\measurements>rci --disable-gems bench core_require_nested
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal -------------------------------------------------------
core_require_nested 1.217000 4.040000 5.257000 ( 5.310008)
---------------------------------------------- total: 5.257000sec
 
user system total real
core_require_nested 1.357000 3.760000 5.117000 ( 5.270007)
 
V:\measurements>rci --disable-gems bench core_require_nested
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal -------------------------------------------------------
core_require_nested 1.404000 3.837000 5.241000 ( 5.280007)
---------------------------------------------- total: 5.241000sec
 
user system total real
core_require_nested 1.467000 3.729000 5.196000 ( 5.240008)
 
# enki : https://github.com/xaviershay/enki
 
V:\enki>SET RUBYOPT=-rV:/replace
V:\enki>ruby -rV:/replace script\rails runner -e production ""
$LOAD_PATH: 71
$LOADED_FEATURES: 1040
expanded_count: 206601
absolute_count: 0
realpath_count: 1011
 
V:\enki>SET RUBYOPT=
V:\enki>timer ruby script\rails runner -e production "0"
real 12.101
system 7.753
user 4.274
 
real 12.142
system 7.472
user 4.617
 
real 12.157
system 7.410
user 4.711
 
real 12.161
system 7.394
user 4.680
 
real 12.224
system 7.690
user 4.430
2-bench-cached.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
# ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
# CACHED_LOAD_PATH
 
V:\>SET RUBY_CACHED_LOAD_PATH=1
 
V:\emptyapp>ruby script\rails runner -e production "puts $LOAD_PATH.size, $LOADED_FEATURES.size"
62
740
 
real 2.589
system 1.138
user 1.466
 
real 2.636
system 1.060
user 1.544
 
real 2.605
system 1.045
user 1.544
 
real 2.589
system 1.170
user 1.404
 
real 2.605
system 1.076
user 1.513
 
V:\emptyapp>ruby script\rails runner -e production "0"
$LOAD_PATH: 62
$LOADED_FEATURES: 743
expanded_count: 27124
absolute_count: 0
realpath_count: 716
 
V:\measurements>rci --disable-gems bench core_require_empty
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal ------------------------------------------------------
core_require_empty 0.687000 1.841000 2.528000 ( 2.630003)
--------------------------------------------- total: 2.528000sec
 
user system total real
core_require_empty 0.905000 1.513000 2.418000 ( 2.600004)
 
V:\measurements>rci --disable-gems bench core_require_empty
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal ------------------------------------------------------
core_require_empty 0.733000 1.903000 2.636000 ( 2.770004)
--------------------------------------------- total: 2.636000sec
 
user system total real
core_require_empty 0.562000 1.888000 2.450000 ( 2.590004)
 
V:\measurements>rci --disable-gems bench core_require_empty
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal ------------------------------------------------------
core_require_empty 0.717000 1.810000 2.527000 ( 2.590004)
--------------------------------------------- total: 2.527000sec
 
user system total real
core_require_empty 0.890000 1.575000 2.465000 ( 2.580003)
 
V:\measurements>rci --disable-gems bench core_require_nested
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal -------------------------------------------------------
core_require_nested 0.811000 2.325000 3.136000 ( 3.200004)
---------------------------------------------- total: 3.136000sec
 
user system total real
core_require_nested 0.780000 2.230000 3.010000 ( 3.160005)
 
V:\measurements>rci --disable-gems bench core_require_nested
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal -------------------------------------------------------
core_require_nested 0.936000 2.152000 3.088000 ( 3.180004)
---------------------------------------------- total: 3.088000sec
 
user system total real
core_require_nested 0.874000 2.106000 2.980000 ( 3.150005)
 
V:\measurements>rci --disable-gems bench core_require_nested
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal -------------------------------------------------------
core_require_nested 0.890000 2.169000 3.059000 ( 3.190004)
---------------------------------------------- total: 3.059000sec
 
user system total real
core_require_nested 0.827000 2.246000 3.073000 ( 3.160005)
 
# enki : https://github.com/xaviershay/enki
 
V:\enki>SET RUBYOPT=-rV:/replace
V:\enki>ruby script\rails runner -e production "0"
$LOAD_PATH: 71
$LOADED_FEATURES: 1040
expanded_count: 41053
absolute_count: 0
realpath_count: 1011
 
V:\enki>SET RUBYOPT=
V:\enki>timer ruby script\rails runner -e production "0"
real 5.989
system 2.839
user 3.104
 
real 5.970
system 3.213
user 2.714
 
real 5.904
system 3.088
user 2.776
 
real 5.988
system 2.823
user 3.104
 
real 5.923
system 2.808
user 3.042
3-bench-combined.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
# ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
# load_ok + CACHED_LOAD_PATH + Fenix
 
V:\>SET RUBY_CACHED_LOAD_PATH=1
V:\>SET RUBY_USE_ATTRIBUTE=1
V:\>SET RUBYOPT=-rfenix/replace
 
V:\emptyapp>ruby script\rails runner -e production "puts $LOAD_PATH.size, $LOADED_FEATURES.size"
62
742
 
real 2.254
system 0.780
user 1.435
 
real 2.278
system 0.624
user 1.622
 
real 2.289
system 0.561
user 1.700
 
real 2.277
system 0.702
user 1.528
 
real 2.277
system 0.624
user 1.560
 
$LOAD_PATH: 62
$LOADED_FEATURES: 745
expanded_count: 27124
absolute_count: 0
realpath_count: 716
 
V:\measurements>rci --disable-gems bench core_require_empty
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal ------------------------------------------------------
core_require_empty 0.593000 0.827000 1.420000 ( 1.476082)
--------------------------------------------- total: 1.420000sec
 
user system total real
core_require_empty 0.671000 0.686000 1.357000 ( 1.445672)
 
V:\measurements>rci --disable-gems bench core_require_empty
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal ------------------------------------------------------
core_require_empty 0.578000 0.795000 1.373000 ( 1.465061)
--------------------------------------------- total: 1.373000sec
 
user system total real
core_require_empty 0.717000 0.733000 1.450000 ( 1.447079)
 
V:\measurements>rci --disable-gems bench core_require_empty
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal ------------------------------------------------------
core_require_empty 0.484000 0.920000 1.404000 ( 1.468082)
--------------------------------------------- total: 1.404000sec
 
user system total real
core_require_empty 0.437000 0.905000 1.342000 ( 1.442465)
 
V:\measurements>rci --disable-gems bench core_require_nested
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal -------------------------------------------------------
core_require_nested 0.889000 1.248000 2.137000 ( 2.216921)
---------------------------------------------- total: 2.137000sec
 
user system total real
core_require_nested 0.733000 1.248000 1.981000 ( 2.161667)
 
V:\measurements>rci --disable-gems bench core_require_nested
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal -------------------------------------------------------
core_require_nested 0.858000 1.186000 2.044000 ( 2.062685)
---------------------------------------------- total: 2.044000sec
 
user system total real
core_require_nested 0.718000 1.232000 1.950000 ( 2.044879)
 
V:\measurements>rci --disable-gems bench core_require_nested
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal -------------------------------------------------------
core_require_nested 0.764000 1.248000 2.012000 ( 2.064114)
---------------------------------------------- total: 2.012000sec
 
user system total real
core_require_nested 0.624000 1.295000 1.919000 ( 2.036914)
 
# enki : https://github.com/xaviershay/enki
 
V:\enki>SET RUBYOPT=-rfenix/replace -rV:/replace-fenix
V:\enki>ruby script\rails runner -e production "0"
$LOAD_PATH: 71
$LOADED_FEATURES: 1042
expanded_count: 41053
absolute_count: 0
realpath_count: 1011
 
V:\enki>SET RUBYOPT=-rfenix/replace
V:\enki>timer ruby script\rails runner -e production "0"
real 3.613
system 0.858
user 2.745
 
real 3.645
system 0.936
user 2.714
 
real 3.642
system 0.826
user 2.761
 
real 3.651
system 0.842
user 2.745
 
real 3.643
system 0.920
user 2.698
4-bench-combined-2.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
# ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
# load_ok + CACHED_LOAD_PATH + SORTED_FEATURES + Fenix
 
V:\>SET RUBY_CACHED_LOAD_PATH=1
V:\>SET RUBY_USE_ATTRIBUTE=1
V:\>SET RUBYOPT=-rfenix/replace
 
V:\emptyapp>ruby script\rails runner -e production "puts $LOAD_PATH.size, $LOADED_FEATURES.size"
62
742
 
real 2.131
system 0.577
user 1.513
 
real 2.083
system 0.546
user 1.450
 
real 2.123
system 0.624
user 1.482
 
real 2.129
system 0.639
user 1.482
 
real 2.093
system 0.577
user 1.497
 
V:\emptyapp>ruby script\rails runner -e production ""
$LOAD_PATH: 62
$LOADED_FEATURES: 745
expanded_count: 27124
absolute_count: 0
realpath_count: 716
 
V:\measurements>rci --disable-gems bench core_require_empty
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal ------------------------------------------------------
core_require_empty 0.500000 0.951000 1.451000 ( 1.527085)
--------------------------------------------- total: 1.451000sec
 
user system total real
core_require_empty 0.686000 0.687000 1.373000 ( 1.459083)
 
V:\measurements>rci --disable-gems bench core_require_empty
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal ------------------------------------------------------
core_require_empty 0.624000 0.765000 1.389000 ( 1.472069)
--------------------------------------------- total: 1.389000sec
 
user system total real
core_require_empty 0.437000 0.889000 1.326000 ( 1.451073)
 
V:\measurements>rci --disable-gems bench core_require_empty
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal ------------------------------------------------------
core_require_empty 0.718000 0.764000 1.482000 ( 1.581888)
--------------------------------------------- total: 1.482000sec
 
user system total real
core_require_empty 0.655000 0.749000 1.404000 ( 1.452078)
 
V:\measurements>rci --disable-gems bench core_require_nested
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal -------------------------------------------------------
core_require_nested 0.671000 1.248000 1.919000 ( 2.067114)
---------------------------------------------- total: 1.919000sec
 
user system total real
core_require_nested 0.717000 1.248000 1.965000 ( 2.042912)
 
V:\measurements>rci --disable-gems bench core_require_nested
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal -------------------------------------------------------
core_require_nested 0.842000 1.264000 2.106000 ( 2.176486)
---------------------------------------------- total: 2.106000sec
 
user system total real
core_require_nested 0.843000 1.201000 2.044000 ( 2.069119)
 
V:\measurements>rci --disable-gems bench core_require_nested
ruby 2.0.0dev (2011-12-17 trunk 34060) [i386-mingw32]
RubyGems disabled
Rehearsal -------------------------------------------------------
core_require_nested 0.734000 1.263000 1.997000 ( 2.061913)
---------------------------------------------- total: 1.997000sec
 
user system total real
core_require_nested 0.765000 1.279000 2.044000 ( 2.053082)
 
# enki : https://github.com/xaviershay/enki
 
V:\enki>SET RUBYOPT=-rfenix/replace -rV:/replace-fenix
V:\enki>ruby script\rails runner -e production "0"
$LOAD_PATH: 71
$LOADED_FEATURES: 1042
expanded_count: 41053
absolute_count: 0
realpath_count: 1011
 
V:\enki>SET RUBYOPT=-rfenix/replace
V:\enki>timer ruby script\rails runner -e production "0"
real 3.527
system 0.889
user 2.558
 
real 3.511
system 0.889
user 2.558
 
real 3.506
system 0.811
user 2.605
 
real 3.487
system 0.842
user 2.574
 
real 3.519
system 0.920
user 2.574
replace.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
$expanded_count = 0
$absolute_count = 0
$realpath_count = 0
 
class File < IO
class << self
alias_method :orig_expand_path, :expand_path
 
def expand_path(file_name, dir_string = nil)
$expanded_count += 1
# for replace-fenix we use Fenix::File.expand_path instead
orig_expand_path file_name, dir_string
end
 
alias_method :orig_absolute_path, :absolute_path
 
def absolute_path(file_name, dir_string = nil)
$absolute_count += 1
orig_absolute_path(file_name, dir_string)
end
 
alias_method :orig_realpath, :realpath
 
def realpath(pathname, dir_string = nil)
$realpath_count += 1
orig_realpath pathname, dir_string
end
 
def results
puts "$LOAD_PATH: #{$LOAD_PATH.size}"
puts "$LOADED_FEATURES: #{$LOADED_FEATURES.size}"
puts "expanded_count: #{$expanded_count}"
puts "absolute_count: #{$absolute_count}"
puts "realpath_count: #{$realpath_count}"
end
end
end
 
at_exit { File.results }

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.