monitor: move x-query-profile into accel/tcg to fix build
As --enable-profiler isn't defended in CI we missed this breakage.
Move the qmp handler into accel/tcg so we have access to the helpers
we need. While we are at it ensure we gate the feature on CONFIG_TCG.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
Reported-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Fixes: 37087fde0e
("qapi: introduce x-query-profile QMP command")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/773
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20220105135009.1584676-23-alex.bennee@linaro.org>
staging
parent
33973e1e1f
commit
92e28c03d6
|
@ -1090,4 +1090,35 @@ HumanReadableText *qmp_x_query_opcount(Error **errp)
|
||||||
return human_readable_text_from_str(buf);
|
return human_readable_text_from_str(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_PROFILER
|
||||||
|
|
||||||
|
int64_t dev_time;
|
||||||
|
|
||||||
|
HumanReadableText *qmp_x_query_profile(Error **errp)
|
||||||
|
{
|
||||||
|
g_autoptr(GString) buf = g_string_new("");
|
||||||
|
static int64_t last_cpu_exec_time;
|
||||||
|
int64_t cpu_exec_time;
|
||||||
|
int64_t delta;
|
||||||
|
|
||||||
|
cpu_exec_time = tcg_cpu_exec_time();
|
||||||
|
delta = cpu_exec_time - last_cpu_exec_time;
|
||||||
|
|
||||||
|
g_string_append_printf(buf, "async time %" PRId64 " (%0.3f)\n",
|
||||||
|
dev_time, dev_time / (double)NANOSECONDS_PER_SECOND);
|
||||||
|
g_string_append_printf(buf, "qemu time %" PRId64 " (%0.3f)\n",
|
||||||
|
delta, delta / (double)NANOSECONDS_PER_SECOND);
|
||||||
|
last_cpu_exec_time = cpu_exec_time;
|
||||||
|
dev_time = 0;
|
||||||
|
|
||||||
|
return human_readable_text_from_str(buf);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
HumanReadableText *qmp_x_query_profile(Error **errp)
|
||||||
|
{
|
||||||
|
error_setg(errp, "Internal profiler not compiled");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* !CONFIG_USER_ONLY */
|
#endif /* !CONFIG_USER_ONLY */
|
||||||
|
|
|
@ -358,6 +358,7 @@ SRST
|
||||||
Show host USB devices.
|
Show host USB devices.
|
||||||
ERST
|
ERST
|
||||||
|
|
||||||
|
#if defined(CONFIG_TCG)
|
||||||
{
|
{
|
||||||
.name = "profile",
|
.name = "profile",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
|
@ -365,6 +366,7 @@ ERST
|
||||||
.help = "show profiling information",
|
.help = "show profiling information",
|
||||||
.cmd_info_hrt = qmp_x_query_profile,
|
.cmd_info_hrt = qmp_x_query_profile,
|
||||||
},
|
},
|
||||||
|
#endif
|
||||||
|
|
||||||
SRST
|
SRST
|
||||||
``info profile``
|
``info profile``
|
||||||
|
|
|
@ -368,37 +368,6 @@ void qmp_display_reload(DisplayReloadOptions *arg, Error **errp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PROFILER
|
|
||||||
|
|
||||||
int64_t dev_time;
|
|
||||||
|
|
||||||
HumanReadableText *qmp_x_query_profile(Error **errp)
|
|
||||||
{
|
|
||||||
g_autoptr(GString) buf = g_string_new("");
|
|
||||||
static int64_t last_cpu_exec_time;
|
|
||||||
int64_t cpu_exec_time;
|
|
||||||
int64_t delta;
|
|
||||||
|
|
||||||
cpu_exec_time = tcg_cpu_exec_time();
|
|
||||||
delta = cpu_exec_time - last_cpu_exec_time;
|
|
||||||
|
|
||||||
g_string_append_printf(buf, "async time %" PRId64 " (%0.3f)\n",
|
|
||||||
dev_time, dev_time / (double)NANOSECONDS_PER_SECOND);
|
|
||||||
g_string_append_printf(buf, "qemu time %" PRId64 " (%0.3f)\n",
|
|
||||||
delta, delta / (double)NANOSECONDS_PER_SECOND);
|
|
||||||
last_cpu_exec_time = cpu_exec_time;
|
|
||||||
dev_time = 0;
|
|
||||||
|
|
||||||
return human_readable_text_from_str(buf);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
HumanReadableText *qmp_x_query_profile(Error **errp)
|
|
||||||
{
|
|
||||||
error_setg(errp, "Internal profiler not compiled");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int qmp_x_query_rdma_foreach(Object *obj, void *opaque)
|
static int qmp_x_query_rdma_foreach(Object *obj, void *opaque)
|
||||||
{
|
{
|
||||||
RdmaProvider *rdma;
|
RdmaProvider *rdma;
|
||||||
|
|
|
@ -1503,6 +1503,7 @@
|
||||||
##
|
##
|
||||||
{ 'command': 'x-query-profile',
|
{ 'command': 'x-query-profile',
|
||||||
'returns': 'HumanReadableText',
|
'returns': 'HumanReadableText',
|
||||||
|
'if': 'CONFIG_TCG',
|
||||||
'features': [ 'unstable' ] }
|
'features': [ 'unstable' ] }
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
Loading…
Reference in New Issue