Bug #2447: reduce GC pressure by symbol table without String instance
http://redmine.ruby-lang.org/issues/show/2447
e$B5/I<<Te(B: Yusuke E.
e$B%9%F!<%?%9e(B: Open, e$BM%@hEYe(B: Normal
e$BC4Ev<Te(B: Koichi Sasada, e$B%+%F%4%je(B: core, Target version: 1.9.x
ruby -v: ruby 1.9.2dev (2009-12-06 trunk 26025) [i686-linux]
e$B1sF#$G$9!#e(B
e$B8=:_$N%7%s%%k%F!<%V%k$O!"%7%s%%k$4$H$Ke(B String
e$B$N%$%s%9%?%s%9$re(B
e$B3d$jEv$F$F%7%s%%kL>$r4IM}$7$^$9$,!"$=$N$;$$$Ge(B GC
e$B$N8zN($,Mn$A$Fe(B
e$B$$$k$H;W$$$^$9!#e(B
String e$B$G$O$J$/e(B ALLOC
e$B$GD>@\3NJ]$7$?NN0h$G4IM}$9$k%Q%C%A$r=q$-$^e(B
e$B$7$?!#6KC<$JNc$G$O$3$N$/$i$$Aa$/$J$j$^$9!#e(B
e$B%Q%C%AA0e(B
$ time ./ruby.org -e ‘10000.times { GC.start }; p
ObjectSpace.count_objects[:T_STRING]’
1778
real 0m3.766s
user 0m3.764s
sys 0m0.004s
e$B%Q%C%A8ee(B
$ time ./ruby.new -e ‘10000.times { GC.start }; p
ObjectSpace.count_objects[:T_STRING]’
433
real 0m2.880s
user 0m2.876s
sys 0m0.004s
benchmark e$B7k2L$O:G8e$K$"$j$^$9!#B?$/$N$b$N$O$[$\JQ$o$i$J$$$+B.$/e(B
e$B$J$C$F$$$k$H;W$$$^$9!#e(B
so_meteor_contest e$B$OM-0U$KB.EYDc2<$7$^$9$,e(B (e$B:[email protected]$"$je(B)
e$B!“M}M3$Oe(B
e$B$h$/$o$+$j$^$;$s!#e(Bvm3_thread_mutex
e$B$O<B9T$9$kEY$K<B9T;~4V$,Bg$-$/e(B
e$BJQ$o$C$F$$$?e(B (3 e$BIC0J2<$+$ie(B 30 e$BICD6e(B)
e$B$N$G!”;29M$K$J$j$^$;$s$G$7$?!#e(B
e$B$I$J$?$+DI;n$7$F$/[email protected]$5$k$H=u$+$j$^$9!#;d$N4D6-$Ge(B make test-all
e$B$Oe(B
e$BDL$C$F$$$^$9!#e(B
1.89s (2.57%): vm2_eval 73.65->71.76
1.88s (2.44%): so_fannkuch 77.14->75.25
1.86s (8.08%): so_partial_sums 23.04->21.18
1.73s (7.20%): so_mandelbrot 23.98->22.26
1.43s (8.68%): so_spectralnorm 16.43->15.00
1.02s (6.19%): so_nbody 16.49->15.47
0.99s (1.13%): app_pentomino 87.50->86.51
0.82s (6.67%): vm1_block 12.23->11.41
0.76s (5.28%): so_nsieve_bits 14.37->13.61
0.51s (15.68%): vm3_gc 3.25->2.74
0.34s (3.16%): so_fasta 10.69->10.35
0.23s (5.13%): so_exception 4.52->4.29
0.22s (3.01%): loop_for 7.45->7.22
0.19s (9.06%): app_raise 2.10->1.91
0.18s (4.67%): so_object 3.88->3.70
0.12s (1.77%): loop_times 6.54->6.42
0.11s (8.49%): so_random 1.31->1.20
0.09s (2.44%): app_uri 3.88->3.78
0.09s (1.07%): vm1_simplereturn 8.35->8.26
0.07s (4.13%): app_strconcat 1.64->1.57
0.06s (0.80%): vm2_mutex 7.33->7.27
0.06s (2.94%): app_erb 1.95->1.89
0.05s (0.59%): vm2_method 8.94->8.89
0.04s (1.04%): vm2_array 3.63->3.59
0.04s (0.97%): vm1_rescue 3.80->3.76
0.03s (0.56%): so_nested_loop 5.88->5.85
0.03s (0.75%): loop_generator 3.83->3.80
0.03s (0.51%): so_pidigits 5.38->5.35
0.03s (2.87%): io_file_read 0.95->0.93
0.03s (0.74%): vm2_proc 3.51->3.48
0.02s (0.65%): vm1_ensure 3.82->3.79
0.02s (1.45%): vm2_poly_method_ov 1.64->1.61
0.02s (0.74%): vm2_zsuper 2.88->2.86
0.02s (2.50%): app_mandelbrot 0.83->0.80
0.02s (0.46%): app_tak 4.36->4.34
0.02s (1.34%): vm2_case 1.24->1.23
0.01s (1.04%): io_file_create 1.18->1.17
0.01s (0.43%): so_matrix 2.11->2.10
0.01s (0.18%): so_ackermann 3.62->3.62
0.01s (0.19%): app_fib 3.21->3.21
0.01s (1.47%): so_sieve 0.41->0.40
0.00s (0.06%): vm1_ivar 6.23->6.22
0.00s (0.03%): so_concatenate 1.91->1.91
0.00s (0.05%): app_factorial 0.66->0.66
0.00s (0.00%): vm1_neq 6.22->6.22
-0.00s (-0.03%): vm2_send 2.02->2.02
-0.00s (-0.41%): app_answer 0.24->0.25
-0.00s (-1.53%): so_reverse_complement 0.09->0.09
-0.00s (-1.96%): so_k_nucleotide 0.07->0.07
-0.00s (-0.38%): io_file_write 0.44->0.44
-0.00s (-0.11%): loop_whileloop 3.38->3.39
-0.00s (-0.13%): app_tarai 3.51->3.51
-0.01s (-0.64%): so_count_words 1.09->1.10
-0.01s (-0.68%): so_lists 1.68->1.69
-0.02s (-2.50%): loop_whileloop2 0.67->0.68
-0.02s (-1.04%): vm2_unif1 1.76->1.78
-0.02s (-1.12%): so_binary_trees 1.81->1.83
-0.03s (-1.10%): vm2_super 2.75->2.78
-0.03s (-0.56%): vm1_const 5.80->5.83
-0.05s (-0.70%): vm2_regexp 6.55->6.59
-0.05s (-0.51%): vm3_thread_create_join 10.49->10.55
-0.06s (-1.18%): vm1_swap 5.18->5.24
-0.11s (-2.21%): vm1_not 4.91->5.02
-0.14s (-1.19%): vm2_poly_method 11.83->11.97
-0.14s (-2.11%): vm1_length 6.64->6.78
-0.15s (-2.33%): vm1_ivar_set 6.57->6.72
-0.18s (-2.42%): so_array 7.40->7.58
-0.31s (-2.23%): so_nsieve 13.79->14.10
-2.22s (-8.38%): so_meteor_contest 26.50->28.72
-26.20s (-177.28%): vm3_thread_mutex 14.78->40.99
–
Yusuke E. [email protected]
e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B
In message “Re: [ruby-dev:39846] [Bug #2447] reduce GC pressure by
symbol table without String instance”
on Sun, 6 Dec 2009 23:24:59 +0900, Yusuke E.
[email protected] writes:
|e$B8=:_$N%7%s%%k%F!<%V%k$O!"%7%s%%k$4$H$Ke(B String e$B$N%$%s%9%?%s%9$re(B
|e$B3d$jEv$F$F%7%s%%kL>$r4IM}$7$^$9$,!"$=$N$;$$$Ge(B GC e$B$N8zN($,Mn$A$Fe(B
|e$B$$$k$H;W$$$^$9!#e(B
|
|String e$B$G$O$J$/e(B ALLOC e$B$GD>@\3NJ]$7$?NN0h$G4IM}$9$k%Q%C%A$r=q$-$^e(B
|e$B$7$?!#6KC<$JNc$G$O$3$N$/$i$$Aa$/$J$j$^$9!#e(B
e$B3N$+$K!#<B$Oe(BSymbole$B$re(BGCe$B$NBP>]$H$7$h$&[email protected]~$G8=>u$N$h$&$Ke(B
e$B$J$C$F$$$k$N$G$9$,!";W$C$?$h$jFq$7$/$FJ|CV$7$F$^$9!#EvLL!"e(B
Symbole$B$Ne(BGCe$B$O$G$-$=$&[email protected]$+$i!“1sF#$5$s$N;XE&$N$h$&$K$9e(B
e$B$Y$-$J$N$+$J$”!#e(B
e$B%o%J%Y$H?=$7$^$9!#e(B
09/12/06 Yusuke E. [email protected]:
e$B8=:_$N%7%s%%k%F!<%V%k$O!"%7%s%%k$4$H$Ke(B String e$B$N%$%s%9%?%s%9$re(B
e$B3d$jEv$F$F%7%s%%kL>$r4IM}$7$^$9$,!"$=$N$;$$$Ge(B GC e$B$N8zN($,Mn$A$Fe(B
e$B$$$k$H;W$$$^$9!#e(B
String e$B$G$O$J$/e(B ALLOC e$B$GD>@\3NJ]$7$?NN0h$G4IM}$9$k%Q%C%A$r=q$-$^e(B
e$B$7$?!#6KC<$JNc$G$O$3$N$/$i$$Aa$/$J$j$^$9!#e(B
e$B!JCfN,!Ke(B
e$B$I$J$?$+DI;n$7$F$/[email protected]$5$k$H=u$+$j$^$9!#;d$N4D6-$Ge(B make test-all e$B$Oe(B
e$BDL$C$F$$$^$9!#e(B
e$B6=L#$,$"$j$^$9$N$G;n$7$F$_$?$H$3$m!"e(B
e$B>/$7IT;W5D$J7k2L$K$J$j$^$7$?$N$GJs9p$5$;[email protected]$-$^$9!#e(B
e$B>:Y$O$o$+$j$^$;$s$,!“4D6-$,IO<e$G$”$k$3$H$,4X78$7$F$$$k$H;W$o$l$^$9!#e(B
[email protected]$N%Y%s%A%^!<%/7k2L$rKvHx$KE:IU$7$^$9!#e(B
e$B$=$N$&$ABg$-$/:9$,$"$C$?$b$N$K$D$$$F!"2~$a$F:[email protected]$rD4$Y$^$7$?!#e(B
-
e$BB.$/$J$C$?$b$N!":[email protected]$"$je(B
app_pentomino : 185 - 187 e$BICe(B => 182 - 183 e$BICe(B
so_fannkuch : 194 - 195 e$BICe(B => 191 - 192 e$BICe(B
so_mandelbrot : 56.1 - 56.3 e$BICe(B => 48.2 - 48.3 e$BICe(B
so_nbody : 39.2 - 39.5 e$BICe(B => 34.4 - 35.0 e$BICe(B
so_partial_sums : 54.3 - 54.5 e$BICe(B => 47.0 - 47.0 e$BICe(B
so_spectralnorm : 39.4 - 39.6 e$BICe(B => 35.4 - 35.5 e$BICe(B
vm1_block* : 28.5 - 29.5 e$BICe(B => 22.5 - 22.8 e$BICe(B
vm1_const* : 6.4 - 6.6 e$BICe(B => 5.5 - 5.5 e$BICe(B
vm1_not* : 5.6 - 5.8 e$BICe(B => 4.1 - 4.2 e$BICe(B
vm3_gc : 10.4 - 10.5 e$BICe(B => 9.0 - 9.0 e$BICe(B
-
e$BCY$/$J$C$?$b$N!":[email protected]$"$je(B
loop_whileloop2 : 17.0 - 17.5 e$BICe(B => 18.0 - 18.5 e$BICe(B
so_ackermann : 8.6 - 8.7 e$BICe(B => 8.7 - 8.9 e$BICe(B
so_exception : 11.8 - 12.2 e$BICe(B => 12.8 - 13.4 e$BICe(B
so_meteor_contest : 46.4 - 48.8 e$BICe(B => 50.4 - 51.2 e$BICe(B
so_reverse_complement : 388 - 389 e$BICe(B => 391 - 392 e$BICe(B
vm2_eval* : 195 - 198 e$BICe(B => 206 - 207 e$BICe(B
-
[email protected]%G!<%?$G$OJQ2=$,$"$C$?$,!":[email protected]$N$J$$$b$Ne(B
app_tak : e$B%Q%C%AA08e$H$b$Ke(B 10.5 - 11.2 e$BICe(B
io_file_read : e$B%Q%C%AA08e$H$b$Ke(B 39 - 42 e$BICe(B
loop_generator : e$B%Q%C%AA08e$H$b$Ke(B 5.6 - 6.2 e$BICe(B
loop_times : e$B%Q%C%AA08e$H$b$Ke(B 14.1 - 14.5 e$BICe(B
so_count_words : e$B%Q%C%AA08e$H$b$Ke(B 2 - 5 e$BICe(B
so_array : e$B%Q%C%AA08e$H$b$Ke(B 13 - 19 e$BICe(B
so_sieve : e$B%Q%C%AA08e$H$b$Ke(B 1.3 - 4.2 e$BICe(B
benchmark results:
name ruby 1.9.2dev (2009-12-06 trunk 26029) [i386-mingw32] ruby
1.9.2dev (2009-12-06 trunk 26029) [i386-mingw32]
app_answer 0.766 0.797
app_erb 4.484 4.422
app_factorial 2.500 2.641
app_fib 7.797 7.984
app_mandelbrot 2.125 2.172
app_pentomino 187.578 183.078
app_raise 5.422 5.438
app_strconcat 3.313 3.172
app_tak 10.547 11.141
app_tarai 9.203 9.313
app_uri 8.828 8.391
io_file_create 33.641 32.641
io_file_read 39.219 42.203
io_file_write 28.719 28.578
loop_for 15.875 15.875
loop_generator 5.719 6.125
loop_times 13.984 14.328
loop_whileloop 8.125 8.156
loop_whileloop2 1.734 1.844
so_ackermann 8.672 8.781
so_array 19.031 13.938
so_binary_trees 3.906 4.016
so_concatenate 3.719 3.813
so_count_words 5.734 6.844
so_exception 12.047 13.203
so_fannkuch 195.047 191.688
so_fasta 25.000 24.891
so_k_nucleotide 16.469 16.797
so_lists 3.453 3.406
so_mandelbrot 56.344 48.313
so_matrix 4.172 4.266
so_meteor_contest 46.438 50.484
so_nbody 39.297 34.922
so_nested_loop 11.859 12.031
so_nsieve 28.922 29.125
so_nsieve_bits 27.938 27.281
so_object 9.063 9.656
so_partial_sums 54.563 47.047
so_pidigits 17.578 17.594
so_random 3.609 3.328
so_reverse_complement 387.969 392.344
so_sieve 2.234 1.531
so_spectralnorm 39.375 35.422
vm1_block* 29.516 22.875
vm1_const* 6.438 5.547
vm1_ensure* 2.344 2.250
vm1_ivar* 7.844 7.547
vm1_ivar_set* 7.031 7.000
vm1_length* 8.797 8.594
vm1_neq* 6.547 6.922
vm1_not* 5.688 4.172
vm1_rescue* 2.328 2.250
vm1_simplereturn* 13.078 12.797
vm1_swap* 4.375 4.328
vm2_array* 15.063 15.016
vm2_case* 1.844 1.656
vm2_eval* 195.141 206.078
vm2_method* 19.266 19.016
vm2_mutex* 12.469 12.422
vm2_poly_method* 24.109 24.188
vm2_poly_method_ov* 2.344 2.328
vm2_proc* 5.859 5.844
vm2_regexp* 9.953 9.438
vm2_send* 3.156 2.891
vm2_super* 4.781 4.641
vm2_unif1* 2.813 2.625
vm2_zsuper* 5.500 5.406
vm3_gc 10.531 9.031
vm3_thread_create_join 27.234 27.828
vm3_thread_mutex 3.000 3.188
e$B%A%1%C%He(B #2447 e$B$,99?7$5$l$^$7$?!#e(B (by Yusuke E.)
e$B1sF#$G$9!#e(B
[email protected]$i$+$Ke(B feature request e$B$J$N$G0\F0$7$^$9!#e(B
http://redmine.ruby-lang.org/issues/show/2447
e$B1sF#$G$9!#e(B
2009e$BG/e(B12e$B7ne(B8e$BF|e(B18:37 wanabe [email protected]:
e$B$I$J$?$+DI;n$7$F$/[email protected]$5$k$H=u$+$j$^$9!#;d$N4D6-$Ge(B make test-all e$B$Oe(B
e$BDL$C$F$$$^$9!#e(B
e$B6=L#$,$"$j$^$9$N$G;n$7$F$_$?$H$3$m!"e(B
e$B>/$7IT;W5D$J7k2L$K$J$j$^$7$?$N$GJs9p$5$;[email protected]$-$^$9!#e(B
e$B>:Y$O$o$+$j$^$;$s$,!“4D6-$,IO<e$G$”$k$3$H$,4X78$7$F$$$k$H;W$o$l$^$9!#e(B
[email protected]$N%Y%s%A%^!<%/7k2L$rKvHx$KE:IU$7$^$9!#e(B
e$B$=$N$&$ABg$-$/:9$,$"$C$?$b$N$K$D$$$F!"2~$a$F:[email protected]$rD4$Y$^$7$?!#e(B
e$B$H$F$b>$7$$DI;n!"$"$j$,$H$&$4$6$$$^$9!#e(B
vm3_gc : 10.4 - 10.5 e$BICe(B => 9.0 - 9.0 e$BICe(B
e$B$=$l$>$le(B 2% e$B!"e(B2% e$B!"e(B14% e$B!"e(B12% e$B!"e(B14%
e$B!"e(B10% e$B!"e(B21% e$B!"e(B15% e$B!"e(B27% e$B!"e(B13%
e$B$/$i$$$N9bB.2=$G$9$M!#e(B
- e$BCY$/$J$C$?$b$N!":[email protected]$"$je(B
loop_whileloop2 : 17.0 - 17.5 e$BICe(B => 18.0 - 18.5 e$BICe(B
so_ackermann : 8.6 - 8.7 e$BICe(B => 8.7 - 8.9 e$BICe(B
so_exception : 11.8 - 12.2 e$BICe(B => 12.8 - 13.4 e$BICe(B
so_meteor_contest : 46.4 - 48.8 e$BICe(B => 50.4 - 51.2 e$BICe(B
so_reverse_complement : 388 - 389 e$BICe(B => 391 - 392 e$BICe(B
vm2_eval* : 195 - 198 e$BICe(B => 206 - 207 e$BICe(B
-6% e$B!"e(B-2% e$B!"e(B-9% e$B!"e(B-7% e$B!"e(B-1% e$B!"e(B-5%
e$B$/$i$$$G$9$M!#e(B
[email protected]$($P!"B.$/[email protected]$($k$N$G$O$J$$$+$H;W$$$^$9!#e(B
e$B$I$&$G$7$g$&$+!#e(B