qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] commit b1bbfe72 causes huge slowdown with no kvm


From: Luigi Rizzo
Subject: [Qemu-devel] commit b1bbfe72 causes huge slowdown with no kvm
Date: Wed, 20 Nov 2013 00:00:17 +0100

I recently found out that without kvm enabled, and especially
with -smp 2 or greater, qemu becomes incredibly slow
(to the point that you can see kernel messages in the
quest print one character at a time).

This happens with a Linux host (even with -smp 1)
and with FreeBSD host (in this case -smp 2 or greater;
-smp 1 seems to work fine there).

Bisecting points to this commit as the culprit:


commit b1bbfe72ec1ebf302d97f886cc646466c0abd679
Author: Alex Bligh <address@hidden>
Date:   Wed Aug 21 16:02:55 2013 +0100

    aio / timers: On timer modification, qemu_notify or aio_notify

    On qemu_mod_timer_ns, ensure qemu_notify or aio_notify is called to
    end the appropriate poll(), irrespective of use_icount value.

    On qemu_clock_enable, ensure qemu_notify or aio_notify is called for
    all QEMUTimerLists attached to the QEMUClock.

    Signed-off-by: Alex Bligh <address@hidden>
    Signed-off-by: Stefan Hajnoczi <address@hidden>

I could not revert this individual commit into master because
of other changes, but i notice that 
one key
changes of the commit
was
to
 ma
k
e a
call to timerlist_notify() unconditional, whereas
before
it was controlled by the
"
use_icount
"
variable.

So I tried the small patch below and it seems to restore the original
performance, but I have no idea what use_icount does and
whether the change makes sense.

If not, there is an open problem.

Any ideas ?

cheers
luigi

d
iff --git a/qemu-timer.c b/qemu-timer.c
index e15ce47..4180a86 100644
--- a/qemu-timer.c
+++ b/qemu-timer.c
@@ -380,6 +380,7 @@ static void timerlist_rearm(QEMUTimerList *timer_list)
 {
     /* Interrupt execution to force deadline recalculation.  */
     qemu_clock_warp(timer_list->clock->type);
+if (use_icount) // XXX
     timerlist_notify(timer_list);
 }


reply via email to

[Prev in Thread] Current Thread [Next in Thread]