[ruby-list:46001] Windows上でのRubyのファイルIOが遅いのはなぜ?
From:
Masatoshi Itagaki <masatoshi@...>
Date:
2009-05-09 03:44:01 UTC
List:
ruby-list #46001
板垣です。
前々から気になっていた事をポストします。Windows上でのRubyの速度の件です。
速度といっても、通常のマイクロベンチマークではなく、ファイルIOに限った問題です。
仕事上、Windows以外にUbuntu LinuxやMac OS Xも使っているのですが、Railsで
の開発で、テストサーバやコンソールの起動、テストの実行などのスピードが、
Windowsとそれ以外で大きく異なっているのに気がついていました。
インタプリタ自体の動作の差はそれほどないのに、上記のような状況で遅くなる
のはファイルIOのせいだろうと当たりを付けて、下記のようなベンチマークを行って
見ました。
遅くなる状況を考慮して、小さいサイズのファイルを多数作成し、それらを読み込んで
連結出力するようなベンチマークです。
自宅ではメインマシンがMacBookであるため、古いノートでの結果です。
require "benchmark"
File.open(__FILE__,'r') do |f|
$testdata = f.read
end
Benchmark.bm(7,">total:",">avg:") do |bm|
testresults = []
10.times do |i|
testresults << bm.report("#{i + 1}:") do
Dir.mkdir("testdir") unless File.exists?("testdir")
Dir.chdir("testdir") do
1000.times do |i|
File.open("testfile#{i}.txt","w") do |f|
f.write $testdata
end
end
File.open("join.txt","w") do |of|
Dir.glob("testfile*.txt") do |fn|
File.open(fn) do |in_file|
of.write in_file.read
end
File.unlink(fn)
end
end
File.unlink("join.txt")
end
end
end
testtotal = testresults.inject {|total,test| total += test}
[testtotal, testtotal / 10]
end
テスト環境
ハード
NEC LaVie M LM500/4
CPU Mobile Pentium III 1133MHz
Memory 512MB
Windows XP Pro SP3(ウイルス対策オフ)
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
user system total real
1: 0.380000 2.123000 2.503000 ( 3.725000)
2: 0.531000 2.033000 2.564000 ( 3.145000)
3: 0.391000 2.183000 2.574000 ( 3.114000)
4: 0.440000 2.083000 2.523000 ( 3.095000)
5: 0.381000 2.233000 2.614000 ( 3.154000)
6: 0.511000 1.913000 2.424000 ( 3.205000)
7: 0.480000 2.103000 2.583000 ( 3.124000)
8: 0.371000 2.223000 2.594000 ( 4.016000)
9: 0.320000 2.173000 2.493000 ( 3.095000)
10: 0.451000 2.023000 2.474000 ( 3.144000)
>total: 4.256000 21.090000 25.346000 ( 32.817000)
>avg: 0.425600 2.109000 2.534600 ( 3.281700)
Ubuntu Linux Desktop 7.04
ruby 1.8.6 (2007-06-07 patchlevel 36) [i486-linux]
user system total real
1: 0.010000 0.010000 0.020000 ( 0.273358)
2: 0.010000 0.020000 0.030000 ( 0.251698)
3: 0.020000 0.030000 0.050000 ( 0.284182)
4: 0.000000 0.040000 0.040000 ( 0.290983)
5: 0.020000 0.020000 0.040000 ( 0.307011)
6: 0.020000 0.030000 0.050000 ( 0.303224)
7: 0.020000 0.030000 0.050000 ( 0.315228)
8: 0.100000 0.160000 0.260000 ( 0.276737)
9: 0.080000 0.170000 0.250000 ( 0.259840)
10: 0.110000 0.180000 0.290000 ( 0.288993)
>total: 0.390000 0.690000 1.080000 ( 2.851254)
>avg: 0.039000 0.069000 0.108000 ( 0.285125)
これで解る通り10倍以上の差が出ています。
ちなみにWindowsでウイルス対策(Norton AntiVirus Game Edition 2009)を
有効にした場合、Permissionエラーが発生して正常に計測できませんでした。
WindowsのファイルシステムNTFSの問題かとも思い別のマシンでFAT32との
比較もしてみましたが差はありませんでした。
--
---------------------
いたさん
http://rails.to/