Skip to content

Commit

Permalink
profiler: Reenable built-in profiler
Browse files Browse the repository at this point in the history
2ed1ebc "timer: replace time() with QEMU_CLOCK_HOST" broke compile
when configured with --enable-profiler. Turned out the profiler has been
broken for a while.

This does s/qemu_time/tcg_time/ as the profiler only works in a TCG mode.
This also fixes the compile error.

This changes profile_getclock() to return nanoseconds rather than
CPU ticks as the "profile" HMP command prints seconds and there is no
platform-independent way to get ticks-per-second rate.
Since TCG is quite slow and get_clock() returns nanoseconds (fine
enough), this should not affect precision much.

This removes unused qemu_time_start and tlb_flush_time.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Message-Id: <1426478258-29961-1-git-send-email-aik@ozlabs.ru>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
aik authored and bonzini committed Mar 18, 2015
1 parent b680c5b commit 89d5cbd
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 7 deletions.
2 changes: 1 addition & 1 deletion cpus.c
Expand Up @@ -1353,7 +1353,7 @@ static int tcg_cpu_exec(CPUArchState *env)
}
ret = cpu_exec(env);
#ifdef CONFIG_PROFILER
qemu_time += profile_getclock() - ti;
tcg_time += profile_getclock() - ti;
#endif
if (use_icount) {
/* Fold pending instructions back into the
Expand Down
5 changes: 2 additions & 3 deletions include/qemu/timer.h
Expand Up @@ -999,11 +999,10 @@ static inline int64_t cpu_get_real_ticks (void)
#ifdef CONFIG_PROFILER
static inline int64_t profile_getclock(void)
{
return cpu_get_real_ticks();
return get_clock();
}

extern int64_t qemu_time, qemu_time_start;
extern int64_t tlb_flush_time;
extern int64_t tcg_time;
extern int64_t dev_time;
#endif

Expand Down
6 changes: 3 additions & 3 deletions monitor.c
Expand Up @@ -1975,16 +1975,16 @@ static void hmp_info_numa(Monitor *mon, const QDict *qdict)

#ifdef CONFIG_PROFILER

int64_t qemu_time;
int64_t tcg_time;
int64_t dev_time;

static void hmp_info_profile(Monitor *mon, const QDict *qdict)
{
monitor_printf(mon, "async time %" PRId64 " (%0.3f)\n",
dev_time, dev_time / (double)get_ticks_per_sec());
monitor_printf(mon, "qemu time %" PRId64 " (%0.3f)\n",
qemu_time, qemu_time / (double)get_ticks_per_sec());
qemu_time = 0;
tcg_time, tcg_time / (double)get_ticks_per_sec());
tcg_time = 0;
dev_time = 0;
}
#else
Expand Down

0 comments on commit 89d5cbd

Please sign in to comment.