On Tue, 19 Apr 2011 12:01:34 +0100 "Daniel P. Berrange" <berrange@xxxxxxxxxx> wrote: > On Fri, Apr 08, 2011 at 08:36:52PM +0900, Minoru Usui wrote: > > virNodeGetCPUTime: Implement virsh support > > > > Add nodecputime subcommand to virsh. > > This subcommand prints below output. > > > > [Linux] > > # build/tools/virsh nodecputime > > usage: 2.8% > > user : 0.8% > > system: 1.9% > > idle : 97.2% > > iowait: 0.0% > > > > [can get cpu utilization directly(ESX?)] > > # build/tools/virsh nodecputime > > usage: 2.8% > > > > Signed-off-by: Minoru Usui <usui@xxxxxxxxxxxxxxxxx> > > --- > > tools/virsh.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > tools/virsh.pod | 4 ++ > > 2 files changed, 100 insertions(+), 0 deletions(-) > > > > diff --git a/tools/virsh.c b/tools/virsh.c > > index 19e3449..93288ba 100644 > > --- a/tools/virsh.c > > +++ b/tools/virsh.c > > @@ -3388,6 +3388,101 @@ cmdNodeinfo(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED) > > } > > > > /* > > + * "nodecputime" command > > + */ > > +static const vshCmdInfo info_nodecputime[] = { > > + {"help", N_("Prints cpu utilizatoin of the node.")}, > > + {"desc", N_("Returns cpu utilizatoin of the node.(%)")}, > > + {NULL, NULL} > > +}; > > + > > +static int > > +cmdNodeCpuTime(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED) > > +{ > > + int i, j; > > + int flag_utilization = FALSE; > > + virNodeCpuTime stats[VIR_NODE_CPU_TIME_NR]; > > + int nr_stats; > > + struct cpu_time { > > + unsigned long long user; > > + unsigned long long sys; > > + unsigned long long idle; > > + unsigned long long iowait; > > + unsigned long long util; > > + } cpu_time[2]; > > + double user_time, sys_time, idle_time, iowait_time, total_time; > > + double usage; > > + > > + if (!vshConnectionUsability(ctl, ctl->conn)) > > + return FALSE; > > + > > + memset(cpu_time, 0, sizeof(struct cpu_time) * 2); > > + > > + for (i = 0; i < 2; i++) { > > + memset(stats, 0, sizeof(virNodeCpuTime) * VIR_NODE_CPU_TIME_NR); > > + nr_stats = virNodeGetCpuTime(ctl->conn, &stats[0], > > + VIR_NODE_CPU_TIME_NR, 0); > > + if (nr_stats < 0) { > > + vshError(ctl, "%s", _("failed to get cpu time of the node.")); > > + return FALSE; > > + } > > + > > + for (j = 0; j < nr_stats; j++) { > > + switch (stats[j].tag) { > > + case VIR_NODE_CPU_TIME_KERNEL: > > + cpu_time[i].sys = stats[j].val; > > + break; > > + case VIR_NODE_CPU_TIME_USER: > > + cpu_time[i].user = stats[j].val; > > + break; > > + case VIR_NODE_CPU_TIME_IDLE: > > + cpu_time[i].idle = stats[j].val; > > + break; > > + case VIR_NODE_CPU_TIME_IOWAIT: > > + cpu_time[i].iowait = stats[j].val; > > + break; > > + case VIR_NODE_CPU_TIME_UTILIZATION: > > + flag_utilization = TRUE; > > + cpu_time[i].util = stats[j].val; > > + break; > > + case VIR_NODE_CPU_TIME_NR: > > + default: > > + break; > > + } > > + } > > + > > + sleep(1); > > + } > > I'm not sure about this bit. In other places in virsh, we just report > the absolute CPU time value, and don't try to calculate the deltas. > There is a virt-top program that might like to use this data to provide > a continuous display of utilization. Matthias said, ESX cannot get absolute CPU time. It just get CPU percentage. http://www.mail-archive.com/libvir-list@xxxxxxxxxx/msg35769.html And I think CPU percentage is very useful for user. The user don't care about absolute CPU time value. They want to know about CPU load of each host. So I wrote this specification. > Alternatively, we could add an arg for this to request that it calculate > delta over 'n' seconds. I agree. It's very userful. But ESX cannot change interval, perhaps. > Daniel > -- > |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| > |: http://libvirt.org -o- http://virt-manager.org :| > |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| > |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- Minoru Usui <usui@xxxxxxxxxxxxxxxxx> -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list