Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > Perl Misc > times() returns incorrect value?

Reply
Thread Tools

times() returns incorrect value?

 
 
makoto kuwata
Guest
Posts: n/a
 
      09-22-2009
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
 
Reply With Quote
 
 
 
 
Teo
Guest
Posts: n/a
 
      09-22-2009
Dear Makoto,

On Sep 22, 2:50*pm, makoto kuwata <(E-Mail Removed)> 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

 
Reply With Quote
 
 
 
 
makoto kuwata
Guest
Posts: n/a
 
      09-22-2009
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 <(E-Mail Removed)> wrote:
> Dear Makoto,
>
> On Sep 22, 2:50*pm, makoto kuwata <(E-Mail Removed)> 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


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
createImage sometime returns null and sometime returns non-null. vizlab Java 3 10-17-2007 11:21 AM
String::CRC crc function returns incorrect result, why? `Zidane Tribal Perl 1 07-28-2007 08:01 PM
String::CRC crc function returns incorrect result, why? `Zidane Tribal Perl Misc 3 07-27-2007 11:41 AM
SQL request returns incorrect french characters hagar Java 1 11-02-2006 03:46 PM
Basic calculation returns incorrect values Dale Reed ASP .Net 3 10-09-2006 03:03 PM



Advertisments