[ruby-dev:48983] [Ruby trunk - Bug #11095] severe performance regression since r50336
From:
usa@...
Date:
2015-05-21 01:42:53 UTC
List:
ruby-dev #48983
Issue #11095 has been updated by Usaku NAKAMURA.
Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN to 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: DONTNEED
----------------------------------------
Bug #11095: severe performance regression since r50336
https://bugs.ruby-lang.org/issues/11095#change-52518
* Author: Naohisa Goto
* Status: Closed
* Priority: Normal
* Assignee:
* ruby -v: ruby 2.3.0dev (2015-04-23) [sparc64-solaris2.10]
* Backport: 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: DONTNEED
----------------------------------------
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/