Skip to content

Commit

Permalink
taskstats: use real microsecond granularity for CPU times
Browse files Browse the repository at this point in the history
The taskstats interface uses microsecond granularity for the user and
system time values.  The conversion from cputime to the taskstats values
uses the cputime_to_msecs primitive which effectively limits the
granularity to milliseconds.  Add the cputime_to_usecs primitive for
architectures that have better, more precise CPU time values.  Remove
cputime_to_msecs primitive because there are no more users left.

Signed-off-by: Michael Holzheu <[email protected]>
Acked-by: Balbir Singh <[email protected]>
Cc: Luck Tony <[email protected]>
Cc: Shailabh Nagar <[email protected]>
Cc: Martin Schwidefsky <[email protected]>
Cc: Oleg Nesterov <[email protected]>
Cc: Benjamin Herrenschmidt <[email protected]>
Cc: Heiko Carstens <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Shailabh Nagar <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Michael Holzheu authored and torvalds committed Oct 28, 2010
1 parent 3d9e0cf commit d57af9b
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 23 deletions.
6 changes: 3 additions & 3 deletions arch/ia64/include/asm/cputime.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,10 @@ typedef u64 cputime64_t;
#define jiffies64_to_cputime64(__jif) ((__jif) * (NSEC_PER_SEC / HZ))

/*
* Convert cputime <-> milliseconds
* Convert cputime <-> microseconds
*/
#define cputime_to_msecs(__ct) ((__ct) / NSEC_PER_MSEC)
#define msecs_to_cputime(__msecs) ((__msecs) * NSEC_PER_MSEC)
#define cputime_to_usecs(__ct) ((__ct) / NSEC_PER_USEC)
#define usecs_to_cputime(__usecs) ((__usecs) * NSEC_PER_USEC)

/*
* Convert cputime <-> seconds
Expand Down
12 changes: 6 additions & 6 deletions arch/powerpc/include/asm/cputime.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,23 +124,23 @@ static inline u64 cputime64_to_jiffies64(const cputime_t ct)
}

/*
* Convert cputime <-> milliseconds
* Convert cputime <-> microseconds
*/
extern u64 __cputime_msec_factor;

static inline unsigned long cputime_to_msecs(const cputime_t ct)
static inline unsigned long cputime_to_usecs(const cputime_t ct)
{
return mulhdu(ct, __cputime_msec_factor);
return mulhdu(ct, __cputime_msec_factor) * USEC_PER_MSEC;
}

static inline cputime_t msecs_to_cputime(const unsigned long ms)
static inline cputime_t usecs_to_cputime(const unsigned long us)
{
cputime_t ct;
unsigned long sec;

/* have to be a little careful about overflow */
ct = ms % 1000;
sec = ms / 1000;
ct = us % 1000000;
sec = us / 1000000;
if (ct) {
ct *= tb_ticks_per_sec;
do_div(ct, 1000);
Expand Down
10 changes: 5 additions & 5 deletions arch/s390/include/asm/cputime.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,18 +73,18 @@ cputime64_to_jiffies64(cputime64_t cputime)
}

/*
* Convert cputime to milliseconds and back.
* Convert cputime to microseconds and back.
*/
static inline unsigned int
cputime_to_msecs(const cputime_t cputime)
cputime_to_usecs(const cputime_t cputime)
{
return cputime_div(cputime, 4096000);
return cputime_div(cputime, 4096);
}

static inline cputime_t
msecs_to_cputime(const unsigned int m)
usecs_to_cputime(const unsigned int m)
{
return (cputime_t) m * 4096000;
return (cputime_t) m * 4096;
}

/*
Expand Down
6 changes: 3 additions & 3 deletions include/asm-generic/cputime.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ typedef u64 cputime64_t;


/*
* Convert cputime to milliseconds and back.
* Convert cputime to microseconds and back.
*/
#define cputime_to_msecs(__ct) jiffies_to_msecs(__ct)
#define msecs_to_cputime(__msecs) msecs_to_jiffies(__msecs)
#define cputime_to_usecs(__ct) jiffies_to_usecs(__ct);
#define usecs_to_cputime(__msecs) usecs_to_jiffies(__msecs);

/*
* Convert cputime to seconds and back.
Expand Down
10 changes: 4 additions & 6 deletions kernel/tsacct.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,10 @@ void bacct_add_tsk(struct taskstats *stats, struct task_struct *tsk)
stats->ac_ppid = pid_alive(tsk) ?
rcu_dereference(tsk->real_parent)->tgid : 0;
rcu_read_unlock();
stats->ac_utime = cputime_to_msecs(tsk->utime) * USEC_PER_MSEC;
stats->ac_stime = cputime_to_msecs(tsk->stime) * USEC_PER_MSEC;
stats->ac_utimescaled =
cputime_to_msecs(tsk->utimescaled) * USEC_PER_MSEC;
stats->ac_stimescaled =
cputime_to_msecs(tsk->stimescaled) * USEC_PER_MSEC;
stats->ac_utime = cputime_to_usecs(tsk->utime);
stats->ac_stime = cputime_to_usecs(tsk->stime);
stats->ac_utimescaled = cputime_to_usecs(tsk->utimescaled);
stats->ac_stimescaled = cputime_to_usecs(tsk->stimescaled);
stats->ac_minflt = tsk->min_flt;
stats->ac_majflt = tsk->maj_flt;

Expand Down

0 comments on commit d57af9b

Please sign in to comment.