Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
result of os.times() is different with 'time' command
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  5 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
kwa...@gmail.com  
View profile  
 More options Feb 2 2007, 1:30 pm
Newsgroups: comp.lang.python
From: kwa...@gmail.com
Date: 2 Feb 2007 10:30:01 -0800
Local: Fri, Feb 2 2007 1:30 pm
Subject: [Q] result of os.times() is different with 'time' command
Hi,

I have a question about os.times().
os.times() returns a tuple containing user time and system time,
but it is not matched to the result of 'time' command.
For example, os.times() reports that user time is 39.85 sec,
but 'time' command reports that user time is 28.55sec.
(machine: Python2.5, MacOS X 10.4 Tiger, MacBook 1.83GHz intel core
duo)

  file: ostimetest.py
  --------------------
  import os

  ## benchmark function
  def f(x):
      if x <= 1:
          return 1
      else:
          return f(x-1) + f(x-2)

  ## do benchmark
  n = 35
  t1 = os.times()         # start time
  v = f(n)                # end time
  print "n=%d, v=%d" % (n, v)
  t2 = os.times()

  ## print result
  utime = t2[0] - t1[0]   # user time
  stime = t2[1] - t1[1]   # system time
  print "utime=%s, stime=%s" % (utime, stime)
  --------------------

  Result:
  ====================
  $ python -V
  Python 2.5
  $ time python ostimetest.py
  n=35, v=14930352
  utime=39.85, stime=0.216666666667
  real    0m28.554suser    0m23.938ssys     0m0.177s
  ====================

This shows that os.times() reports that user time is 39.85sec,
but time command shows that user time is 23.938sec.
Why os.times() reports wrong result? Do I have any mistake?

--
kwatch


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
aspineux  
View profile  
 More options Feb 2 2007, 3:06 pm
Newsgroups: comp.lang.python
From: "aspineux" <aspin...@gmail.com>
Date: 2 Feb 2007 12:06:36 -0800
Local: Fri, Feb 2 2007 3:06 pm
Subject: Re: result of os.times() is different with 'time' command

I dont see anything wrong !
Did you try to measure time with your watch ?
Did you try a simple python test.py without the time command ?
Maybe python is 'disturbed' by the intel core

Here my result on a linux dual AMD, python 2.4.3

# time python test.py
n=35, v=14930352
utime=22.54, stime=0.02

real    0m22.755s
user    0m22.564s
sys     0m0.022s

can you try this ?

# strace python test.py  2>&1 | grep time
times({tms_utime=1, tms_stime=1, tms_cutime=0, tms_cstime=0}) =
430217777
times({tms_utime=2238, tms_stime=2, tms_cutime=0, tms_cstime=0}) =
430220049
write(1, "n=35, v=14930352\nutime=22.37, st"..., 41n=35, v=14930352
utime=22.37, stime=0.01

now you can compare what your system replied and what python
returned !

On 2 fév, 19:30, kwa...@gmail.com wrote:


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Douglas Wells  
View profile  
 More options Feb 2 2007, 10:27 pm
Newsgroups: comp.lang.python
From: s...@signature.invalid (Douglas Wells)
Date: Fri, 2 Feb 2007 22:27:12 -0500 (EST)
Local: Fri, Feb 2 2007 10:27 pm
Subject: Re: result of os.times() is different with 'time' command
[various posting problems corrected and response interspersed in
previous post for purposes of coherent response]

In article <1170446796.156141.201...@v33g2000cwv.googlegroups.com>,

Note that this likely won't work.  First, strace is not native to
OS X; ktrace is the analogous native command.  Second, OS X almost
certainly implements the times system call in terms of getrusage.

Yes, I can reproduce this on my FreeBSD system.  No, I do not believe
that you have made a mistake.  Yes, I believe that you have uncovered
a bug in the Python os/posix modules.

Here's my analysis (although I should note that I've not looked
at the source of Python previously).  I'm looking at Python 2.4.3,
but this looks like a long existing bug:

The following code exists in the source code module
Modules/posixmodule.c @ posix_times:
        struct tms t;
        clock_t c;
        [ ... ]
        c = times(&t);
                [ ... ]
        return Py_BuildValue("ddddd",
                             (double)t.tms_utime / HZ,
                             (double)t.tms_stime / HZ,
                             (double)t.tms_cutime / HZ,
                             (double)t.tms_cstime / HZ,
                             (double)c / HZ);
This is incorrect.  It should not be dividing by HZ, but by the
result of the dynamic value 'sysconf (_SC_CLK_TCK)'.  Even if
it were to use a compile time value, the proper value would be
CLK_TCK, not HZ.

So here's what's happening.  Neither my FreeBSD nor the OP's Mac
defines HZ as a compile time variable, but the same source module
also contains the following code:
        #ifndef HZ
        #define HZ 60 /* Universal constant :-) */
        #endif /* HZ */
So, the Python posix module is using 60 instead of the proper
value, which happens to be 128 on my FreeBSD, and 100 on the OP's
OS X(*).  (BTW, this sort of historic code is exactly why POSIX
no longer defines HZ.)

In support of this, I note that the following ratios exist:
  user time from os.times / user time from time command
                    39.85 / 23.938 => 1.665
                      CLK_TCK / HZ
                          100 / 60 => 1.667
which are in reasonably close agreement!

 - dmw

[*] I've actually only looked at OS X for the PPC platform, not
for the User's Intel platform, but I'm fairly certain that the
CLK_TCK value is the same on both.

--
.   Douglas Wells             .  Connection Technologies      .
.   Internet:  -sp9804- -at - contek.com-                     .


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
aspineux  
View profile  
 More options Feb 3 2007, 7:11 pm
Newsgroups: comp.lang.python
From: "aspineux" <aspin...@gmail.com>
Date: 3 Feb 2007 16:11:15 -0800
Local: Sat, Feb 3 2007 7:11 pm
Subject: Re: result of os.times() is different with 'time' command

Your analysis looks great, maybe the good arguments to report a bug ?

On 3 fév, 04:27, s...@signature.invalid (Douglas Wells) wrote:


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
kwa...@gmail.com  
View profile  
 More options Feb 4 2007, 3:29 pm
Newsgroups: comp.lang.python
From: kwa...@gmail.com
Date: 4 Feb 2007 12:29:35 -0800
Local: Sun, Feb 4 2007 3:29 pm
Subject: Re: result of os.times() is different with 'time' command
Thank you, aspineux and Douglas.

Douglas's analysis is especially great.
I changed HZ to CLK_TCK in Python-2.5/Modules/posixmodule.c and
got the proper result!

  ====================
  $ time /usr/local/python2.5/bin/python ostimetest.rb
  n=35, v=14930352
  utime=12.42, stime=0.04

  real    0m13.621s
  user    0m12.438s
  sys     0m0.063s
  ====================

Great job, Douglas.

--
regards,
kwatch


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »