sched/cputime: Push time to account_steal_time() in nsecs
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>
This commit is contained in:
parent
23244a5c80
commit
be9095ed4f
|
@ -402,7 +402,7 @@ void vtime_flush(struct task_struct *tsk)
|
||||||
account_guest_time(tsk, acct->gtime);
|
account_guest_time(tsk, acct->gtime);
|
||||||
|
|
||||||
if (acct->steal_time)
|
if (acct->steal_time)
|
||||||
account_steal_time(acct->steal_time);
|
account_steal_time(cputime_to_nsecs(acct->steal_time));
|
||||||
|
|
||||||
if (acct->idle_time)
|
if (acct->idle_time)
|
||||||
account_idle_time(acct->idle_time);
|
account_idle_time(acct->idle_time);
|
||||||
|
|
|
@ -188,7 +188,7 @@ static int do_account_vtime(struct task_struct *tsk)
|
||||||
steal = S390_lowcore.steal_timer;
|
steal = S390_lowcore.steal_timer;
|
||||||
if ((s64) steal > 0) {
|
if ((s64) steal > 0) {
|
||||||
S390_lowcore.steal_timer = 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);
|
return virt_timer_forward(user + guest + system + hardirq + softirq);
|
||||||
|
|
|
@ -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_time(struct task_struct *, int, cputime_t);
|
||||||
extern void account_system_index_time(struct task_struct *, cputime_t,
|
extern void account_system_index_time(struct task_struct *, cputime_t,
|
||||||
enum cpu_usage_stat);
|
enum cpu_usage_stat);
|
||||||
extern void account_steal_time(cputime_t);
|
extern void account_steal_time(u64);
|
||||||
extern void account_idle_time(cputime_t);
|
extern void account_idle_time(cputime_t);
|
||||||
|
|
||||||
#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
|
#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
|
||||||
|
|
|
@ -207,11 +207,11 @@ void account_system_time(struct task_struct *p, int hardirq_offset,
|
||||||
* Account for involuntary wait time.
|
* Account for involuntary wait time.
|
||||||
* @cputime: the cpu time spent in involuntary wait
|
* @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;
|
u64 *cpustat = kcpustat_this_cpu->cpustat;
|
||||||
|
|
||||||
cpustat[CPUTIME_STEAL] += cputime_to_nsecs(cputime);
|
cpustat[CPUTIME_STEAL] += cputime;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -239,14 +239,15 @@ static __always_inline cputime_t steal_account_process_time(cputime_t maxtime)
|
||||||
#ifdef CONFIG_PARAVIRT
|
#ifdef CONFIG_PARAVIRT
|
||||||
if (static_key_false(¶virt_steal_enabled)) {
|
if (static_key_false(¶virt_steal_enabled)) {
|
||||||
cputime_t steal_cputime;
|
cputime_t steal_cputime;
|
||||||
u64 steal;
|
u64 steal, rounded;
|
||||||
|
|
||||||
steal = paravirt_steal_clock(smp_processor_id());
|
steal = paravirt_steal_clock(smp_processor_id());
|
||||||
steal -= this_rq()->prev_steal_time;
|
steal -= this_rq()->prev_steal_time;
|
||||||
|
|
||||||
steal_cputime = min(nsecs_to_cputime(steal), maxtime);
|
steal_cputime = min(nsecs_to_cputime(steal), maxtime);
|
||||||
account_steal_time(steal_cputime);
|
rounded = cputime_to_nsecs(steal_cputime);
|
||||||
this_rq()->prev_steal_time += cputime_to_nsecs(steal_cputime);
|
account_steal_time(rounded);
|
||||||
|
this_rq()->prev_steal_time += rounded;
|
||||||
|
|
||||||
return steal_cputime;
|
return steal_cputime;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue