qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Pierrick Bouvier" <pierrick.bouvier@linaro.org>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Alexandre Iooss" <erdnaxe@crans.org>,
	"Mahmoud Mandour" <ma.mandourr@gmail.com>
Subject: [PULL 22/29] contrib/plugins/hotblocks: migrate to new per_vcpu API
Date: Wed,  6 Mar 2024 14:40:34 +0000	[thread overview]
Message-ID: <20240306144041.3787188-23-alex.bennee@linaro.org> (raw)
In-Reply-To: <20240306144041.3787188-1-alex.bennee@linaro.org>

From: Pierrick Bouvier <pierrick.bouvier@linaro.org>

Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-Id: <20240304130036.124418-10-pierrick.bouvier@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240305121005.3528075-23-alex.bennee@linaro.org>

diff --git a/contrib/plugins/hotblocks.c b/contrib/plugins/hotblocks.c
index 4de1b134944..02bc5078bdd 100644
--- a/contrib/plugins/hotblocks.c
+++ b/contrib/plugins/hotblocks.c
@@ -34,8 +34,8 @@ static guint64 limit = 20;
  */
 typedef struct {
     uint64_t start_addr;
-    uint64_t exec_count;
-    int      trans_count;
+    struct qemu_plugin_scoreboard *exec_count;
+    int trans_count;
     unsigned long insns;
 } ExecCount;
 
@@ -43,7 +43,17 @@ static gint cmp_exec_count(gconstpointer a, gconstpointer b)
 {
     ExecCount *ea = (ExecCount *) a;
     ExecCount *eb = (ExecCount *) b;
-    return ea->exec_count > eb->exec_count ? -1 : 1;
+    uint64_t count_a =
+        qemu_plugin_u64_sum(qemu_plugin_scoreboard_u64(ea->exec_count));
+    uint64_t count_b =
+        qemu_plugin_u64_sum(qemu_plugin_scoreboard_u64(eb->exec_count));
+    return count_a > count_b ? -1 : 1;
+}
+
+static void exec_count_free(gpointer key, gpointer value, gpointer user_data)
+{
+    ExecCount *cnt = value;
+    qemu_plugin_scoreboard_free(cnt->exec_count);
 }
 
 static void plugin_exit(qemu_plugin_id_t id, void *p)
@@ -52,7 +62,6 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
     GList *counts, *it;
     int i;
 
-    g_mutex_lock(&lock);
     g_string_append_printf(report, "%d entries in the hash table\n",
                            g_hash_table_size(hotblocks));
     counts = g_hash_table_get_values(hotblocks);
@@ -63,16 +72,21 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
 
         for (i = 0; i < limit && it->next; i++, it = it->next) {
             ExecCount *rec = (ExecCount *) it->data;
-            g_string_append_printf(report, "0x%016"PRIx64", %d, %ld, %"PRId64"\n",
-                                   rec->start_addr, rec->trans_count,
-                                   rec->insns, rec->exec_count);
+            g_string_append_printf(
+                report, "0x%016"PRIx64", %d, %ld, %"PRId64"\n",
+                rec->start_addr, rec->trans_count,
+                rec->insns,
+                qemu_plugin_u64_sum(
+                    qemu_plugin_scoreboard_u64(rec->exec_count)));
         }
 
         g_list_free(it);
     }
-    g_mutex_unlock(&lock);
 
     qemu_plugin_outs(report->str);
+
+    g_hash_table_foreach(hotblocks, exec_count_free, NULL);
+    g_hash_table_destroy(hotblocks);
 }
 
 static void plugin_init(void)
