Actions
Bug #11095
closedsevere performance regression since r50336
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.3.0dev (2015-04-23) [sparc64-solaris2.10]
Description
sparc64-solaris2.10 にて、r50336 以降、
Rubyビルド時の
Generating RI format into /XXXXX/.ext/rdoc...
および、bootstraptest/test_eval.rb の306行目付近の
assert_normal_exit %q{
hash = {}
("aaaa".."matz").each_with_index do |s, i|
hash[s] = i
end
begin
eval "class C; @@h = #{hash.inspect}; end"
end
}, '[ruby-core:25714]'
の2か所が、それぞれ極端に長時間かかるようになりました。
合計10時間以上かかる場合も見られました。
r50336をrevertすると、それぞれ、せいぜい分単位程度のごく短時間で終了します。
r50336の変更により、str_buf_cat の際に以前行なっていた4096バイト単位でのメモリ確保を行わなくなり、
常にぴったりのサイズでの realloc を毎回行うようになったため、
後から文字列に別の文字列を複数回追加するような処理を行う際のパフォーマンスが、
malloc(3C)の性能に完全に依存するようになり、環境によっては、
パフォーマンスが極端に落ちたのだと思います。
取り急ぎは、r50336のrevertを希望します。
どこまでをmallocに依存してどこまでをRuby独自でやるのがよいかは後で考えるとして。
Actions
Like0
Like0Like0Like0Like0Like0