Ingo Molnar wrote: > * Laurent Vivier <[email protected]> wrote: > >> This new version remove conditional compilation on GUEST_ACCOUNTING. > > excellent! For all 4 patches: > > Acked-by: Ingo Molnar <[email protected]> > > i'd suggest inclusion into 2.6.24. Thank you. > can the /proc change break anything? Any old procps version perhaps? I've tested top and ps from procps 3.0.5, 3.1.8, 3.1.14, 3.2.1 and 3.2.7 without any problem. And as values are read with a sscanf() by procps, I think adding a field at the end of the line is not a problem. For those who want to play, I've attached a patch to procps-3.2.7 to display guest time in top. Regards, Laurent -- ------------- [email protected] -------------- "Software is hard" - Donald Knuth
Index: procps-3.2.7/top.c =================================================================== --- procps-3.2.7.orig/top.c 2007-08-08 16:13:17.000000000 +0200 +++ procps-3.2.7/top.c 2007-08-10 16:46:01.000000000 +0200 @@ -935,7 +935,8 @@ cpus[Cpu_tot].x = 0; // FIXME: can't tell by kernel version number cpus[Cpu_tot].y = 0; // FIXME: can't tell by kernel version number cpus[Cpu_tot].z = 0; // FIXME: can't tell by kernel version number - num = sscanf(buf, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu", + cpus[Cpu_tot].g = 0; // FIXME: can't tell by kernel version number + num = sscanf(buf, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu", &cpus[Cpu_tot].u, &cpus[Cpu_tot].n, &cpus[Cpu_tot].s, @@ -943,7 +944,8 @@ &cpus[Cpu_tot].w, &cpus[Cpu_tot].x, &cpus[Cpu_tot].y, - &cpus[Cpu_tot].z + &cpus[Cpu_tot].z, + &cpus[Cpu_tot].g ); if (num < 4) std_err("failed /proc/stat read"); @@ -960,9 +962,10 @@ cpus[i].x = 0; // FIXME: can't tell by kernel version number cpus[i].y = 0; // FIXME: can't tell by kernel version number cpus[i].z = 0; // FIXME: can't tell by kernel version number - num = sscanf(buf, "cpu%u %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu", + cpus[i].g = 0; // FIXME: can't tell by kernel version number + num = sscanf(buf, "cpu%u %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu", &cpus[i].id, - &cpus[i].u, &cpus[i].n, &cpus[i].s, &cpus[i].i, &cpus[i].w, &cpus[i].x, &cpus[i].y, &cpus[i].z + &cpus[i].u, &cpus[i].n, &cpus[i].s, &cpus[i].i, &cpus[i].w, &cpus[i].x, &cpus[i].y, &cpus[i].z, &cpus[i].g ); if (num < 4) std_err("failed /proc/stat read"); @@ -2879,10 +2882,11 @@ // we'll trim to zero if we get negative time ticks, // which has happened with some SMP kernels (pre-2.4?) #define TRIMz(x) ((tz = (SIC_t)(x)) < 0 ? 0 : tz) - SIC_t u_frme, s_frme, n_frme, i_frme, w_frme, x_frme, y_frme, z_frme, tot_frme, tz; + SIC_t u_frme, s_frme, n_frme, i_frme, w_frme, x_frme, y_frme, z_frme, g_frme, tot_frme, tz, u_tmp; float scale; - u_frme = cpu->u - cpu->u_sav; + u_tmp = cpu->u - cpu->g; + u_frme = TRIMz(u_tmp - cpu->u_sav); s_frme = cpu->s - cpu->s_sav; n_frme = cpu->n - cpu->n_sav; i_frme = TRIMz(cpu->i - cpu->i_sav); @@ -2890,7 +2894,8 @@ x_frme = cpu->x - cpu->x_sav; y_frme = cpu->y - cpu->y_sav; z_frme = cpu->z - cpu->z_sav; - tot_frme = u_frme + s_frme + n_frme + i_frme + w_frme + x_frme + y_frme + z_frme; + g_frme = cpu->g - cpu->g_sav; + tot_frme = u_frme + s_frme + n_frme + i_frme + w_frme + x_frme + y_frme + z_frme + g_frme; if (tot_frme < 1) tot_frme = 1; scale = 100.0 / (float)tot_frme; @@ -2908,13 +2913,14 @@ (float)w_frme * scale, (float)x_frme * scale, (float)y_frme * scale, - (float)z_frme * scale + (float)z_frme * scale, + (float)g_frme * scale ) ); Msg_row += 1; // remember for next time around - cpu->u_sav = cpu->u; + cpu->u_sav = u_tmp; cpu->s_sav = cpu->s; cpu->n_sav = cpu->n; cpu->i_sav = cpu->i; @@ -2922,6 +2928,7 @@ cpu->x_sav = cpu->x; cpu->y_sav = cpu->y; cpu->z_sav = cpu->z; + cpu->g_sav = cpu->g; #undef TRIMz } Index: procps-3.2.7/top.h =================================================================== --- procps-3.2.7.orig/top.h 2007-08-08 16:14:47.000000000 +0200 +++ procps-3.2.7/top.h 2007-08-08 17:01:45.000000000 +0200 @@ -211,8 +211,8 @@ // calculations. It exists primarily for SMP support but serves // all environments. typedef struct CPU_t { - TIC_t u, n, s, i, w, x, y, z; // as represented in /proc/stat - TIC_t u_sav, s_sav, n_sav, i_sav, w_sav, x_sav, y_sav, z_sav; // in the order of our display + TIC_t u, n, s, i, w, x, y, z, g; // as represented in /proc/stat + TIC_t u_sav, s_sav, n_sav, i_sav, w_sav, x_sav, y_sav, z_sav, g_sav; // in the order of our display unsigned id; // the CPU ID number } CPU_t; @@ -390,7 +390,7 @@ #define STATES_line2x6 "%s\03" \ " %#4.1f%% \02us,\03 %#4.1f%% \02sy,\03 %#4.1f%% \02ni,\03 %#4.1f%% \02id,\03 %#4.1f%% \02wa,\03 %#4.1f%% \02hi,\03 %#4.1f%% \02si\03\n" #define STATES_line2x7 "%s\03" \ - "%#5.1f%%\02us,\03%#5.1f%%\02sy,\03%#5.1f%%\02ni,\03%#5.1f%%\02id,\03%#5.1f%%\02wa,\03%#5.1f%%\02hi,\03%#5.1f%%\02si,\03%#5.1f%%\02st\03\n" + "%#4.1f%%\02us,\03%#4.1f%%\02sy,\03%#4.1f%%\02ni,\03%#5.1f%%\02id,\03%#4.1f%%\02wa,\03%#4.1f%%\02hi,\03%#4.1f%%\02si,\03%#4.1f%%\02st\03,\02%#4.1f%%\02g\n" #ifdef CASEUP_SUMMK #define MEMORY_line1 "Mem: \03" \ " %8luK \02total,\03 %8luK \02used,\03 %8luK \02free,\03 %8luK \02buffers\03\n"
Attachment:
signature.asc
Description: OpenPGP digital signature
- Follow-Ups:
- Re: [RESEND 2][PATCH 0/4] Virtual Machine Time Accounting
- From: Rik van Riel <[email protected]>
- Re: [RESEND 2][PATCH 0/4] Virtual Machine Time Accounting
- References:
- [RESEND 2][PATCH 0/4] Virtual Machine Time Accounting
- From: Laurent Vivier <[email protected]>
- Re: [RESEND 2][PATCH 0/4] Virtual Machine Time Accounting
- From: Ingo Molnar <[email protected]>
- [RESEND 2][PATCH 0/4] Virtual Machine Time Accounting
- Prev by Date: Re: [PATCH -mm] mm: Fix memory hotplug + sparsemem build.
- Next by Date: SYSFS: need a noncaching read
- Previous by thread: Re: [RESEND 2][PATCH 0/4] Virtual Machine Time Accounting
- Next by thread: Re: [RESEND 2][PATCH 0/4] Virtual Machine Time Accounting
- Index(es):