Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Perl Misc (http://www.velocityreviews.com/forums/f67-perl-misc.html)
-   -   times() returns incorrect value? (http://www.velocityreviews.com/forums/t911425-times-returns-incorrect-value.html)

makoto kuwata 09-22-2009 12:50 PM

times() returns incorrect value?
 
Hi,
I have a question about times() function.
times() returns user-time, but these values seems to be incorrect.
The following is an example code to show incorrect result:

bench.pl:
----------------------------------
use strict;
use Time::HiRes;

sub fib {
my ($n) = @_;
return $n <= 2 ? 1 : fib($n-2)+fib($n-1);
}

my @start_times = times();
my $start_time = Time::HiRes::time();

my $n = 35;
print "fib($n) = ", fib($n), "\n";

my @end_times = times();
my $end_time = Time::HiRes::time();

my $user_time = $end_times[0] - $start_times[0];
my $sys_time = $end_times[1] - $start_times[1];
my $real_time = $end_time - $start_time;

my $format = "*** user %4.4f, sys %4.4f, real %4.4f\n";
printf $format, $user_time, $sys_time, $real_time;
--------------------------------

output example:
--------------------------------
$ /usr/bin/perl -v | grep built
This is perl, v5.10.0 built for x86_64-linux-thread-multi
$ time /usr/bin/perl fib.pl
fib(35) = 9227465
*** user 4.2900, sys 0.0000, real 13.1078

real 0m13.126s
user 0m4.294s
sys 0m0.001s
--------------------------------

The above output shows that real time is over 13 seconds,
but user time is reported only 4.29 seconds.
(Of course, there is no other process to consume cpu.)
I compled and installed Perl 5.10 from source, but issue is not
solved.

Environment: FedoraCore 11 (x64), Macbook (Core2Duo 2.0GHz),

$ uname -a
Linux spica.local 2.6.29.4-167.fc11.x86_64 #1 SMP Wed May 27 17:27:08
EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

Any suggestion?

--
regards,
makoto kuwata

Teo 09-22-2009 01:50 PM

Re: times() returns incorrect value?
 
Dear Makoto,

On Sep 22, 2:50*pm, makoto kuwata <kwa...@gmail.com> wrote:
> I have a question about times() function.
> times() returns user-time, but these values seems to be incorrect.
> The following is an example code to show incorrect result:
>
> bench.pl:
> ----------------------------------
> use strict;
> use Time::HiRes;
>
> sub fib {
> * my ($n) = @_;
> * return $n <= 2 ? 1 : fib($n-2)+fib($n-1);
>
> }
>
> my @start_times = times();
> my $start_time *= Time::HiRes::time();
>
> my $n = 35;
> print "fib($n) = ", fib($n), "\n";
>
> my @end_times * = times();
> my $end_time * *= Time::HiRes::time();
>
> my $user_time = $end_times[0] - $start_times[0];
> my $sys_time *= $end_times[1] - $start_times[1];
> my $real_time = $end_time * * - $start_time;
>
> my $format = "*** user %4.4f, sys %4.4f, real %4.4f\n";
> printf $format, $user_time, $sys_time, $real_time;
> --------------------------------
>
> output example:
> --------------------------------
> $ /usr/bin/perl -v | grep built
> This is perl, v5.10.0 built for x86_64-linux-thread-multi
> $ time /usr/bin/perl fib.pl
> fib(35) = 9227465
> *** user 4.2900, sys 0.0000, real 13.1078
>
> real * *0m13.126s
> user * *0m4.294s
> sys * * 0m0.001s
> --------------------------------
>
> The above output shows that real time is over 13 seconds,
> but user time is reported only 4.29 seconds.
> (Of course, there is no other process to consume cpu.)
> I compled and installed Perl 5.10 from source, but issue is not
> solved.
>
> Environment: FedoraCore 11 (x64), Macbook (Core2Duo 2.0GHz),
>
> $ uname -a
> Linux spica.local 2.6.29.4-167.fc11.x86_64 #1 SMP Wed May 27 17:27:08
> EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
>
> Any suggestion?


In fact it is strange: on my Fedora machine I cannot reproduce the
problem:

$ time perl fib.pl
fib(35) = 9227465
*** user 26.2800, sys 0.0600, real 27.3968

real 0m27.430s
user 0m26.300s
sys 0m0.066s

The only difference is that you are on 64 bit platform (while I'm
still on a 32 bit one).

$ uname -a
Linux matteo.ethz.ch 2.6.30.5-43.fc11.i586 #1 SMP Thu Aug 27 21:18:54
EDT 2009 i686 i686 i386 GNU/Linux
$ /usr/bin/perl -v | grep built
This is perl, v5.10.0 built for i386-linux-thread-multi

Are you sure that no other processes are running? Did you try it in
single user mode?

I can observe the same behavior only with a high machine load (e.g.,
starting several instances of the process).

Matteo


makoto kuwata 09-22-2009 10:23 PM

Re: times() returns incorrect value?
 
Thank you, Teo.
I update FedoreCore11 Kernel and issue seems to be fixed.
It is kernel problem, not Perl problem. Oh my god.

--
regards,
makoto kuwata

On 2009-09-22, 10:50pm, Teo <matteo.co...@gmail.com> wrote:
> Dear Makoto,
>
> On Sep 22, 2:50*pm, makoto kuwata <kwa...@gmail.com> wrote:
>
>
>
>
>
> > I have a question about times() function.
> > times() returns user-time, but these values seems to be incorrect.
> > The following is an example code to show incorrect result:

>
> > bench.pl:
> > ----------------------------------
> > use strict;
> > use Time::HiRes;

>
> > sub fib {
> > * my ($n) = @_;
> > * return $n <= 2 ? 1 : fib($n-2)+fib($n-1);

>
> > }

>
> > my @start_times = times();
> > my $start_time *= Time::HiRes::time();

>
> > my $n = 35;
> > print "fib($n) = ", fib($n), "\n";

>
> > my @end_times * = times();
> > my $end_time * *= Time::HiRes::time();

>
> > my $user_time = $end_times[0] - $start_times[0];
> > my $sys_time *= $end_times[1] - $start_times[1];
> > my $real_time = $end_time * * - $start_time;

>
> > my $format = "*** user %4.4f, sys %4.4f, real %4.4f\n";
> > printf $format, $user_time, $sys_time, $real_time;
> > --------------------------------

>
> > output example:
> > --------------------------------
> > $ /usr/bin/perl -v | grep built
> > This is perl, v5.10.0 built for x86_64-linux-thread-multi
> > $ time /usr/bin/perl fib.pl
> > fib(35) = 9227465
> > *** user 4.2900, sys 0.0000, real 13.1078

>
> > real * *0m13.126s
> > user * *0m4.294s
> > sys * * 0m0.001s
> > --------------------------------

>
> > The above output shows that real time is over 13 seconds,
> > but user time is reported only 4.29 seconds.
> > (Of course, there is no other process to consume cpu.)
> > I compled and installed Perl 5.10 from source, but issue is not
> > solved.

>
> > Environment: FedoraCore 11 (x64), Macbook (Core2Duo 2.0GHz),

>
> > $ uname -a
> > Linux spica.local 2.6.29.4-167.fc11.x86_64 #1 SMP Wed May 27 17:27:08
> > EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

>
> > Any suggestion?

>
> In fact it is strange: on my Fedora machine I cannot reproduce the
> problem:
>
> $ time perl fib.pl
> fib(35) = 9227465
> *** user 26.2800, sys 0.0600, real 27.3968
>
> real * *0m27.430s
> user * *0m26.300s
> sys * * 0m0.066s
>
> The only difference is that you are on 64 bit platform (while I'm
> still on a 32 bit one).
>
> $ uname -a
> Linux matteo.ethz.ch 2.6.30.5-43.fc11.i586 #1 SMP Thu Aug 27 21:18:54
> EDT 2009 i686 i686 i386 GNU/Linux
> $ /usr/bin/perl -v | grep built
> This is perl, v5.10.0 built for i386-linux-thread-multi
>
> Are you sure that no other processes are running? Did you try it in
> single user mode?
>
> I can observe the same behavior only with a high machine load (e.g.,
> starting several instances of the process).
>
> Matteo




All times are GMT. The time now is 01:51 PM.

Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57