Commit 5e84cfde authored by Laurent Vivier's avatar Laurent Vivier Committed by Ingo Molnar

sched: guest CPU accounting: add guest-CPU /proc/stat field

as recent 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: default avatarLaurent Vivier <Laurent.Vivier@bull.net>
Acked-by: default avatarAvi Kivity <avi@qumranet.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 6323469f
...@@ -443,6 +443,7 @@ static int show_stat(struct seq_file *p, void *v) ...@@ -443,6 +443,7 @@ static int show_stat(struct seq_file *p, void *v)
int i; int i;
unsigned long jif; unsigned long jif;
cputime64_t user, nice, system, idle, iowait, irq, softirq, steal; cputime64_t user, nice, system, idle, iowait, irq, softirq, steal;
cputime64_t guest;
u64 sum = 0; u64 sum = 0;
struct timespec boottime; struct timespec boottime;
unsigned int *per_irq_sum; unsigned int *per_irq_sum;
...@@ -453,6 +454,7 @@ static int show_stat(struct seq_file *p, void *v) ...@@ -453,6 +454,7 @@ static int show_stat(struct seq_file *p, void *v)
user = nice = system = idle = iowait = user = nice = system = idle = iowait =
irq = softirq = steal = cputime64_zero; irq = softirq = steal = cputime64_zero;
guest = cputime64_zero;
getboottime(&boottime); getboottime(&boottime);
jif = boottime.tv_sec; jif = boottime.tv_sec;
...@@ -467,6 +469,7 @@ static int show_stat(struct seq_file *p, void *v) ...@@ -467,6 +469,7 @@ static int show_stat(struct seq_file *p, void *v)
irq = cputime64_add(irq, kstat_cpu(i).cpustat.irq); irq = cputime64_add(irq, kstat_cpu(i).cpustat.irq);
softirq = cputime64_add(softirq, kstat_cpu(i).cpustat.softirq); softirq = cputime64_add(softirq, kstat_cpu(i).cpustat.softirq);
steal = cputime64_add(steal, kstat_cpu(i).cpustat.steal); steal = cputime64_add(steal, kstat_cpu(i).cpustat.steal);
guest = cputime64_add(guest, kstat_cpu(i).cpustat.guest);
for (j = 0; j < NR_IRQS; j++) { for (j = 0; j < NR_IRQS; j++) {
unsigned int temp = kstat_cpu(i).irqs[j]; unsigned int temp = kstat_cpu(i).irqs[j];
sum += temp; sum += temp;
...@@ -474,7 +477,7 @@ static int show_stat(struct seq_file *p, void *v) ...@@ -474,7 +477,7 @@ static int show_stat(struct seq_file *p, void *v)
} }
} }
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(user),
(unsigned long long)cputime64_to_clock_t(nice), (unsigned long long)cputime64_to_clock_t(nice),
(unsigned long long)cputime64_to_clock_t(system), (unsigned long long)cputime64_to_clock_t(system),
...@@ -482,7 +485,8 @@ static int show_stat(struct seq_file *p, void *v) ...@@ -482,7 +485,8 @@ static int show_stat(struct seq_file *p, void *v)
(unsigned long long)cputime64_to_clock_t(iowait), (unsigned long long)cputime64_to_clock_t(iowait),
(unsigned long long)cputime64_to_clock_t(irq), (unsigned long long)cputime64_to_clock_t(irq),
(unsigned long long)cputime64_to_clock_t(softirq), (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) { for_each_online_cpu(i) {
/* Copy values here to work around gcc-2.95.3, gcc-2.96 */ /* Copy values here to work around gcc-2.95.3, gcc-2.96 */
...@@ -494,7 +498,9 @@ static int show_stat(struct seq_file *p, void *v) ...@@ -494,7 +498,9 @@ static int show_stat(struct seq_file *p, void *v)
irq = kstat_cpu(i).cpustat.irq; irq = kstat_cpu(i).cpustat.irq;
softirq = kstat_cpu(i).cpustat.softirq; softirq = kstat_cpu(i).cpustat.softirq;
steal = kstat_cpu(i).cpustat.steal; steal = kstat_cpu(i).cpustat.steal;
seq_printf(p, "cpu%d %llu %llu %llu %llu %llu %llu %llu %llu\n", guest = kstat_cpu(i).cpustat.guest;
seq_printf(p,
"cpu%d %llu %llu %llu %llu %llu %llu %llu %llu %llu\n",
i, i,
(unsigned long long)cputime64_to_clock_t(user), (unsigned long long)cputime64_to_clock_t(user),
(unsigned long long)cputime64_to_clock_t(nice), (unsigned long long)cputime64_to_clock_t(nice),
...@@ -503,7 +509,8 @@ static int show_stat(struct seq_file *p, void *v) ...@@ -503,7 +509,8 @@ static int show_stat(struct seq_file *p, void *v)
(unsigned long long)cputime64_to_clock_t(iowait), (unsigned long long)cputime64_to_clock_t(iowait),
(unsigned long long)cputime64_to_clock_t(irq), (unsigned long long)cputime64_to_clock_t(irq),
(unsigned long long)cputime64_to_clock_t(softirq), (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); seq_printf(p, "intr %llu", (unsigned long long)sum);
......
...@@ -23,6 +23,7 @@ struct cpu_usage_stat { ...@@ -23,6 +23,7 @@ struct cpu_usage_stat {
cputime64_t idle; cputime64_t idle;
cputime64_t iowait; cputime64_t iowait;
cputime64_t steal; cputime64_t steal;
cputime64_t guest;
}; };
struct kernel_stat { struct kernel_stat {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment