tcg: add separate monitor command to dump opcode counters
PATCH 1/1 tcg: add separate monitor command to dump opcode counters
Currently 'info jit' outputs half of the information to monitor and the rest to qemu log. Dumping opcode counts to monitor as a part of 'info jit' command doesn't sound useful. Add new monitor command 'info opcount' that only dumps opcode counters.
--- include/exec/cpu-all.h | 1 + monitor.c | 12 ++++++++++++ tcg/tcg.c | 12 ++++++++---- tcg/tcg.h | 1 + translate-all.c | 5 +++++ 5 files changed, 27 insertions(+), 4 deletions(-)
include/exec/cpu-all.h +1 -0
@@ -335,6 +335,7 @@ extern RAMList ram_list;#define TLB_MMIO (1 << 5)void dump_exec_info (FILE *f,fprintf_function cpu_fprintf); +void dump_opcount_info (FILE *f,fprintf_function cpu_fprintf);ram_addr_t last_ram_offset (void );void qemu_mutex_lock_ramlist (void );void qemu_mutex_unlock_ramlist (void );
monitor.c +12 -0
@@ -1043,6 +1043,11 @@ static void do_info_jit(Monitor *mon, const QDict *qdict)dump_drift_info ((FILE *)mon, monitor_fprintf); } +static void do_info_opcount (Monitor *mon,const QDict *qdict) +{ +dump_opcount_info ((FILE *)mon, monitor_fprintf); +} +static void do_info_history (Monitor *mon,const QDict *qdict) {int i;
@@ -2736,6 +2741,13 @@ static mon_cmd_t info_cmds[] = { .mhandler.cmd = do_info_jit, }, { + .name = "opcount", + .args_type = "", + .params = "", + .help = "show dynamic compiler opcode counters", + .mhandler.cmd = do_info_opcount, + }, + { .name = "kvm", .args_type = "", .params = "",
tcg/tcg.c +8 -4
@@ -2401,14 +2401,20 @@ static int tcg_reg_alloc_call(TCGContext *s, const TCGOpDef *def,static int64_t tcg_table_op_count[NB_OPS ]; -static void dump_op_count (void ) +void tcg_dump_op_count (FILE *f,fprintf_function cpu_fprintf) {int i;for (i = INDEX_op_end; i <NB_OPS ; i++) { -qemu_log ("%s %" PRId64"\n" , tcg_op_defs[i].name, tcg_table_op_count[i]); +cpu_fprintf (f,"%s %" PRId64"\n" , tcg_op_defs[i].name, + tcg_table_op_count[i]); } } +#else +void tcg_dump_op_count (FILE *f,fprintf_function cpu_fprintf) +{ +cpu_fprintf (f,"[TCG profiler not compiled]\n" ); +}#endif
@@ -2620,8 +2626,6 @@ void tcg_dump_info(FILE *f, fprintf_function cpu_fprintf) s->restore_count);cpu_fprintf (f," avg cycles %0.1f\n" , s->restore_count ? (double)s->restore_time / s->restore_count : 0); - - dump_op_count(); }#else void tcg_dump_info (FILE *f,fprintf_function cpu_fprintf)
tcg/tcg.h +1 -0
@@ -610,6 +610,7 @@ int tcg_check_temp_count(void);#endif void tcg_dump_info (FILE *f,fprintf_function cpu_fprintf); +void tcg_dump_op_count (FILE *f,fprintf_function cpu_fprintf);#define TCG_CT_ALIAS 0x80#define TCG_CT_IALIAS 0x40
translate-all.c +5 -0
@@ -1645,6 +1645,11 @@ void dump_exec_info(FILE *f, fprintf_function cpu_fprintf) tcg_dump_info(f, cpu_fprintf); } +void dump_opcount_info (FILE *f,fprintf_function cpu_fprintf) +{ +tcg_dump_op_count (f, cpu_fprintf); +} +#else /* CONFIG_USER_ONLY */ void cpu_interrupt (CPUState *cpu,int mask)
Signature · 1 line
1.8.1.4
Quoted 5 lines · Max Filippov
Currently 'info jit' outputs half of the information to monitor and the rest to qemu log. Dumping opcode counts to monitor as a part of 'info jit' command doesn't sound useful. Add new monitor command 'info opcount' that only dumps opcode counters.
Quoted 8 lines
Signed-off-by Max Filippov <[email protected]>--- include/exec/cpu-all.h | 1 + monitor.c | 12 ++++++++++++ tcg/tcg.c | 12 ++++++++---- tcg/tcg.h | 1 + translate-all.c | 5 +++++ 5 files changed, 27 insertions(+), 4 deletions(-)
r~
Quoted 6 lines · Max Filippov
Currently 'info jit' outputs half of the information to monitor and the rest to qemu log. Dumping opcode counts to monitor as a part of 'info jit' command doesn't sound useful. Add new monitor command 'info opcount' that only dumps opcode counters.
Signed-off-by Max Filippov <[email protected]>
Quoted 114 lines
--- include/exec/cpu-all.h | 1 + monitor.c | 12 ++++++++++++ tcg/tcg.c | 12 ++++++++---- tcg/tcg.h | 1 + translate-all.c | 5 +++++ 5 files changed, 27 insertions(+), 4 deletions(-)include/exec/cpu-all.h +1
-0@@ -335,6 +335,7 @@ extern RAMList ram_list;#define TLB_MMIO (1 << 5)void dump_exec_info (FILE *f,fprintf_function cpu_fprintf); +void dump_opcount_info (FILE *f,fprintf_function cpu_fprintf);ram_addr_t last_ram_offset (void );void qemu_mutex_lock_ramlist (void );void qemu_mutex_unlock_ramlist (void );monitor.c +12
-0@@ -1043,6 +1043,11 @@ static void do_info_jit(Monitor *mon, const QDict *qdict)dump_drift_info ((FILE *)mon, monitor_fprintf); } +static void do_info_opcount (Monitor *mon,const QDict *qdict) +{ +dump_opcount_info ((FILE *)mon, monitor_fprintf); +} +static void do_info_history (Monitor *mon,const QDict *qdict) {int i;@@ -2736,6 +2741,13 @@ static mon_cmd_t info_cmds[] = { .mhandler.cmd = do_info_jit, }, { + .name = "opcount", + .args_type = "", + .params = "", + .help = "show dynamic compiler opcode counters", + .mhandler.cmd = do_info_opcount, + }, + { .name = "kvm", .args_type = "", .params = "",tcg/tcg.c +8
-4@@ -2401,14 +2401,20 @@ static int tcg_reg_alloc_call(TCGContext *s, const TCGOpDef *def,static int64_t tcg_table_op_count[NB_OPS ]; -static void dump_op_count (void ) +void tcg_dump_op_count (FILE *f,fprintf_function cpu_fprintf) {int i;for (i = INDEX_op_end; i <NB_OPS ; i++) { -qemu_log ("%s %" PRId64"\n" , tcg_op_defs[i].name, tcg_table_op_count[i]); +cpu_fprintf (f,"%s %" PRId64"\n" , tcg_op_defs[i].name, + tcg_table_op_count[i]); } } +#else +void tcg_dump_op_count (FILE *f,fprintf_function cpu_fprintf) +{ +cpu_fprintf (f,"[TCG profiler not compiled]\n" ); +}#endif @@ -2620,8 +2626,6 @@ void tcg_dump_info(FILE *f, fprintf_function cpu_fprintf) s->restore_count);cpu_fprintf (f," avg cycles %0.1f\n" , s->restore_count ? (double)s->restore_time / s->restore_count : 0); - - dump_op_count(); }#else void tcg_dump_info (FILE *f,fprintf_function cpu_fprintf)tcg/tcg.h +1
-0@@ -610,6 +610,7 @@ int tcg_check_temp_count(void);#endif void tcg_dump_info (FILE *f,fprintf_function cpu_fprintf); +void tcg_dump_op_count (FILE *f,fprintf_function cpu_fprintf);#define TCG_CT_ALIAS 0x80#define TCG_CT_IALIAS 0x40translate-all.c +5
-0@@ -1645,6 +1645,11 @@ void dump_exec_info(FILE *f, fprintf_function cpu_fprintf) tcg_dump_info(f, cpu_fprintf); } +void dump_opcount_info (FILE *f,fprintf_function cpu_fprintf) +{ +tcg_dump_op_count (f, cpu_fprintf); +} +#else /* CONFIG_USER_ONLY */ void cpu_interrupt (CPUState *cpu,int mask)
Signature · 1 line
Alex Bennée