mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
Implement pretty flag for vcpuinfo and nodecpumap
Report CPU affinities / online CPUs in human-readable form when this flag is present: Before: CPU Affinity: y-yy After: CPU Affinity: 0,2-3 (out of 4) https://bugzilla.redhat.com/show_bug.cgi?id=985980
This commit is contained in:
parent
7d8afc4725
commit
a3173fef9d
@ -5528,6 +5528,10 @@ static const vshCmdOptDef opts_vcpuinfo[] = {
|
||||
.flags = VSH_OFLAG_REQ,
|
||||
.help = N_("domain name, id or uuid")
|
||||
},
|
||||
{.name = "pretty",
|
||||
.type = VSH_OT_BOOL,
|
||||
.help = N_("return human readable output")
|
||||
},
|
||||
{.name = NULL}
|
||||
};
|
||||
|
||||
@ -5541,6 +5545,7 @@ cmdVcpuinfo(vshControl *ctl, const vshCmd *cmd)
|
||||
int ncpus, maxcpu;
|
||||
size_t cpumaplen;
|
||||
bool ret = false;
|
||||
bool pretty = vshCommandOptBool(cmd, "pretty");
|
||||
int n, m;
|
||||
|
||||
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
|
||||
@ -5589,8 +5594,20 @@ cmdVcpuinfo(vshControl *ctl, const vshCmd *cmd)
|
||||
vshPrint(ctl, "%-15s %s\n", _("CPU time"), _("N/A"));
|
||||
}
|
||||
vshPrint(ctl, "%-15s ", _("CPU Affinity:"));
|
||||
for (m = 0; m < maxcpu; m++) {
|
||||
vshPrint(ctl, "%c", VIR_CPU_USABLE(cpumaps, cpumaplen, n, m) ? 'y' : '-');
|
||||
if (pretty) {
|
||||
char *str;
|
||||
|
||||
str = virBitmapDataToString(VIR_GET_CPUMAP(cpumaps, cpumaplen, n),
|
||||
cpumaplen);
|
||||
if (!str)
|
||||
goto cleanup;
|
||||
vshPrint(ctl, _("%s (out of %d)"), str, maxcpu);
|
||||
VIR_FREE(str);
|
||||
} else {
|
||||
for (m = 0; m < maxcpu; m++) {
|
||||
vshPrint(ctl, "%c",
|
||||
VIR_CPU_USABLE(cpumaps, cpumaplen, n, m) ? 'y' : '-');
|
||||
}
|
||||
}
|
||||
vshPrint(ctl, "\n");
|
||||
if (n < (ncpus - 1))
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include <libxml/xmlsave.h>
|
||||
|
||||
#include "internal.h"
|
||||
#include "virbitmap.h"
|
||||
#include "virbuffer.h"
|
||||
#include "viralloc.h"
|
||||
#include "virsh-domain.h"
|
||||
@ -278,12 +279,21 @@ static const vshCmdInfo info_node_cpumap[] = {
|
||||
{.name = NULL}
|
||||
};
|
||||
|
||||
static const vshCmdOptDef opts_node_cpumap[] = {
|
||||
{.name = "pretty",
|
||||
.type = VSH_OT_BOOL,
|
||||
.help = N_("return human readable output")
|
||||
},
|
||||
{.name = NULL}
|
||||
};
|
||||
|
||||
static bool
|
||||
cmdNodeCpuMap(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
|
||||
{
|
||||
int cpu, cpunum;
|
||||
unsigned char *cpumap = NULL;
|
||||
unsigned int online;
|
||||
bool pretty = vshCommandOptBool(cmd, "pretty");
|
||||
bool ret = false;
|
||||
|
||||
cpunum = virNodeGetCPUMap(ctl->conn, &cpumap, &online, 0);
|
||||
@ -296,8 +306,17 @@ cmdNodeCpuMap(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
|
||||
vshPrint(ctl, "%-15s %d\n", _("CPUs online:"), online);
|
||||
|
||||
vshPrint(ctl, "%-15s ", _("CPU map:"));
|
||||
for (cpu = 0; cpu < cpunum; cpu++)
|
||||
vshPrint(ctl, "%c", VIR_CPU_USED(cpumap, cpu) ? 'y' : '-');
|
||||
if (pretty) {
|
||||
char *str = virBitmapDataToString(cpumap, cpunum);
|
||||
|
||||
if (!str)
|
||||
goto cleanup;
|
||||
vshPrint(ctl, "%s", str);
|
||||
VIR_FREE(str);
|
||||
} else {
|
||||
for (cpu = 0; cpu < cpunum; cpu++)
|
||||
vshPrint(ctl, "%c", VIR_CPU_USED(cpumap, cpu) ? 'y' : '-');
|
||||
}
|
||||
vshPrint(ctl, "\n");
|
||||
|
||||
ret = true;
|
||||
@ -978,7 +997,7 @@ const vshCmdDef hostAndHypervisorCmds[] = {
|
||||
},
|
||||
{.name = "nodecpumap",
|
||||
.handler = cmdNodeCpuMap,
|
||||
.opts = NULL,
|
||||
.opts = opts_node_cpumap,
|
||||
.info = info_node_cpumap,
|
||||
.flags = 0
|
||||
},
|
||||
|
@ -290,11 +290,13 @@ and size of the physical memory. The output corresponds to virNodeInfo
|
||||
structure. Specifically, the "CPU socket(s)" field means number of CPU
|
||||
sockets per NUMA cell.
|
||||
|
||||
=item B<nodecpumap>
|
||||
=item B<nodecpumap> [I<--pretty>]
|
||||
|
||||
Displays the node's total number of CPUs, the number of online CPUs
|
||||
and the list of online CPUs.
|
||||
|
||||
With I<--pretty> the online CPUs are printed as a range instead of a list.
|
||||
|
||||
=item B<nodecpustats> [I<cpu>] [I<--percent>]
|
||||
|
||||
Returns cpu stats of the node.
|
||||
@ -1954,11 +1956,13 @@ If I<--guest> is specified, then the count of cpus is reported from
|
||||
the perspective of the guest. This flag is usable only for live domains
|
||||
and may require guest agent to be configured in the guest.
|
||||
|
||||
=item B<vcpuinfo> I<domain>
|
||||
=item B<vcpuinfo> I<domain> [I<--pretty>]
|
||||
|
||||
Returns basic information about the domain virtual CPUs, like the number of
|
||||
vCPUs, the running time, the affinity to physical processors.
|
||||
|
||||
With I<--pretty>, cpu affinities are shown as ranges.
|
||||
|
||||
=item B<vcpupin> I<domain> [I<vcpu>] [I<cpulist>] [[I<--live>]
|
||||
[I<--config>] | [I<--current>]]
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user