桑田といいます。
Process.times() で返されるユーザ時間の値が正しくない現象が
発生して困っています。
どなたかアドバイスをいただけたらと思います。
●症状
Process.times() で返される user time が、real time の約 1/3 に
なっている。
●再現コード
fib.rb:
----------------------------------------
def fib(n)
return n <= 2 ? 1 : fib(n-1)+fib(n-2)
end
t1 = Process.times
start_t = Time.now
n = 35
print "fib(#{n})="
puts fib(n)
t2 = Process.times
end_t = Time.now
user_t = t2.utime - t1.utime
sys_t = t2.stime - t1.stime
real_t = end_t - start_t
puts "*** user %4.4s, sys %4.4s, real %4.4s" % [user_t, sys_t, real_t]
----------------------------------------
実行結果:
----------------------------------------
$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux]
$ time ruby fib.rb
fib(35)=9227465
*** user 3.31, sys 0.0, real 10.0
real 0m10.089s
user 0m3.312s
sys 0m0.000s
----------------------------------------
real time は約10秒ですが、user time はその 1/3 になっています。
もちろん、他にCPUを消費しているようなプロセスはありません。
Ruby 1.9 でも症状は変わりません。
----------------------------------------
$ time /usr/local/ruby/1.9.1-p243/bin/ruby fib.rb
fib(35)=9227465
*** user 0.54, sys 0.0, real 1.66
real 0m1.850s
user 0m0.547s
sys 0m0.001s
----------------------------------------
●環境
FedoraCore 11, x86_64, Macbook(Intel CoreDuo2 2GHz)
●補足
実は Perl 5 でも同じ現象が発生しているので、Ruby固有の
問題ではなく、x86_64 linux の問題かもしれません。
(でも Python では発生していません。)
どなたか、ヒントになる情報がありましたらよろしくお願いします。
--
regards,
makoto kuwata