Message ID | 20250506125715.232872-7-alex.bennee@linaro.org |
---|---|
State | New |
Headers | show |
Series | Maintainer updates for May (testing, plugins, virtio-gpu) | expand |
On 2025/05/06 21:57, Alex Bennée wrote: > The default is we update time every 1/10th of a second or so. However > for some cases we might want to update time more frequently. Allow > this to be set via the command line through the ipq argument. > > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> > > --- > v2 > - checkpatch fixes. > --- > docs/about/emulation.rst | 4 ++++ > contrib/plugins/ips.c | 10 +++++++++- > 2 files changed, 13 insertions(+), 1 deletion(-) > > diff --git a/docs/about/emulation.rst b/docs/about/emulation.rst > index a72591ee4d..456d01d5b0 100644 > --- a/docs/about/emulation.rst > +++ b/docs/about/emulation.rst > @@ -811,6 +811,10 @@ This plugin can limit the number of Instructions Per Second that are executed:: > * - ips=N > - Maximum number of instructions per cpu that can be executed in one second. > The plugin will sleep when the given number of instructions is reached. > + * - ipq=N > + - Instructions per quantum. How many instructions before we re-calculate time. > + The lower the number the more accurate time will be, but the less efficient the plugin. > + Defaults to ips/10 > > Other emulation features > ------------------------ > diff --git a/contrib/plugins/ips.c b/contrib/plugins/ips.c > index 9b166a7d6c..62ed8ddd08 100644 > --- a/contrib/plugins/ips.c > +++ b/contrib/plugins/ips.c > @@ -147,6 +147,8 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, > const qemu_info_t *info, int argc, > char **argv) > { > + bool ipq_set = false; > + > for (int i = 0; i < argc; i++) { > char *opt = argv[i]; > g_auto(GStrv) tokens = g_strsplit(opt, "=", 2); > @@ -177,6 +179,9 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, > return -1; > } > } > + } else if (g_strcmp0(tokens[0], "ipq") == 0) { > + max_insn_per_quantum = g_ascii_strtoull(tokens[1], NULL, 10); It may be nice to have an error check performed for ips. > + ipq_set = true; > } else { > fprintf(stderr, "option parsing failed: %s\n", opt); > return -1; > @@ -184,7 +189,10 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, > } > > vcpus = qemu_plugin_scoreboard_new(sizeof(vCPUTime)); > - max_insn_per_quantum = max_insn_per_second / NUM_TIME_UPDATE_PER_SEC; > + > + if (!ipq_set) { > + max_insn_per_quantum = max_insn_per_second / NUM_TIME_UPDATE_PER_SEC; > + } > > if (max_insn_per_quantum == 0) { > fprintf(stderr, "minimum of %d instructions per second needed\n",
diff --git a/docs/about/emulation.rst b/docs/about/emulation.rst index a72591ee4d..456d01d5b0 100644 --- a/docs/about/emulation.rst +++ b/docs/about/emulation.rst @@ -811,6 +811,10 @@ This plugin can limit the number of Instructions Per Second that are executed:: * - ips=N - Maximum number of instructions per cpu that can be executed in one second. The plugin will sleep when the given number of instructions is reached. + * - ipq=N + - Instructions per quantum. How many instructions before we re-calculate time. + The lower the number the more accurate time will be, but the less efficient the plugin. + Defaults to ips/10 Other emulation features ------------------------ diff --git a/contrib/plugins/ips.c b/contrib/plugins/ips.c index 9b166a7d6c..62ed8ddd08 100644 --- a/contrib/plugins/ips.c +++ b/contrib/plugins/ips.c @@ -147,6 +147,8 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info, int argc, char **argv) { + bool ipq_set = false; + for (int i = 0; i < argc; i++) { char *opt = argv[i]; g_auto(GStrv) tokens = g_strsplit(opt, "=", 2); @@ -177,6 +179,9 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, return -1; } } + } else if (g_strcmp0(tokens[0], "ipq") == 0) { + max_insn_per_quantum = g_ascii_strtoull(tokens[1], NULL, 10); + ipq_set = true; } else { fprintf(stderr, "option parsing failed: %s\n", opt); return -1; @@ -184,7 +189,10 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, } vcpus = qemu_plugin_scoreboard_new(sizeof(vCPUTime)); - max_insn_per_quantum = max_insn_per_second / NUM_TIME_UPDATE_PER_SEC; + + if (!ipq_set) { + max_insn_per_quantum = max_insn_per_second / NUM_TIME_UPDATE_PER_SEC; + } if (max_insn_per_quantum == 0) { fprintf(stderr, "minimum of %d instructions per second needed\n",