Skip to content

Commit

Permalink
sched/cputime: Push time to account_steal_time() in nsecs
Browse files Browse the repository at this point in the history
This is one more step toward converting cputime accounting to pure nsecs.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Stanislaw Gruszka <sgruszka@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Wanpeng Li <wanpeng.li@hotmail.com>
Link: http://lkml.kernel.org/r/1485832191-26889-23-git-send-email-fweisbec@gmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
  • Loading branch information
fweisbec authored and Ingo Molnar committed Feb 1, 2017
1 parent 23244a5 commit be9095e
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 8 deletions.
2 changes: 1 addition & 1 deletion arch/powerpc/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,7 @@ void vtime_flush(struct task_struct *tsk)
account_guest_time(tsk, acct->gtime);

if (acct->steal_time)
account_steal_time(acct->steal_time);
account_steal_time(cputime_to_nsecs(acct->steal_time));

if (acct->idle_time)
account_idle_time(acct->idle_time);
Expand Down
2 changes: 1 addition & 1 deletion arch/s390/kernel/vtime.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ static int do_account_vtime(struct task_struct *tsk)
steal = S390_lowcore.steal_timer;
if ((s64) steal > 0) {
S390_lowcore.steal_timer = 0;
account_steal_time(steal);
account_steal_time(cputime_to_nsecs(steal));
}

return virt_timer_forward(user + guest + system + hardirq + softirq);
Expand Down
2 changes: 1 addition & 1 deletion include/linux/kernel_stat.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ extern void account_guest_time(struct task_struct *, cputime_t);
extern void account_system_time(struct task_struct *, int, cputime_t);
extern void account_system_index_time(struct task_struct *, cputime_t,
enum cpu_usage_stat);
extern void account_steal_time(cputime_t);
extern void account_steal_time(u64);
extern void account_idle_time(cputime_t);

#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
Expand Down
11 changes: 6 additions & 5 deletions kernel/sched/cputime.c
Original file line number Diff line number Diff line change
Expand Up @@ -207,11 +207,11 @@ void account_system_time(struct task_struct *p, int hardirq_offset,
* Account for involuntary wait time.
* @cputime: the cpu time spent in involuntary wait
*/
void account_steal_time(cputime_t cputime)
void account_steal_time(u64 cputime)
{
u64 *cpustat = kcpustat_this_cpu->cpustat;

cpustat[CPUTIME_STEAL] += cputime_to_nsecs(cputime);
cpustat[CPUTIME_STEAL] += cputime;
}

/*
Expand Down Expand Up @@ -239,14 +239,15 @@ static __always_inline cputime_t steal_account_process_time(cputime_t maxtime)
#ifdef CONFIG_PARAVIRT
if (static_key_false(&paravirt_steal_enabled)) {
cputime_t steal_cputime;
u64 steal;
u64 steal, rounded;

steal = paravirt_steal_clock(smp_processor_id());
steal -= this_rq()->prev_steal_time;

steal_cputime = min(nsecs_to_cputime(steal), maxtime);
account_steal_time(steal_cputime);
this_rq()->prev_steal_time += cputime_to_nsecs(steal_cputime);
rounded = cputime_to_nsecs(steal_cputime);
account_steal_time(rounded);
this_rq()->prev_steal_time += rounded;

return steal_cputime;
}
Expand Down

0 comments on commit be9095e

Please sign in to comment.