qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 06/14] contrib/plugins: allow setting of instructions per


From: Akihiko Odaki
Subject: Re: [PATCH v2 06/14] contrib/plugins: allow setting of instructions per quantum
Date: Sat, 10 May 2025 13:45:28 +0900
User-agent: Mozilla Thunderbird

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",




reply via email to

[Prev in Thread] Current Thread [Next in Thread]