Ruby Issue Tracking System: Issues
https://bugs.ruby-lang.org/
https://bugs.ruby-lang.org/favicon.ico?1711330511
2012-11-15T18:37:12Z
Ruby Issue Tracking System
Redmine
Ruby master - Bug #7356 (Closed): ruby-2.0.0-preview1 で adlint-2.6.10 が性能劣化
https://bugs.ruby-lang.org/issues/7356
2012-11-15T18:37:12Z
yanoh (Yutaka Yanoh)
yutaka@yanoh.mydns.jp
<p>== 現象</p>
<p>ruby-1.9.3-p327 と ruby-2.0.0-preview1 で adlint-2.6.10 の性能比較を行った結果、<br>
ruby-2.0.0-preview1 の方が解析時間が 1.2 倍ほど長くかかりました。</p>
<p>== 再現手順</p>
<p>% gem install adlint<br>
% tar xvjf adlint-benchmark-screen.tar.bz2 <- 添付ファイル<br>
% cd adlint-benchmark-screen/adlint<br>
% time make -j 2 2>/dev/null</p>
<p>== 性能測定結果</p>
<p>=== 測定環境</p>
<ul>
<li>Core 2 Duo E4500 2.20GHz / 3.4GB</li>
<li>Fedora 14 / Linux 2.6.35.14-106.fc14.i686</li>
</ul>
<p>=== 測定方法</p>
<ul>
<li>
<p>下記バージョンの ruby を用いて、adlint-2.6.10 で screen-4.0.3 を解析<br>
ruby 1.9.3p327 (2012-11-10 revision 37606) [i686-linux] built with gcc-4.5.1<br>
ruby 2.0.0dev (2012-11-01 trunk 37411) [i686-linux] built with gcc-4.5.1<br>
ruby 2.0.0dev (2012-11-01 trunk 37411) [i686-linux] built with gcc-4.7.2</p>
</li>
<li>
<p>すべて configure オプションは --prefix のみ</p>
</li>
<li>
<p>解析は 2 コアを使い切れるよう make -j 2 を指定</p>
</li>
<li>
<p>できるだけ IO による遅延を抑えるため標準エラーは /dev/null へリダイレクト<br>
ただし解析結果ファイルの出力は抑止できていません</p>
</li>
</ul>
<p>=== 測定結果</p>
<ul>
<li>
<p>ruby 1.9.3p327 (2012-11-10 revision 37606) [i686-linux] built with gcc-4.5.1<br>
make -j 2 2> /dev/null 1335.85s user 7.10s system 184% cpu 12:07.79 total<br>
make -j 2 2> /dev/null 1336.54s user 7.17s system 184% cpu 12:07.80 total<br>
make -j 2 2> /dev/null 1340.71s user 7.23s system 184% cpu 12:10.69 total</p>
</li>
<li>
<p>ruby 2.0.0dev (2012-11-01 trunk 37411) [i686-linux] built with gcc-4.5.1<br>
make -j 2 2> /dev/null 1626.45s user 8.08s system 184% cpu 14:48.20 total<br>
make -j 2 2> /dev/null 1633.40s user 8.10s system 185% cpu 14:46.92 total<br>
make -j 2 2> /dev/null 1631.37s user 7.86s system 184% cpu 14:50.18 total</p>
</li>
<li>
<p>ruby 2.0.0dev (2012-11-01 trunk 37411) [i686-linux] built with gcc-4.7.2<br>
make -j 2 2> /dev/null 1531.83s user 7.85s system 184% cpu 13:53.04 total<br>
make -j 2 2> /dev/null 1533.46s user 7.97s system 184% cpu 13:54.54 total<br>
make -j 2 2> /dev/null 1532.89s user 8.03s system 184% cpu 13:53.33 total</p>
</li>
</ul>
<p>== 備考</p>
<p>adlint_sma コマンドは、最初のソースコード読み込み時と最後の解析結果書き出し時に<br>
IO が走る以外は、オンメモリで計算のみを実行しています。<br>
データ構造は木構造が多く、再帰処理を多用し、小さな一時オブジェクトを多く new し<br>
ています。</p>