From: Kevin Wolf <kwolf@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: Alberto Garcia <berto@igalia.com>,
qemu-devel@nongnu.org, qemu-block@nongnu.org, mreitz@redhat.com
Subject: Re: [Qemu-devel] [RFC PATCH 6/8] quorum: Avoid bdrv_aio_writev() for rewrites
Date: Mon, 21 Nov 2016 12:56:36 +0100 [thread overview]
Message-ID: <20161121115636.GC5876@noname.redhat.com> (raw)
In-Reply-To: <bcbfd4c9-5735-aaac-1494-7949aa8eb611@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 2841 bytes --]
Am 18.11.2016 um 22:11 hat Eric Blake geschrieben:
> On 11/18/2016 06:21 AM, Kevin Wolf wrote:
>
> >>> + ret = bdrv_co_pwritev(s->children[co->i],
> >>> + acb->sector_num * BDRV_SECTOR_SIZE,
> >>> + acb->nb_sectors * BDRV_SECTOR_SIZE,
> >>> + acb->qiov, 0);
> >>> + (void) ret;
> >>
> >> Why do you need 'ret' at all? If it's a placeholder to remind us to do
> >> something with this value in the future, you can simply add a FIXME
> >> comment.
> >
> > I'm not sure whether we want to fix anything, it looks intentional to
> > me. I just wanted to be explicit about the ignored return value, both
> > for human readers and for tools like Coverity.
>
> In bdrv_co_flush(), we have:
>
> /* Return value is ignored - it's ok if wait queue is empty */
> qemu_co_queue_next(&bs->flush_queue);
>
> I don't know if Coverity would squawk, but the cast to void looks a bit
> stranger to me than a comment, where what we did in bdrv_co_flush()
> seems reasonable. There's also the patch proposal to introduce
> ignore_value() in place of a cast to void, which is a bit more
> self-documenting about places that intentionally ignore a return value
> while still shutting Coverity up:
>
> https://lists.gnu.org/archive/html/qemu-devel/2016-09/msg05165.html
If you don't like the void cast, I can remove it. After all, the
bdrv_aio_writev() call in the original code didn't have it either. I'm
just surprised that it feels strange to both of you, I thought it was a
well-known idiom for "this value is intentionally unused".
> >
> >>> + /* one less rewrite to do */
> >>> + acb->rewrite_count--;
> >>> + qemu_coroutine_enter_if_inactive(acb->co);
> >>
> >> I think you should only enter acb->co when acb->rewrite_count reaches
> >> zero.
> >>
> >> In all other cases the main coroutine simply iterates inside the while()
> >> loop, verifies that the number is still positive and yields again.
> >>
> >> The same applies to all other cases of qemu_coroutine_enter_if_inactive,
> >> by the way (I failed to notice it in patch #5).
> >
> > I think I like it better this way because it keeps the loop condition
> > local to the caller instead of spreading it across the caller and the
> > places that reenter. On the other hand, I can see that not doing the
> > extra context switch might be a little more efficient.
>
> Do we have a feel for how many context switches this would save? If
> it's in the noise, cleaner code is probably a win; but if it is a
> hotspot, then we should definitely try the optimization.
Should normally be (num_children - 1) per request. With inconsistent
results and enabled rewrites, add another one for each child that needs
to be corrected.
Kevin
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2016-11-21 11:56 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-10 17:19 [Qemu-devel] [RFC PATCH 0/8] quorum: Implement .bdrv_co_preadv/pwritev() Kevin Wolf
2016-11-10 17:19 ` [Qemu-devel] [RFC PATCH 1/8] coroutine: Introduce qemu_coroutine_enter_if_inactive() Kevin Wolf
2016-11-10 23:49 ` Eric Blake
2016-11-17 9:30 ` Alberto Garcia
2016-11-10 17:19 ` [Qemu-devel] [RFC PATCH 2/8] quorum: Remove s from quorum_aio_get() arguments Kevin Wolf
2016-11-10 23:52 ` Eric Blake
2016-11-11 9:58 ` Paolo Bonzini
2016-11-11 14:18 ` Alberto Garcia
2016-11-10 17:19 ` [Qemu-devel] [RFC PATCH 3/8] quorum: Implement .bdrv_co_readv/writev Kevin Wolf
2016-11-11 1:56 ` Eric Blake
2016-11-16 15:57 ` Alberto Garcia
2016-11-10 17:19 ` [Qemu-devel] [RFC PATCH 4/8] quorum: Do cleanup in caller coroutine Kevin Wolf
2016-11-11 2:18 ` Eric Blake
2016-11-17 10:04 ` Alberto Garcia
2016-11-10 17:19 ` [Qemu-devel] [RFC PATCH 5/8] quorum: Inline quorum_aio_cb() Kevin Wolf
2016-11-17 14:25 ` Alberto Garcia
2016-11-10 17:19 ` [Qemu-devel] [RFC PATCH 6/8] quorum: Avoid bdrv_aio_writev() for rewrites Kevin Wolf
2016-11-11 2:25 ` Eric Blake
2016-11-17 14:54 ` Alberto Garcia
2016-11-18 12:21 ` Kevin Wolf
2016-11-18 12:33 ` Alberto Garcia
2016-11-18 21:11 ` Eric Blake
2016-11-21 11:56 ` Kevin Wolf [this message]
2016-11-10 17:19 ` [Qemu-devel] [RFC PATCH 7/8] quorum: Implement .bdrv_co_preadv/pwritev() Kevin Wolf
2016-11-11 2:37 ` Eric Blake
2016-11-11 9:58 ` Kevin Wolf
2016-11-11 15:08 ` Eric Blake
2016-11-17 15:30 ` Alberto Garcia
2016-11-10 17:19 ` [Qemu-devel] [RFC PATCH 8/8] quorum: Inline quorum_fifo_aio_cb() Kevin Wolf
2016-11-18 9:47 ` Alberto Garcia
2016-11-11 9:56 ` [Qemu-devel] [RFC PATCH 0/8] quorum: Implement .bdrv_co_preadv/pwritev() Paolo Bonzini
2016-11-11 10:22 ` Kevin Wolf
2016-11-18 9:51 ` Alberto Garcia
2016-11-18 11:10 ` Paolo Bonzini
2016-11-13 3:18 ` no-reply
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=20161121115636.GC5876@noname.redhat.com \
--to=kwolf@redhat.com \
--cc=berto@igalia.com \
--cc=eblake@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.