Issue #11095 has been updated by Nobuyoshi Nakada.

Status changed from Open to Closed

----------------------------------------
Bug #11095: severe performance regression since r50336
https://bugs.ruby-lang.org/issues/11095#change-52251

* Author: Naohisa Goto
* Status: Closed
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.3.0dev (2015-04-23) [sparc64-solaris2.10]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
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独自でやるのがよいかは後で考えるとして。




-- 
https://bugs.ruby-lang.org/