STINNER Victor <vstin...@python.org> added the comment:

I found this documentation on AIX thread_cputime():
https://www.ibm.com/support/knowledgecenter/ssw_aix_71/t_bostechref/thread_cputime.html

"""
Syntax

#include <sys/thread.h>
int thread_cputime (tid, ctime)
tid_t tid;
thread_cputime_t * ctime ;
typedef struct {
    uint64_t utime; /* User time in nanosenconds */
    uint64_t stime; /* System time in nanoseconds */
} thread_cputime_t;

Description

The thread_cputime subroutine allows a thread to query the CPU usage of the 
specified thread (tid) in the same process or in another process. If a value of 
-1 is passed in the tid parameter field, then the CPU usage of the calling 
thread is retrieved.

CPU usage is not the same as the total life of the thread in real time, rather 
it is the actual amount of CPU time consumed by the thread since it was 
created. The CPU usage retrieved by this subroutine contains the CPU time 
consumed by the requested thread tid in user space (utime) and system space 
(stime).

The thread to be queried is identified using the kernel thread ID which has 
global scope. This can be obtained by the application using the thread_self 
system call. Only 1:1 thread mode is supported. The result for M:N thread mode 
is undefined.

The CPU usage of a thread that is not the calling thread will be current as of 
the last time the thread was dispatched. This value will be off by a small 
amount if the target thread is currently running.
"""

Ok good, it returns the user time *and* the system time, and it's the thread 
CPU time.

So it sounds reasonable to use it to implement time.thread_time().

By the way, the v8 project calls thread_cputime() on AIX when 
clock_gettime(CLOCK_THREAD_CPUTIME_ID) is requested, also to get better 
resolution:
https://github.com/v8/v8/blob/a5038c42283a09f65c44229907123e15a779feb7/src/base/platform/time.cc#L68

// On AIX clock_gettime for CLOCK_THREAD_CPUTIME_ID outputs time with
// resolution of 10ms. thread_cputime API provides the time in ns
#if defined(V8_OS_AIX)
  thread_cputime_t tc;
  if (clk_id == CLOCK_THREAD_CPUTIME_ID) {
#if defined(__PASE__)  // CLOCK_THREAD_CPUTIME_ID clock not supported on IBMi
    return 0;
#endif
    if (thread_cputime(-1, &tc) != 0) {
      UNREACHABLE();
    }
  }
#endif

Another question is why AIX doesn't use thread_cputime() internally to 
implement clock_gettime(CLOCK_THREAD_CPUTIME_ID) :-)

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue40192>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to