Project

General

Profile

Bug #11095

severe performance regression since r50336

Added by ngoto (Naohisa Goto) over 5 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.3.0dev (2015-04-23) [sparc64-solaris2.10]
[ruby-dev:48946]

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独自でやるのがよいかは後で考えるとして。


Related issues

Has duplicate Ruby master - Bug #11080: [PERF] bm_so_concatenate.rb regressionClosednobu (Nobuyoshi Nakada)Actions

Also available in: Atom PDF