From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KCKjc-0002tX-NG for qemu-devel@nongnu.org; Fri, 27 Jun 2008 16:39:56 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KCKjb-0002sd-NZ for qemu-devel@nongnu.org; Fri, 27 Jun 2008 16:39:56 -0400 Received: from [199.232.76.173] (port=48162 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KCKjb-0002sP-IK for qemu-devel@nongnu.org; Fri, 27 Jun 2008 16:39:55 -0400 Received: from mx1.redhat.com ([66.187.233.31]:55941) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KCKjb-0007zP-OU for qemu-devel@nongnu.org; Fri, 27 Jun 2008 16:39:56 -0400 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id m5RKdsui014249 for ; Fri, 27 Jun 2008 16:39:54 -0400 Received: from pobox-2.corp.redhat.com (pobox-2.corp.redhat.com [10.11.255.15]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m5RKdsmE005635 for ; Fri, 27 Jun 2008 16:39:54 -0400 Received: from localhost.localdomain (vpn-4-80.str.redhat.com [10.32.4.80]) by pobox-2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m5RKdade004563 for ; Fri, 27 Jun 2008 16:39:52 -0400 From: Glauber Costa Date: Fri, 27 Jun 2008 17:38:09 -0300 Message-Id: <1214599103-13846-7-git-send-email-gcosta@redhat.com> In-Reply-To: <1214599103-13846-6-git-send-email-gcosta@redhat.com> References: <1214599103-13846-1-git-send-email-gcosta@redhat.com> <1214599103-13846-2-git-send-email-gcosta@redhat.com> <1214599103-13846-3-git-send-email-gcosta@redhat.com> <1214599103-13846-4-git-send-email-gcosta@redhat.com> <1214599103-13846-5-git-send-email-gcosta@redhat.com> <1214599103-13846-6-git-send-email-gcosta@redhat.com> Subject: [Qemu-devel] [PATCH 06/20] separate accelerator part of info profiler Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org --- accel.h | 8 ++++++++ kqemu.c | 35 +++++++++++++++++++++++++++++++++++ monitor.c | 27 ++++++--------------------- 3 files changed, 49 insertions(+), 21 deletions(-) diff --git a/accel.h b/accel.h index f6d53ea..f80b15f 100644 --- a/accel.h +++ b/accel.h @@ -4,6 +4,7 @@ typedef struct QEMUAccel { void (*flush_cache)(CPUState *env, int global); void (*flush_page)(CPUState *env, target_ulong addr); int (*info)(CPUState *env, char *buf); + int (*profile)(CPUState *env, char *buf); } QEMUAccel; extern QEMUAccel *current_accel; @@ -43,3 +44,10 @@ static inline int accel_info(CPUState *env, char *buf) return current_accel->info(env, buf); return 0; } + +static inline int accel_profile(CPUState *env, char *buf) +{ + if (current_accel && current_accel->profile) + return current_accel->profile(env, buf); + return 0; +} diff --git a/kqemu.c b/kqemu.c index ac12e17..bcbe3cc 100644 --- a/kqemu.c +++ b/kqemu.c @@ -52,6 +52,10 @@ #include "kqemu.h" #include "accel.h" +#ifdef CONFIG_PROFILER +#include "qemu-timer.h" /* for ticks_per_sec */ +#endif + #ifdef _WIN32 #define KQEMU_DEVICE "\\\\.\\kqemu" #else @@ -293,12 +297,43 @@ int kqemu_info(CPUState *env, char *buf) return len; } +int64_t kqemu_time; +int64_t kqemu_exec_count; +int64_t kqemu_ret_int_count; +int64_t kqemu_ret_excp_count; +int64_t kqemu_ret_intr_count; +extern int64_t qemu_time; + +int kqemu_profile(CPUState *env, char *buf) +{ + int len = 0; +#ifdef CONFIG_PROFILER + len = sprintf(buf, "kqemu time %" PRId64 " (%0.3f %0.1f%%) count=%" PRId64 + " int=%" PRId64 " excp=%" PRId64 " intr=%" PRId64 "\n", + kqemu_time, kqemu_time / (double)ticks_per_sec, + kqemu_time / qemu_time * 100.0, + kqemu_exec_count, + kqemu_ret_int_count, + kqemu_ret_excp_count, + kqemu_ret_intr_count); + + kqemu_time = 0; + kqemu_exec_count = 0; + kqemu_ret_int_count = 0; + kqemu_ret_excp_count = 0; + kqemu_ret_intr_count = 0; + kqemu_record_dump(); +#endif + return len; +} + QEMUAccel kqemu_accel = { .cpu_interrupt = kqemu_cpu_interrupt, .init_env = kqemu_init_env, .flush_cache = kqemu_flush, .flush_page = kqemu_flush_page, .info = kqemu_info, + .profile = kqemu_profile, }; diff --git a/monitor.c b/monitor.c index ef189cc..29a747d 100644 --- a/monitor.c +++ b/monitor.c @@ -1239,17 +1239,14 @@ static void do_info_accelerator(void) #ifdef CONFIG_PROFILER -int64_t kqemu_time; int64_t qemu_time; -int64_t kqemu_exec_count; int64_t dev_time; -int64_t kqemu_ret_int_count; -int64_t kqemu_ret_excp_count; -int64_t kqemu_ret_intr_count; - static void do_info_profile(void) { int64_t total; + char buf[MAX_BUF]; + CPUState *env = mon_get_cpu(); + total = qemu_time; if (total == 0) total = 1; @@ -1257,24 +1254,12 @@ static void do_info_profile(void) dev_time, dev_time / (double)ticks_per_sec); term_printf("qemu time %" PRId64 " (%0.3f)\n", qemu_time, qemu_time / (double)ticks_per_sec); - term_printf("kqemu time %" PRId64 " (%0.3f %0.1f%%) count=%" PRId64 " int=%" PRId64 " excp=%" PRId64 " intr=%" PRId64 "\n", - kqemu_time, kqemu_time / (double)ticks_per_sec, - kqemu_time / (double)total * 100.0, - kqemu_exec_count, - kqemu_ret_int_count, - kqemu_ret_excp_count, - kqemu_ret_intr_count); + if (accel_profile(env, buf)) + term_printf(buf); qemu_time = 0; - kqemu_time = 0; - kqemu_exec_count = 0; dev_time = 0; - kqemu_ret_int_count = 0; - kqemu_ret_excp_count = 0; - kqemu_ret_intr_count = 0; -#ifdef USE_KQEMU - kqemu_record_dump(); -#endif } + #else static void do_info_profile(void) { -- 1.5.5.1