All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Ming Lei <ming.lei@canonical.com>, Stefan Hajnoczi <stefanha@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
	Peter Maydell <peter.maydell@linaro.org>,
	Fam Zheng <famz@redhat.com>, qemu-devel <qemu-devel@nongnu.org>,
	"Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 01/15] qemu coroutine: support bypass mode
Date: Fri, 01 Aug 2014 16:17:29 +0200	[thread overview]
Message-ID: <53DBA179.8090305@redhat.com> (raw)
In-Reply-To: <CACVXFVNSZFYdvBWtFq3q3dwcWyUntKEnDQH2fgchqKA1ymjn=A@mail.gmail.com>

Il 01/08/2014 15:48, Ming Lei ha scritto:
> On Fri, Aug 1, 2014 at 9:13 PM, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>> On Fri, Aug 01, 2014 at 10:54:02AM +0800, Ming Lei wrote:
>>> On Fri, Aug 1, 2014 at 12:30 AM, Paolo Bonzini <pbonzini@redhat.com> wrote:
>>>> Il 31/07/2014 18:13, Ming Lei ha scritto:
>>>>> Follows 'perf report' result on cycles event for with/without bypass
>>>>> coroutine:
>>>>>
>>>>>     http://pastebin.com/ae0vnQ6V
>>>>>
>>>>> From the profiling result, looks bdrv_co_do_preadv() is a bit slow
>>>>> without bypass coroutine.
>>>>
>>>> Yeah, I can count at least 3.3% time spent here:
>>>>
>>>> 0.87%          bdrv_co_do_preadv
>>>> 0.79%          bdrv_aligned_preadv
>>>> 0.71%          qemu_coroutine_switch
>>>> 0.52%          tracked_request_begin
>>>> 0.45%          coroutine_swap
>>>>
>>>> Another ~3% wasted in malloc, etc.
>>>
>>> That should be related with coroutine and the BH in bdrv_co_do_rw().
>>> In this post I didn't apply Stephan's coroutine resize patch which might
>>> decrease usage of malloc() for coroutine.
>>
>> Please rerun with "[PATCH v3 0/2] coroutine: dynamically scale pool
>> size".
> 
> No problem, will do that. Actually in my last post with rfc, this patchset
> was against your coroutine resize patches.
> 
> I will provide the profile data tomorrow.
> 
>>
>>> At least, coroutine isn't cheap from the profile result.
>>
>> Instead of bypassing coroutines we should first understand the overhead
>> that they impose.  Is it due to the coroutine implementation (switching
>> stacks) or due to the bdrv_co_*() code that happens to use coroutines
>> but slow for other reasons.
> 
> From the 3th patch(block: support to bypass qemu coroutinue)
> and the 5th patch(dataplane: enable selective bypassing coroutine),
> the change is to bypass coroutine and BH, and the other bdrv code
> path is same, so it is due to the coroutine implementation, IMO.

But your code breaks all sort of invariants.  For example, the aiocb
must be valid when bdrv_aio_readv/writev return.  virtio-blk does not
use it, but virtio-scsi does.  If we apply your patches now, we will
have to redo it soon.

Basically we should be rewriting parts of block.c so that
bdrv_co_readv/writev calls bdrv_aio_readv/writev instead of vice versa.
 Coroutine creation should be pushed down to the
bdrv_aligned_preadv/bdrv_aligned_pwritev and, in the fast path, you can
simply call the driver's bdrv_aio_readv/writev.

Paolo

  reply	other threads:[~2014-08-01 14:17 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-30 11:39 [Qemu-devel] [PATCH 00/14] dataplane: optimization and multi virtqueue support Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 01/15] qemu coroutine: support bypass mode Ming Lei
