From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49954) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X7OAZ-0002PM-CC for qemu-devel@nongnu.org; Wed, 16 Jul 2014 08:18:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X7OAT-0003ft-52 for qemu-devel@nongnu.org; Wed, 16 Jul 2014 08:18:47 -0400 Received: from zimbra3.corp.accelance.fr ([2001:4080:204::2:8]:47391) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X7OAS-0003fk-Px for qemu-devel@nongnu.org; Wed, 16 Jul 2014 08:18:41 -0400 From: Sebastian Tanase Date: Wed, 16 Jul 2014 14:18:06 +0200 Message-Id: <1405513086-31246-7-git-send-email-sebastian.tanase@openwide.fr> In-Reply-To: <1405513086-31246-1-git-send-email-sebastian.tanase@openwide.fr> References: <1405513086-31246-1-git-send-email-sebastian.tanase@openwide.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [RFC PATCH V4 6/6] monitor: Add drift info to 'info jit' List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, peter.maydell@linaro.org, alex@alex.org.uk, wenchaoqemu@gmail.com, quintela@redhat.com, mst@redhat.com, stefanha@redhat.com, armbru@redhat.com, lcapitulino@redhat.com, michael@walle.cc, camille.begue@openwide.fr, aliguori@amazon.com, crobinso@redhat.com, pbonzini@redhat.com, Sebastian Tanase , afaerber@suse.de, rth@twiddle.net Show in 'info jit' the current delay between the host clock and the guest clock. In addition, print the maximum advance and delay of the guest compared to the host. Signed-off-by: Sebastian Tanase Tested-by: Camille B=C3=A9gu=C3=A9 --- cpu-exec.c | 19 ++++++++++++++----- cpus.c | 17 +++++++++++++++++ include/qemu-common.h | 5 +++++ monitor.c | 1 + 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/cpu-exec.c b/cpu-exec.c index b62df15..055e0e3 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -109,19 +109,28 @@ static void print_delay(const SyncClocks *sc) static void init_delay_params(SyncClocks *sc, const CPUState *cpu) { - static int64_t clocks_offset; - if (!icount_align_option) { - return; + static int64_t realtime_clock_value; + if (icount_align_option || !realtime_clock_value) { + realtime_clock_value =3D qemu_clock_get_ns(QEMU_CLOCK_REALTIME); } - sc->realtime_clock =3D qemu_clock_get_ns(QEMU_CLOCK_REALTIME); /* Compute offset between the 2 clocks. */ if (!clocks_offset) { - clocks_offset =3D sc->realtime_clock - + clocks_offset =3D realtime_clock_value - qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); } + if (!icount_align_option) { + return; + } + sc->realtime_clock =3D realtime_clock_value; sc->diff_clk =3D qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) - sc->realtime_clock + clocks_offset; sc->original_instr_counter =3D cpu->icount_extra + cpu->icount_decr.= u16.low; + if (sc->diff_clk < max_delay) { + max_delay =3D sc->diff_clk; + } + if (sc->diff_clk > max_advance) { + max_advance =3D sc->diff_clk; + } /* Print every 2s max if the guest is late. We limit the number of printed messages to NB_PRINT_MAX(currently 100) */ print_delay(sc); diff --git a/cpus.c b/cpus.c index de0a8b2..3c3fb64 100644 --- a/cpus.c +++ b/cpus.c @@ -64,6 +64,9 @@ #endif /* CONFIG_LINUX */ =20 static CPUState *next_cpu; +int64_t clocks_offset; +int64_t max_delay; +int64_t max_advance; =20 bool cpu_is_stopped(CPUState *cpu) { @@ -1504,3 +1507,17 @@ void qmp_inject_nmi(Error **errp) error_set(errp, QERR_UNSUPPORTED); #endif } + +void dump_drift_info(FILE *f, fprintf_function cpu_fprintf) +{ + cpu_fprintf(f, "Host - Guest clock %ld(ms)\n", + (qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - clocks_offset = - + qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL))/SCALE_MS); + if (icount_align_option) { + cpu_fprintf(f, "Max guest delay %ld(ms)\n", -max_delay/SCALE= _MS); + cpu_fprintf(f, "Max guest advance %ld(ms)\n", max_advance/SCAL= E_MS); + } else { + cpu_fprintf(f, "Max guest delay NA\n"); + cpu_fprintf(f, "Max guest advance NA\n"); + } +} diff --git a/include/qemu-common.h b/include/qemu-common.h index d47aa02..fbc1bca 100644 --- a/include/qemu-common.h +++ b/include/qemu-common.h @@ -110,6 +110,11 @@ void configure_icount(QemuOpts *opts, Error **errp); extern int use_icount; extern int icount_align_option; extern int icount_time_shift; +extern int64_t clocks_offset; +/* drift information for info jit command */ +extern int64_t max_delay; +extern int64_t max_advance; +void dump_drift_info(FILE *f, fprintf_function cpu_fprintf); =20 #include "qemu/osdep.h" #include "qemu/bswap.h" diff --git a/monitor.c b/monitor.c index 5bc70a6..cdbaa60 100644 --- a/monitor.c +++ b/monitor.c @@ -1047,6 +1047,7 @@ static void do_info_registers(Monitor *mon, const Q= Dict *qdict) static void do_info_jit(Monitor *mon, const QDict *qdict) { dump_exec_info((FILE *)mon, monitor_fprintf); + dump_drift_info((FILE *)mon, monitor_fprintf); } =20 static void do_info_history(Monitor *mon, const QDict *qdict) --=20 2.0.0.rc2