- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

Ruby

はじめに Edit

WindowsでRubyが遅い件について。

遅いというか特にRubyGemsを使いRails周りのごってりライブラリがついていると主に起動が(もっというとライブラリのrequireが)激重になる件。

参考:既知の問題のようです…。Windows上でのRubyのファイルIOが遅いのはなぜ?

原因?と結論 Edit

WindowsのNTFSが遅いという説があります。
何だかそういうわけでもないみたい(Windowsでのディレクトリ操作が遅い?)→Windows での ruby の動作を速くしたい (1) - miauの避難所

解決策:

  • Windowsを捨てる(UbuntuなどLinuxを使う)
  • Windows上で、仮想マシン(VirtualBox, vmware)やcoLinuxで仮想ディスクイメージを作りその上で動かす(問題ない速度が出る)

下記の検証では、Windows上とcoLinuxからcofsでWindowsの領域を読み込んでますが、それでも数倍早くなってます(体感でも)。

Linux+仮想ディスク >>>> coLinux+cofs >> Windows

ベンチマークテスト Edit

題材→Four Days on Rails 2.0 (日本語版のみ)公開します

同じマシンですが、環境が全く同じにならず微妙に怪しい結果…となっています。注意

あと、思ったけど、今のRails(2009/08/08時点)で確か遅延ロードあるからあまり厳密ではないし。

Windows側テスト Edit

環境:

  • OS: Windows Vista SP2 32bit
  • CPU: Intel Quad Core Q6600
  • Memory: 2GB
  • ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
  • Rails 2.3.2
  • rake, version 0.8.7

rakeタスク

$ time rake routes
 :
real    0m15.953s
user    0m0.000s
sys     0m0.015s

$ time rake routes  # 2回目(以降ほぼ変わらず)
 :
real    0m11.315s
user    0m0.000s
sys     0m0.016s

遅い…(´・ω・`)

script/runner(Railsをまんま読み込む意味合いで)

$ time script/runner "puts 'UNKO WINDOWS'"
UNKO WINDOWS

real    0m20.271s
user    0m0.015s
sys     0m0.046s
$ time script/runner "puts 'UNKO WINDOWS'"
UNKO WINDOWS

real    0m19.303s
user    0m0.015s
sys     0m0.062s

: # 何回も実行しているとだんだん速くなってくる

$ time script/runner "puts 'UNKO WINDOWS'"
UNKO WINDOWS

real    0m11.315s
user    0m0.000s
sys     0m0.046s

しかし、やはりかなり遅い…。

coLinux(PortableUbuntu側) on Windows Edit

環境:
上記Windowsのもの+

  • OS: Ubuntu 8.04 LTS on coLinux
  • Ruby 1.8.6 (Ubuntu 8.04は1.8.7がaptで入らないので(´・ω・`))
  • Rails 2.3.2
  • rake, version 0.8.7
  • RailsのソースはWindowsのNTS上のをcofsマウント
  • 書いてて思ったけど、すごい特殊な環境な気がする!!

上記ディレクトリをcofsでマウントした場合:

$ time rake routes
 :
real	0m5.130s
user	0m2.420s
sys	0m2.690s

$ time rake routes  # 2回目(以降ほぼ変わらず)
 :
real	0m3.270s
user	0m1.460s
sys	0m1.810s

rakeが3倍速!!元ファイルの置き場が同じなのに速すぎワロタw
(というか、gemsとかRubyのファイルはcoLinuxのイメージ上(ext3)にあるからだと思う)

では次、script/runnerいってみます。

$ time ruby script/runner "puts 'UNKO WINDOWS'"
UNKO WINDOWS

real	0m4.410s
user	0m2.110s
sys	0m2.300s
$ time ruby script/runner "puts 'UNKO WINDOWS'"  #2回目以降ほぼかわらず
UNKO WINDOWS

real	0m3.990s
user	0m1.750s
sys	0m2.240s

       ヽ|/
     / ̄ ̄ ̄`ヽ、
    /         ヽ
   /  \,, ,,/    |
   | (●) (●)|||  |
   |  / ̄⌒ ̄ヽ U.|   ・・・・・・・・ゴクリ。
   |  | .l~ ̄~ヽ |   |
   |U ヽ  ̄~ ̄ ノ   |
   |    ̄ ̄ ̄    |

3~5倍以上速い件…。
しかも、初回のスピードが速い。作業始めの一発目のコマンドの速度は重要。
しかし、ここまで速度差があると…。

参考リンク Edit


No comment. Comments/Ruby/WindowsでRubyが遅い件?

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2010-09-08 Wed 19:47:11 JST (3020d)