From: Jeff Cody <jcody@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: qemu-devel@nongnu.org, "Kevin Wolf" <kwolf@redhat.com>,
qemu-block@nongnu.org, "Max Reitz" <mreitz@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>
Subject: Re: [Qemu-devel] [PATCH] main-loop: drop spin_counter
Date: Wed, 30 May 2018 16:23:32 -0400 [thread overview]
Message-ID: <20180530202332.GA12428@localhost.localdomain> (raw)
In-Reply-To: <20180530194238.22774-1-stefanha@redhat.com>
On Wed, May 30, 2018 at 08:42:38PM +0100, Stefan Hajnoczi wrote:
> Commit d759c951f3287fad04210a52f2dc93f94cf58c7f ("replay: push
> replay_mutex_lock up the call tree") removed the !timeout lock
> optimization in the main loop.
>
> The idea of the optimization was to avoid ping-pongs between threads by
> keeping the Big QEMU Lock held across non-blocking (!timeout) main loop
> iterations.
>
> A warning is printed when the main loop spins without releasing BQL for
> long periods of time. These warnings were supposed to aid debugging but
> in practice they just alarm users. They are considered noise because
> the cause of spinning is not shown and is hard to find.
>
> Now that the lock optimization has been removed, there is no danger of
> hogging the BQL. Drop the spin counter and the infamous warning.
>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
> util/main-loop.c | 25 -------------------------
> tests/qemu-iotests/common.filter | 1 -
> 2 files changed, 26 deletions(-)
>
> diff --git a/util/main-loop.c b/util/main-loop.c
> index 992f9b0f34..affe0403c5 100644
> --- a/util/main-loop.c
> +++ b/util/main-loop.c
> @@ -222,36 +222,11 @@ static int os_host_main_loop_wait(int64_t timeout)
> {
> GMainContext *context = g_main_context_default();
> int ret;
> - static int spin_counter;
>
> g_main_context_acquire(context);
>
> glib_pollfds_fill(&timeout);
>
> - /* If the I/O thread is very busy or we are incorrectly busy waiting in
> - * the I/O thread, this can lead to starvation of the BQL such that the
> - * VCPU threads never run. To make sure we can detect the later case,
> - * print a message to the screen. If we run into this condition, create
> - * a fake timeout in order to give the VCPU threads a chance to run.
> - */
> - if (!timeout && (spin_counter > MAX_MAIN_LOOP_SPIN)) {
> - static bool notified;
> -
> - if (!notified && !qtest_enabled() && !qtest_driver()) {
> - warn_report("I/O thread spun for %d iterations",
> - MAX_MAIN_LOOP_SPIN);
> - notified = true;
> - }
> -
> - timeout = SCALE_MS;
> - }
> -
> -
> - if (timeout) {
> - spin_counter = 0;
> - } else {
> - spin_counter++;
> - }
> qemu_mutex_unlock_iothread();
> replay_mutex_unlock();
>
> diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter
> index f08ee55046..2031e353a5 100644
> --- a/tests/qemu-iotests/common.filter
> +++ b/tests/qemu-iotests/common.filter
> @@ -77,7 +77,6 @@ _filter_qemu()
> {
> sed -e "s#\\(^\\|(qemu) \\)$(basename $QEMU_PROG):#\1QEMU_PROG:#" \
> -e 's#^QEMU [0-9]\+\.[0-9]\+\.[0-9]\+ monitor#QEMU X.Y.Z monitor#' \
> - -e '/main-loop: WARNING: I\/O thread spun for [0-9]\+ iterations/d' \
> -e $'s#\r##' # QEMU monitor uses \r\n line endings
> }
>
> --
> 2.17.0
>
>
Happy to see this go!
Reviewed-by: Jeff Cody <jcody@redhat.com>
next prev parent reply other threads:[~2018-05-30 20:23 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-30 19:42 [Qemu-devel] [PATCH] main-loop: drop spin_counter Stefan Hajnoczi
2018-05-30 20:23 ` Jeff Cody [this message]
2018-05-31 11:38 ` Paolo Bonzini
2018-05-31 13:34 ` Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180530202332.GA12428@localhost.localdomain \
--to=jcody@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).