[libvirt] [PATCH 4/4 V2] virsh: Enable the pcpuinfo command in virsh
Shu Ming
shuming at linux.vnet.ibm.com
Wed Jan 4 06:56:57 UTC 2012
A typo, "physic CPU" should be "physical CPU".
On 2012-1-4 12:09, Lai Jiangshan wrote:
> This command gets information about the physic CPUs.
> Example:
>
> # virsh pcpuinfo rhel6
> CPU: 0
> Curr VCPU: -
> Usage: 47.3
>
> CPU: 1
> Curr VCPU: 1
> Usage: 46.8
>
> CPU: 2
> Curr VCPU: 0
> Usage: 52.7
>
> CPU: 3
> Curr VCPU: -
> Usage: 44.1
>
>
> Signed-off-by: Lai Jiangshan<laijs at cn.fujitsu.com>
> ---
> tools/virsh.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> tools/virsh.pod | 5 +++
> 2 files changed, 98 insertions(+), 0 deletions(-)
>
> diff --git a/tools/virsh.c b/tools/virsh.c
> index 0bc0519..f6fac24 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -4578,6 +4578,98 @@ cmdVcpuinfo(vshControl *ctl, const vshCmd *cmd)
> }
>
> /*
> + * "pcpuinfo" command
> + */
> +static const vshCmdInfo info_pcpuinfo[] = {
> + {"help", N_("detailed domain pcpu information")},
> + {"desc", N_("Returns basic information about the domain physic CPUs.")},
> + {NULL, NULL}
> +};
> +
> +static const vshCmdOptDef opts_pcpuinfo[] = {
> + {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},
> + {NULL, 0, 0, NULL}
> +};
> +
> +static bool
> +cmdPcpuinfo(vshControl *ctl, const vshCmd *cmd)
> +{
> + virDomainInfo info;
> + virDomainPtr dom;
> + virNodeInfo nodeinfo;
> + virVcpuInfoPtr cpuinfo;
> + unsigned char *cpumaps;
> + int ncpus, maxcpu;
> + size_t cpumaplen;
> + bool ret = true;
> + int n, m;
> +
> + if (!vshConnectionUsability(ctl, ctl->conn))
> + return false;
> +
> + if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
> + return false;
> +
> + if (virNodeGetInfo(ctl->conn,&nodeinfo) != 0) {
> + virDomainFree(dom);
> + return false;
> + }
> +
> + if (virDomainGetInfo(dom,&info) != 0) {
> + virDomainFree(dom);
> + return false;
> + }
> +
> + cpuinfo = vshMalloc(ctl, sizeof(virVcpuInfo)*info.nrVirtCpu);
> + maxcpu = VIR_NODEINFO_MAXCPUS(nodeinfo);
> + cpumaplen = VIR_CPU_MAPLEN(maxcpu);
> + cpumaps = vshMalloc(ctl, info.nrVirtCpu * cpumaplen);
> +
> + if ((ncpus = virDomainGetVcpus(dom,
> + cpuinfo, info.nrVirtCpu,
> + cpumaps, cpumaplen))>= 0) {
> + unsigned long long *usages;
> + int nr_usages = maxcpu;
> +
> + if (VIR_ALLOC_N(usages, nr_usages)< 0) {
> + virReportOOMError();
> + goto fail;
> + }
> +
> + if (virDomainGetPcpusUsage(dom, usages,&nr_usages, 0)< 0) {
> + VIR_FREE(usages);
> + goto fail;
> + }
> +
> + for (n = 0; n< MIN(maxcpu, nr_usages); n++) {
> + vshPrint(ctl, "%-15s %d\n", _("CPU:"), n);
> + for (m = 0; m< ncpus; m++) {
> + if (cpuinfo[m].cpu == n) {
> + vshPrint(ctl, "%-15s %d\n", _("Curr VCPU:"), m);
> + break;
> + }
> + }
> + if (m == ncpus) {
> + vshPrint(ctl, "%-15s %s\n", _("Curr VCPU:"), _("-"));
> + }
> + vshPrint(ctl, "%-15s %.1lf\n\n", _("Usage:"),
> + usages[n] / 1000000000.0);
> + }
> + VIR_FREE(usages);
> + goto cleanup;
> + }
> +
> +fail:
> + ret = false;
> +
> +cleanup:
> + VIR_FREE(cpumaps);
> + VIR_FREE(cpuinfo);
> + virDomainFree(dom);
> + return ret;
> +}
> +
> +/*
> * "vcpupin" command
> */
> static const vshCmdInfo info_vcpupin[] = {
> @@ -15813,6 +15905,7 @@ static const vshCmdDef domManagementCmds[] = {
> {"migrate-getspeed", cmdMigrateGetMaxSpeed,
> opts_migrate_getspeed, info_migrate_getspeed, 0},
> {"numatune", cmdNumatune, opts_numatune, info_numatune, 0},
> + {"pcpuinfo", cmdPcpuinfo, opts_pcpuinfo, info_pcpuinfo, 0},
> {"reboot", cmdReboot, opts_reboot, info_reboot, 0},
> {"reset", cmdReset, opts_reset, info_reset, 0},
> {"restore", cmdRestore, opts_restore, info_restore, 0},
> diff --git a/tools/virsh.pod b/tools/virsh.pod
> index 138f886..5a8b2e6 100644
> --- a/tools/virsh.pod
> +++ b/tools/virsh.pod
> @@ -1286,6 +1286,11 @@ Thus, this command always takes exactly zero or two flags.
> Returns basic information about the domain virtual CPUs, like the number of
> vCPUs, the running time, the affinity to physical processors.
>
> +=item B<pcpuinfo> I<domain-id>
> +
> +Returns information about the physic CPUs of the domain, like the usage of
> +CPUs, the current attached vCPUs.
> +
> =item B<vcpupin> I<domain-id> [I<vcpu>] [I<cpulist>] [[I<--live>]
> [I<--config>] | [I<--current>]]
>
--
Shu Ming<shuming at linux.vnet.ibm.com>
IBM China Systems and Technology Laboratory
More information about the libvir-list
mailing list