|
|
357786 |
From 189e720e9fa5536fb22960f158b3b7f91dcccf2c Mon Sep 17 00:00:00 2001
|
|
|
357786 |
From: Fam Zheng <famz@redhat.com>
|
|
|
357786 |
Date: Tue, 18 Sep 2018 09:07:14 +0200
|
|
|
357786 |
Subject: [PATCH 3/3] aio-posix: do skip system call if ctx->notifier polling
|
|
|
357786 |
succeeds
|
|
|
357786 |
|
|
|
357786 |
RH-Author: Fam Zheng <famz@redhat.com>
|
|
|
357786 |
Message-id: <20180918090714.18069-4-famz@redhat.com>
|
|
|
357786 |
Patchwork-id: 82214
|
|
|
357786 |
O-Subject: [RHEL-7.6 qemu-kvm-rhev PATCH 3/3] aio-posix: do skip system call if ctx->notifier polling succeeds
|
|
|
357786 |
Bugzilla: 1628191
|
|
|
357786 |
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
357786 |
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
|
|
|
357786 |
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
357786 |
|
|
|
357786 |
From: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
357786 |
|
|
|
357786 |
Commit 70232b5253 ("aio-posix: Don't count ctx->notifier as progress when
|
|
|
357786 |
2018-08-15), by not reporting progress, causes aio_poll to execute the
|
|
|
357786 |
system call when polling succeeds because of ctx->notifier. This introduces
|
|
|
357786 |
latency before the call to aio_bh_poll() and negates the advantages of
|
|
|
357786 |
polling, unfortunately.
|
|
|
357786 |
|
|
|
357786 |
The fix builds on the previous patch, separating the effect of polling on
|
|
|
357786 |
the timeout from the progress reported to aio_poll(). ctx->notifier
|
|
|
357786 |
does zero the timeout, causing the caller to skip the system call,
|
|
|
357786 |
but it does not report progress, so that the bug fix of commit 70232b5253
|
|
|
357786 |
still stands.
|
|
|
357786 |
|
|
|
357786 |
Fixes: 70232b5253a3c4e03ed1ac47ef9246a8ac66c6fa
|
|
|
357786 |
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
357786 |
Message-Id: <20180912171040.1732-4-pbonzini@redhat.com>
|
|
|
357786 |
Reviewed-by: Fam Zheng <famz@redhat.com>
|
|
|
357786 |
Signed-off-by: Fam Zheng <famz@redhat.com>
|
|
|
357786 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
357786 |
---
|
|
|
357786 |
util/aio-posix.c | 7 ++++---
|
|
|
357786 |
1 file changed, 4 insertions(+), 3 deletions(-)
|
|
|
357786 |
|
|
|
357786 |
diff --git a/util/aio-posix.c b/util/aio-posix.c
|
|
|
357786 |
index 1b17597..357de8a 100644
|
|
|
357786 |
--- a/util/aio-posix.c
|
|
|
357786 |
+++ b/util/aio-posix.c
|
|
|
357786 |
@@ -498,10 +498,11 @@ static bool run_poll_handlers_once(AioContext *ctx, int64_t *timeout)
|
|
|
357786 |
QLIST_FOREACH_RCU(node, &ctx->aio_handlers, node) {
|
|
|
357786 |
if (!node->deleted && node->io_poll &&
|
|
|
357786 |
aio_node_check(ctx, node->is_external) &&
|
|
|
357786 |
- node->io_poll(node->opaque) &&
|
|
|
357786 |
- node->opaque != &ctx->notifier) {
|
|
|
357786 |
+ node->io_poll(node->opaque)) {
|
|
|
357786 |
*timeout = 0;
|
|
|
357786 |
- progress = true;
|
|
|
357786 |
+ if (node->opaque != &ctx->notifier) {
|
|
|
357786 |
+ progress = true;
|
|
|
357786 |
+ }
|
|
|
357786 |
}
|
|
|
357786 |
|
|
|
357786 |
/* Caller handles freeing deleted nodes. Don't do it here. */
|
|
|
357786 |
--
|
|
|
357786 |
1.8.3.1
|
|
|
357786 |
|