Messages in this thread | | | Subject | Re: [PATCH v3 3/6] KVM-GST: KVM Steal time accounting | From | Peter Zijlstra <> | Date | Tue, 15 Feb 2011 15:45:55 +0100 |
| |
On Tue, 2011-02-15 at 16:35 +0200, Avi Kivity wrote: > On 02/11/2011 08:19 PM, Glauber Costa wrote: > > This patch accounts steal time time in kernel/sched. > > I kept it from last proposal, because I still see advantages > > in it: Doing it here will give us easier access from scheduler > > variables such as the cpu rq. The next patch shows an example of > > usage for it. > > > > Since functions like account_idle_time() can be called from > > multiple places, not only account_process_tick(), steal time > > grabbing is repeated in each account function separatedely. > > > > I still don't see how we export this to userspace for top(1) and friends. >
The existing steal time stuff is:
kernel/sched.c:account_steal_time()
cpustat->steal = cputime64_add(cpustat->steal, cputime64);
and
fs/proc/stat.c:show_stat()
steal = cputime64_add(steal, kstat_cpu(i).cpustat.steal);
seq_printf(p, "cpu %llu %llu %llu %llu %llu %llu %llu %llu %llu " "%llu\n", (unsigned long long)cputime64_to_clock_t(user), (unsigned long long)cputime64_to_clock_t(nice), (unsigned long long)cputime64_to_clock_t(system), (unsigned long long)cputime64_to_clock_t(idle), (unsigned long long)cputime64_to_clock_t(iowait), (unsigned long long)cputime64_to_clock_t(irq), (unsigned long long)cputime64_to_clock_t(softirq), (unsigned long long)cputime64_to_clock_t(steal), (unsigned long long)cputime64_to_clock_t(guest), (unsigned long long)cputime64_to_clock_t(guest_nice));
etc..
Glauber's patch is making sure we call account_steal_time(), which is currently only called from arch code like:
# git grep account_steal_ arch/ia64/xen/time.c: account_steal_ticks(stolen); arch/powerpc/kernel/time.c: account_steal_time(stolen); arch/s390/kernel/vtime.c: account_steal_time(steal); arch/x86/xen/time.c: account_steal_ticks(ticks); include/linux/kernel_stat.h:extern void account_steal_time(cputime_t); include/linux/kernel_stat.h:extern void account_steal_ticks(unsigned long ticks); kernel/sched.c:void account_steal_time(cputime_t cputime) kernel/sched.c:void account_steal_ticks(unsigned long ticks) kernel/sched.c: account_steal_time(jiffies_to_cputime(ticks));
| |