On 2021/7/27 16:31, Michal Prívozník wrote:
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(a)huawei.com>
> ---
> 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-".
Thanks for your review Michal. And do I need to send another version to fix it now?
> + 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
.
Thanks,
Fei.