[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 3/3] aio-posix: do skip system call if ctx->noti
From: |
Fam Zheng |
Subject: |
Re: [Qemu-devel] [PATCH 3/3] aio-posix: do skip system call if ctx->notifier polling succeeds |
Date: |
Thu, 13 Sep 2018 15:19:17 +0800 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
On Wed, 09/12 19:10, Paolo Bonzini wrote:
> Commit 70232b5253 ("aio-posix: Don't count ctx->notifier as progress when
> 2018-08-15), by not reporting progress, causes aio_poll to execute the
> system call when polling succeeds because of ctx->notifier. This introduces
> latency before the call to aio_bh_poll() and negates the advantages of
> polling, unfortunately.
>
> The fix builds on the previous patch, separating the effect of polling on
> the timeout from the progress reported to aio_poll(). ctx->notifier
> does zero the timeout, causing the caller to skip the system call,
> but it does not report progress, so that the bug fix of commit 70232b5253
> still stands.
>
> Fixes: 70232b5253a3c4e03ed1ac47ef9246a8ac66c6fa
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
> util/aio-posix.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/util/aio-posix.c b/util/aio-posix.c
> index 21d8987179..efa79b9e62 100644
> --- a/util/aio-posix.c
> +++ b/util/aio-posix.c
> @@ -498,10 +498,11 @@ static bool run_poll_handlers_once(AioContext *ctx,
> int64_t *timeout)
> QLIST_FOREACH_RCU(node, &ctx->aio_handlers, node) {
> if (!node->deleted && node->io_poll &&
> aio_node_check(ctx, node->is_external) &&
> - node->io_poll(node->opaque) &&
> - node->opaque != &ctx->notifier) {
> + node->io_poll(node->opaque)) {
> *timeout = 0;
> - progress = true;
> + if (node->opaque != &ctx->notifier) {
> + progress = true;
> + }
> }
>
> /* Caller handles freeing deleted nodes. Don't do it here. */
> --
> 2.17.1
>
Reviewed-by: Fam Zheng <address@hidden>