Laurent Vivier
2007-Aug-16 08:57 UTC
[PATCH/RFC 1/4]Introduce a new field "guest" in cpustat
[PATCH 1/4] as modern CPUs introduce a third running state, after "user" and "system", we need a new field, "guest", in cpustat to store the time used by the CPU to run virtual CPU. Modify /proc/stat to display this new field. Signed-off-by: Laurent Vivier <Laurent.Vivier@bull.net> -- ------------- Laurent.Vivier@bull.net -------------- "Software is hard" - Donald Knuth -------------- next part -------------- Index: kvm/fs/proc/proc_misc.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kvm.orig/fs/proc/proc_misc.c 2007-08-10 16:49:42.000000000 +0200 +++ kvm/fs/proc/proc_misc.c 2007-08-10 16:51:34.000000000 +0200 @@ -443,6 +443,7 @@ int i; unsigned long jif; cputime64_t user, nice, system, idle, iowait, irq, softirq, steal; + cputime64_t guest; u64 sum =3D 0; struct timespec boottime; unsigned int *per_irq_sum; @@ -452,7 +453,7 @@ return -ENOMEM; user =3D nice =3D system =3D idle =3D iowait =3D - irq =3D softirq =3D steal =3D cputime64_zero; + irq =3D softirq =3D steal =3D guest =3D cputime64_zero; getboottime(&boottime); jif =3D boottime.tv_sec; @@ -467,6 +468,7 @@ irq =3D cputime64_add(irq, kstat_cpu(i).cpustat.irq); softirq =3D cputime64_add(softirq, kstat_cpu(i).cpustat.softirq); steal =3D cputime64_add(steal, kstat_cpu(i).cpustat.steal); + guest =3D cputime64_add(guest, kstat_cpu(i).cpustat.guest); for (j =3D 0; j < NR_IRQS; j++) { unsigned int temp =3D kstat_cpu(i).irqs[j]; sum +=3D temp; @@ -474,7 +476,7 @@ } } - seq_printf(p, "cpu %llu %llu %llu %llu %llu %llu %llu %llu\n", + seq_printf(p, "cpu %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), @@ -482,7 +484,8 @@ (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(steal), + (unsigned long long)cputime64_to_clock_t(guest)); for_each_online_cpu(i) { /* Copy values here to work around gcc-2.95.3, gcc-2.96 */ @@ -494,7 +497,8 @@ irq =3D kstat_cpu(i).cpustat.irq; softirq =3D kstat_cpu(i).cpustat.softirq; steal =3D kstat_cpu(i).cpustat.steal; - seq_printf(p, "cpu%d %llu %llu %llu %llu %llu %llu %llu %llu\n", + guest =3D kstat_cpu(i).cpustat.guest; + seq_printf(p, "cpu%d %llu %llu %llu %llu %llu %llu %llu %llu %llu\n", i, (unsigned long long)cputime64_to_clock_t(user), (unsigned long long)cputime64_to_clock_t(nice), @@ -503,7 +507,8 @@ (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(steal), + (unsigned long long)cputime64_to_clock_t(guest)); } seq_printf(p, "intr %llu", (unsigned long long)sum); Index: kvm/include/linux/kernel_stat.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kvm.orig/include/linux/kernel_stat.h 2007-08-10 16:49:42.000000000 +0200 +++ kvm/include/linux/kernel_stat.h 2007-08-10 16:49:59.000000000 +0200 @@ -23,6 +23,7 @@ cputime64_t idle; cputime64_t iowait; cputime64_t steal; + cputime64_t guest; }; struct kernel_stat {