2014-07-30 13:45   ` Paolo Bonzini
2014-07-30 17:15     ` Ming Lei
2014-07-30 23:37       ` Paolo Bonzini
2014-07-31  3:55         ` Ming Lei
2014-07-31  7:37           ` Benoît Canet
2014-07-31  9:47             ` Ming Lei
2014-07-31 10:45               ` Paolo Bonzini
2014-08-01 13:38                 ` Ming Lei
2014-07-31  8:59         ` Ming Lei
2014-07-31  9:15           ` Paolo Bonzini
2014-07-31 10:06             ` Ming Lei
2014-07-31 16:13             ` Ming Lei
2014-07-31 16:30               ` Paolo Bonzini
2014-08-01  2:54                 ` Ming Lei
2014-08-01 13:13                   ` Stefan Hajnoczi
2014-08-01 13:48                     ` Ming Lei
2014-08-01 14:17                       ` Paolo Bonzini [this message]
2014-08-01 15:21                         ` Ming Lei
2014-08-01 14:52                       ` Ming Lei
2014-08-01 16:03                         ` Stefan Hajnoczi
2014-08-02  2:42                           ` Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 02/15] qemu aio: prepare for supporting selective bypass coroutine Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 03/15] block: support to bypass qemu coroutinue Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 04/15] Revert "raw-posix: drop raw_get_aio_fd() since it is no longer used" Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 05/15] dataplane: enable selective bypassing coroutine Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 06/15] qemu/obj_pool.h: introduce object allocation pool Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 07/15] dataplane: use object pool to speed up allocation for virtio blk request Ming Lei
2014-07-30 14:14   ` Paolo Bonzini
2014-07-30 15:09     ` Michael S. Tsirkin
2014-07-31  3:22     ` Ming Lei
2014-07-31  9:18       ` Paolo Bonzini
2014-08-01  7:42         ` Ming Lei
2014-08-04 10:21           ` Stefan Hajnoczi
2014-08-04 11:42             ` Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 08/15] virtio: decrease size of VirtQueueElement Ming Lei
2014-07-30 13:51   ` Paolo Bonzini
2014-07-30 14:40     ` Michael S. Tsirkin
2014-07-30 14:50       ` Paolo Bonzini
2014-07-31  2:11       ` Ming Lei
2014-07-31  2:07     ` Ming Lei
2014-07-31  9:38       ` Paolo Bonzini
2014-08-01  3:34         ` Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 09/15] linux-aio: fix submit aio as a batch Ming Lei
2014-07-30 13:59   ` Paolo Bonzini
2014-07-30 17:32     ` Ming Lei
2014-07-30 23:41       ` Paolo Bonzini
2014-07-30 11:39 ` [Qemu-devel] [PATCH 10/15] linux-aio: increase max event to 256 Ming Lei
2014-07-30 12:15   ` Eric Blake
2014-07-30 14:00   ` Paolo Bonzini
2014-07-30 17:20     ` Ming Lei
2014-08-04 10:26       ` Stefan Hajnoczi
2014-07-30 11:39 ` [Qemu-devel] [PATCH 11/15] linux-aio: remove 'node' from 'struct qemu_laiocb' Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 12/15] hw/virtio-pci: introduce num_queues property Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 13/15] hw/virtio/virtio-blk.h: introduce VIRTIO_BLK_F_MQ Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 14/15] hw/block/virtio-blk: create num_queues vqs if dataplane is enabled Ming Lei
2014-07-30 14:01   ` Paolo Bonzini
2014-07-30 15:12     ` Michael S. Tsirkin
2014-07-30 15:25       ` Paolo Bonzini
2014-07-31  3:47         ` Ming Lei
2014-07-31  8:52           ` Paolo Bonzini
2014-08-01  3:09             ` Ming Lei
2014-08-01  3:24               ` Ming Lei
2014-08-01  6:10               ` Paolo Bonzini
2014-08-01  7:35                 ` Ming Lei
2014-08-01  7:46                   ` Paolo Bonzini
2014-07-30 11:39 ` [Qemu-devel] [PATCH 15/15] dataplane: virtio-blk: support mutlti virtqueue Ming Lei
2014-07-30 12:42 ` [Qemu-devel] [PATCH 00/14] dataplane: optimization and multi virtqueue support Christian Borntraeger
2014-08-04 10:16 ` Stefan Hajnoczi
2014-08-04 10:45   ` Ming Lei

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=53DBA179.8090305@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=famz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=ming.lei@canonical.com \
    --cc=mst@redhat.com \
    --cc=peter.maydell@linaro.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 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.