it is very useful for platforms to know how much time a node is spending running guests.
Signed-off-by: Claudio Fontana <cfont...@suse.de> --- include/libvirt/libvirt-host.h | 10 ++++++++ src/test/test_driver.c | 9 +++++-- src/util/virhostcpu.c | 5 +++- tests/virhostcpudata/linux-cpustat-24cpu.out | 25 ++++++++++++++++++++ tools/virsh-host.c | 3 +++ 5 files changed, 49 insertions(+), 3 deletions(-) diff --git a/include/libvirt/libvirt-host.h b/include/libvirt/libvirt-host.h index 8922d00e0c..2b899144d3 100644 --- a/include/libvirt/libvirt-host.h +++ b/include/libvirt/libvirt-host.h @@ -267,6 +267,16 @@ typedef enum { */ # define VIR_NODE_CPU_STATS_INTR "intr" +/** + * VIR_NODE_CPU_STATS_GUEST: + * + * The cumulative CPU time spent running guests, + * since the node booting up (in nanoseconds). + * + * Since: 11.8.0 + */ +# define VIR_NODE_CPU_STATS_GUEST "guest" + /** * VIR_NODE_CPU_STATS_UTILIZATION: * diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 25335d9002..1165689de7 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -4435,7 +4435,7 @@ static int testNodeGetCellsFreeMemory(virConnectPtr conn, return ret; } -#define TEST_NB_CPU_STATS 4 +#define TEST_NB_CPU_STATS 5 static int testNodeGetCPUStats(virConnectPtr conn G_GNUC_UNUSED, @@ -4453,7 +4453,7 @@ testNodeGetCPUStats(virConnectPtr conn G_GNUC_UNUSED, return 0; } - for (i = 0; i < *nparams && i < 4; i++) { + for (i = 0; i < *nparams && i < 5; i++) { switch (i) { case 0: if (virHostCPUStatsAssign(¶ms[i], @@ -4475,6 +4475,11 @@ testNodeGetCPUStats(virConnectPtr conn G_GNUC_UNUSED, VIR_NODE_CPU_STATS_IOWAIT, 763600000) < 0) return -1; break; + case 4: + if (virHostCPUStatsAssign(¶ms[i], + VIR_NODE_CPU_STATS_GUEST, 1797400000) < 0) + return -1; + break; } } diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c index 5dbcc8987c..c3b4f87de1 100644 --- a/src/util/virhostcpu.c +++ b/src/util/virhostcpu.c @@ -182,7 +182,7 @@ virHostCPUGetStatsFreeBSD(int cpuNum, # define CPUINFO_PATH "/proc/cpuinfo" # define PROCSTAT_PATH "/proc/stat" -# define LINUX_NB_CPU_STATS 4 +# define LINUX_NB_CPU_STATS 5 int virHostCPUGetSocket(unsigned int cpu, unsigned int *socket) @@ -855,6 +855,9 @@ virHostCPUGetStatsLinux(FILE *procstat, iowait * TICK_TO_NSEC) < 0) return -1; + if (virHostCPUStatsAssign(¶ms[4], VIR_NODE_CPU_STATS_GUEST, + guest * TICK_TO_NSEC) < 0) + return -1; return 0; } } diff --git a/tests/virhostcpudata/linux-cpustat-24cpu.out b/tests/virhostcpudata/linux-cpustat-24cpu.out index 0a1a5bcd9a..f3183f5c41 100644 --- a/tests/virhostcpudata/linux-cpustat-24cpu.out +++ b/tests/virhostcpudata/linux-cpustat-24cpu.out @@ -3,148 +3,173 @@ kernel: 8751170 user: 14128079 idle: 1816344522 iowait: 81323 +guest: 5880634 cpu0: kernel: 447603 user: 749021 idle: 75399242 iowait: 5295 +guest: 331814 cpu1: kernel: 167215 user: 337326 idle: 76178612 iowait: 1121 +guest: 166726 cpu2: kernel: 308930 user: 666889 idle: 75649696 iowait: 4298 +guest: 272094 cpu3: kernel: 227674 user: 328464 idle: 76131634 iowait: 1219 +guest: 115551 cpu4: kernel: 299514 user: 583915 idle: 75746383 iowait: 3997 +guest: 253387 cpu5: kernel: 112287 user: 231867 idle: 76336319 iowait: 798 +guest: 118465 cpu6: kernel: 546590 user: 896252 idle: 75132665 iowait: 7210 +guest: 410328 cpu7: kernel: 177715 user: 342337 idle: 76154889 iowait: 1933 +guest: 204523 cpu8: kernel: 452773 user: 772479 idle: 75359327 iowait: 5845 +guest: 347169 cpu9: kernel: 1050230 user: 1079258 idle: 74532776 iowait: 3340 +guest: 150374 cpu10: kernel: 535495 user: 847295 idle: 75202362 iowait: 4038 +guest: 370309 cpu11: kernel: 171635 user: 323891 idle: 76181622 iowait: 993 +guest: 199566 cpu12: kernel: 331031 user: 683257 idle: 75587176 iowait: 5174 +guest: 293663 cpu13: kernel: 112686 user: 230633 idle: 76345295 iowait: 1367 +guest: 103907 cpu14: kernel: 251393 user: 547599 idle: 75824554 iowait: 5195 +guest: 207464 cpu15: kernel: 199044 user: 260673 idle: 76230586 iowait: 1379 +guest: 76655 cpu16: kernel: 244158 user: 463357 idle: 75923993 iowait: 6211 +guest: 184943 cpu17: kernel: 88571 user: 189253 idle: 76411610 iowait: 1388 +guest: 85456 cpu18: kernel: 546539 user: 875655 idle: 75096896 iowait: 5756 +guest: 408446 cpu19: kernel: 186366 user: 348768 idle: 76137323 iowait: 1299 +guest: 208604 cpu20: kernel: 449460 user: 765202 idle: 75348938 iowait: 4389 +guest: 353323 cpu21: kernel: 1045076 user: 1116075 idle: 74500557 iowait: 2411 +guest: 162678 cpu22: kernel: 534125 user: 847779 idle: 75178185 iowait: 5632 +guest: 376150 cpu23: kernel: 265029 user: 640815 idle: 75753872 iowait: 1026 +guest: 479032 diff --git a/tools/virsh-host.c b/tools/virsh-host.c index 51b71b512c..e918cfa4ca 100644 --- a/tools/virsh-host.c +++ b/tools/virsh-host.c @@ -743,6 +743,7 @@ typedef enum { VIRSH_CPU_IDLE, VIRSH_CPU_IOWAIT, VIRSH_CPU_INTR, + VIRSH_CPU_GUEST, VIRSH_CPU_USAGE, VIRSH_CPU_LAST } virshCPUStats; @@ -755,6 +756,7 @@ VIR_ENUM_IMPL(virshCPUStats, VIR_NODE_CPU_STATS_IDLE, VIR_NODE_CPU_STATS_IOWAIT, VIR_NODE_CPU_STATS_INTR, + VIR_NODE_CPU_STATS_GUEST, VIR_NODE_CPU_STATS_UTILIZATION); const char *virshCPUOutput[] = { @@ -763,6 +765,7 @@ const char *virshCPUOutput[] = { N_("idle:"), N_("iowait:"), N_("intr:"), + N_("guest:"), N_("usage:") }; -- 2.35.3