On 3/10/23 20:30, Richard Henderson wrote:
From: Fei Wu <fei2...@intel.com>
Dump the hottest TBs if -d tb_stats:{all,jit,exec}[:dump_num_at_exit]
Signed-off-by: Fei Wu <fei2...@intel.com>
Signed-off-by: Richard Henderson <richard.hender...@linaro.org>
---
bsd-user/bsd-proc.h | 2 ++
include/tcg/tb-stats.h | 10 +++++++++-
accel/tcg/monitor.c | 8 +++++---
accel/tcg/tb-stats.c | 27 ++++++++++++++++++++++++++-
linux-user/exit.c | 10 ++++++----
softmmu/runstate.c | 2 ++
stubs/tb-stats.c | 6 +++++-
util/log.c | 20 ++++++++++++++++----
8 files changed, 71 insertions(+), 14 deletions(-)
diff --git a/softmmu/runstate.c b/softmmu/runstate.c
index 1652ed0439..2c6fb9bff1 100644
--- a/softmmu/runstate.c
+++ b/softmmu/runstate.c
@@ -59,6 +59,7 @@
#include "sysemu/runstate-action.h"
#include "sysemu/sysemu.h"
#include "sysemu/tpm.h"
+#include "tcg/tb-stats.h"
#include "trace.h"
static NotifierList exit_notifiers =
@@ -846,6 +847,7 @@ void qemu_cleanup(void)
/* No more vcpu or device emulation activity beyond this point */
vm_shutdown();
replay_finish();
+ tb_stats_dump_atexit();
/*
* We must cancel all block jobs while the block layer is drained,
diff --git a/stubs/tb-stats.c b/stubs/tb-stats.c
index ceaa1622ce..f9e4ef5d04 100644
--- a/stubs/tb-stats.c
+++ b/stubs/tb-stats.c
@@ -11,6 +11,10 @@
#include "qemu/osdep.h"
#include "tcg/tb-stats.h"
-void tb_stats_init(uint32_t flags)
+void tb_stats_init(uint32_t flags, uint32_t atexit)
+{
+}
+
+void tb_stats_dump_atexit(void)
{
}
The stub isn't needed using:
-- >8 --
diff --git a/softmmu/runstate.c b/softmmu/runstate.c
index 2c6fb9bff1..d05e2b8e1c 100644
--- a/softmmu/runstate.c
+++ b/softmmu/runstate.c
@@ -52,6 +52,7 @@
#include "qom/object.h"
#include "qom/object_interfaces.h"
#include "sysemu/cpus.h"
+#include "sysemu/tcg.h"
#include "sysemu/qtest.h"
#include "sysemu/replay.h"
#include "sysemu/reset.h"
@@ -847,7 +848,9 @@ void qemu_cleanup(void)
/* No more vcpu or device emulation activity beyond this point */
vm_shutdown();
replay_finish();
- tb_stats_dump_atexit();
+ if (tcg_enabled()) {
+ tb_stats_dump_atexit();
+ }
/*
* We must cancel all block jobs while the block layer is drained,
---