On 7/22/21 10:05 AM, Yang Fei wrote: > Add helper function virHostCPUGetHaltPollTime to obtain halt polling > time. If the kernel support halt polling time statistic, and mount > debugfs. This function will take effect on KVM VMs. > > Signed-off-by: Yang Fei <yangfei85@xxxxxxxxxx> > --- > src/libvirt_private.syms | 1 + > src/util/virhostcpu.c | 39 +++++++++++++++++++++++++++++++++++++++ > src/util/virhostcpu.h | 4 ++++ > 3 files changed, 44 insertions(+) > > diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c > index bf7fda23af..7f577c3e3e 100644 > --- a/src/util/virhostcpu.c > +++ b/src/util/virhostcpu.c > @@ -1535,3 +1535,42 @@ virHostCPUGetSignature(char **signature) > } > > #endif /* __linux__ */ > + > +int > +virHostCPUGetHaltPollTime(pid_t pid, > + unsigned long long *haltPollSuccess, > + unsigned long long *haltPollFail) > +{ > + g_autofree char *pidToStr = NULL; > + g_autofree char *debugFsPath = NULL; > + g_autofree char *kvmPath = NULL; > + struct dirent *ent = NULL; > + g_autoptr(DIR) dir = NULL; > + bool found = false; > + > + if (!(debugFsPath = virFileFindMountPoint("debugfs"))) > + return -1; > + > + kvmPath = g_strdup_printf("%s/%s", debugFsPath, "kvm"); > + if (virDirOpenQuiet(&dir, kvmPath) != 1) > + return -1; > + > + pidToStr = g_strdup_printf("%lld%c", (long long)pid, '-'); Just a tiny nit: this could be "%lld-". > + while (virDirRead(dir, &ent, NULL) > 0) { > + if (STRPREFIX(ent->d_name, pidToStr)) { > + found = true; > + break; > + } > + } > + > + if (!found) > + return -1; > + > + if (virFileReadValueUllongQuiet(haltPollSuccess, "%s/%s/%s", kvmPath, > + ent->d_name, "halt_poll_success_ns") < 0 || > + virFileReadValueUllongQuiet(haltPollFail, "%s/%s/%s", kvmPath, > + ent->d_name, "halt_poll_fail_ns") < 0) > + return -1; > + > + return 0; > +} Michal