QEMU running with options "-icount,sleep=off -rtc clock=vm" doesn't execute emulation at maximum possible speed. Target virtual clock may run faster or slower than realtime clock by N times, where N value depends on various unrelated conditions (i.e. random from the user point of view), or possibly the target hangs completely. Bisection shows commit 281b2201e4 ("icount: remove obsolete warp call", 2016-03-15) to be the culprit, revert it.
Suggested-by: Artem Pisarenko <artem.k.pisare...@gmail.com> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> --- cpus.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cpus.c b/cpus.c index 361678e459..2872e7e37c 100644 --- a/cpus.c +++ b/cpus.c @@ -1224,6 +1224,10 @@ static void qemu_tcg_rr_wait_io_event(CPUState *cpu) { while (all_cpu_threads_idle()) { stop_tcg_kick_timer(); + + /* Start accounting real time to the virtual clock if the CPUs + are idle. */ + qemu_clock_warp(QEMU_CLOCK_VIRTUAL); qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex); } -- 2.17.1