@@ -82,15 +96,9 @@ static void plugin_init(void)
 
 static void vcpu_tb_exec(unsigned int cpu_index, void *udata)
 {
-    ExecCount *cnt;
-    uint64_t hash = (uint64_t) udata;
-
-    g_mutex_lock(&lock);
-    cnt = (ExecCount *) g_hash_table_lookup(hotblocks, (gconstpointer) hash);
-    /* should always succeed */
-    g_assert(cnt);
-    cnt->exec_count++;
-    g_mutex_unlock(&lock);
+    ExecCount *cnt = (ExecCount *)udata;
+    qemu_plugin_u64_add(qemu_plugin_scoreboard_u64(cnt->exec_count),
+                        cpu_index, 1);
 }
 
 /*
@@ -114,18 +122,20 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
         cnt->start_addr = pc;
         cnt->trans_count = 1;
         cnt->insns = insns;
+        cnt->exec_count = qemu_plugin_scoreboard_new(sizeof(uint64_t));
         g_hash_table_insert(hotblocks, (gpointer) hash, (gpointer) cnt);
     }
 
     g_mutex_unlock(&lock);
 
     if (do_inline) {
-        qemu_plugin_register_vcpu_tb_exec_inline(tb, QEMU_PLUGIN_INLINE_ADD_U64,
-                                                 &cnt->exec_count, 1);
+        qemu_plugin_register_vcpu_tb_exec_inline_per_vcpu(
+            tb, QEMU_PLUGIN_INLINE_ADD_U64,
+            qemu_plugin_scoreboard_u64(cnt->exec_count), 1);
     } else {
         qemu_plugin_register_vcpu_tb_exec_cb(tb, vcpu_tb_exec,
                                              QEMU_PLUGIN_CB_NO_REGS,
-                                             (void *)hash);
+                                             (void *)cnt);
     }
 }
 
-- 
2.39.2



  parent reply	other threads:[~2024-03-06 14:49 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-06 14:40 [PULL for 9.0 00/29] maintainer updates (tests, gdbstub, plugins) Alex Bennée
2024-03-06 14:40 ` [PULL 01/29] tests: bump QOS_PATH_MAX_ELEMENT_SIZE again Alex Bennée
2024-03-06 14:40 ` [PULL 02/29] gdbstub: Support disablement in a multi-threaded process Alex Bennée
2024-03-06 14:40 ` [PULL 03/29] {linux,bsd}-user: Introduce get_task_state() Alex Bennée
2024-03-06 14:40 ` [PULL 04/29] {linux,bsd}-user: Update ts_tid after fork() Alex Bennée
2024-03-06 14:40 ` [PULL 05/29] gdbstub: Introduce gdbserver_fork_start() Alex Bennée
2024-03-06 14:40 ` [PULL 06/29] {linux,bsd}-user: Pass pid to fork_end() Alex Bennée
2024-03-06 14:40 ` [PULL 07/29] {linux,bsd}-user: Pass pid to gdbserver_fork() Alex Bennée
2024-03-06 14:40 ` [PULL 08/29] gdbstub: Call gdbserver_fork() both in parent and in child Alex Bennée
2024-03-06 14:40 ` [PULL 09/29] gdbstub: Introduce gdb_handle_query_supported_user() Alex Bennée
2024-03-06 14:40 ` [PULL 10/29] gdbstub: Introduce gdb_handle_set_thread_user() Alex Bennée
2024-03-06 14:40 ` [PULL 11/29] gdbstub: Introduce gdb_handle_detach_user() Alex Bennée
2024-03-06 14:40 ` [PULL 12/29] gdbstub: Implement follow-fork-mode child Alex Bennée
2024-03-11 11:48   ` Peter Maydell
2024-03-06 14:40 ` [PULL 13/29] tests/tcg: Add two follow-fork-mode tests Alex Bennée
2024-03-06 14:40 ` [PULL 14/29] plugins: scoreboard API Alex Bennée
2024-03-06 14:40 ` [PULL 15/29] plugins: define qemu_plugin_u64 Alex Bennée
2024-03-06 14:40 ` [PULL 16/29] plugins: implement inline operation relative to cpu_index Alex Bennée
2024-03-06 14:40 ` [PULL 17/29] plugins: add inline operation per vcpu Alex Bennée
2024-03-06 14:40 ` [PULL 18/29] tests/plugin: add test plugin for inline operations Alex Bennée
2024-03-06 14:40 ` [PULL 19/29] tests/plugin/mem: migrate to new per_vcpu API Alex Bennée
2024-03-06 14:40 ` [PULL 20/29] tests/plugin/insn: " Alex Bennée
2024-03-06 14:40 ` [PULL 21/29] tests/plugin/bb: " Alex Bennée
2024-03-06 14:40 ` Alex Bennée [this message]
2024-03-06 14:40 ` [PULL 23/29] contrib/plugins/howvec: " Alex Bennée
2024-03-06 14:40 ` [PULL 24/29] plugins: remove non per_vcpu inline operation from API Alex Bennée
2024-03-06 14:40 ` [PULL 25/29] plugins: cleanup codepath for previous inline operation Alex Bennée
2024-03-06 14:40 ` [PULL 26/29] disas: introduce show_opcodes Alex Bennée
2024-03-11 11:02   ` Thomas Huth
2024-03-11 12:00     ` Alex Bennée
2024-03-06 14:40 ` [PULL 27/29] disas/hppa: honour show_opcodes Alex Bennée
2024-03-06 14:40 ` [PULL 28/29] target/loongarch: honour show_opcodes when disassembling Alex Bennée
2024-03-06 14:40 ` [PULL 29/29] target/riscv: " Alex Bennée
2024-03-07 11:43 ` [PULL for 9.0 00/29] maintainer updates (tests, gdbstub, plugins) Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240306144041.3787188-23-alex.bennee@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=erdnaxe@crans.org \
    --cc=ma.mandourr@gmail.com \
    --cc=pierrick.bouvier@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).