qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@gmail.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v2 0/7] threadpool: support multiple ThreadPools
Date: Wed, 13 Mar 2013 14:37:05 +0100	[thread overview]
Message-ID: <20130313133705.GA22608@stefanha-thinkpad.muc.redhat.com> (raw)
In-Reply-To: <1362660110-26970-1-git-send-email-stefanha@redhat.com>

On Thu, Mar 07, 2013 at 01:41:43PM +0100, Stefan Hajnoczi wrote:
> This patch series changes the global thread pool to a one ThreadPool per
> AioContext model.  We still only use the main loop AioContext so in practice
> there is just one ThreadPool.  But this opens the door to refactoring the block
> layer (which depends on ThreadPool) so block devices can be accessed outside
> the global mutex in the future.
> 
> ThreadPool is tightly bound to an AioContext because it uses an EventNotifier
> to signal work completion.  Completed work items are reaped and their callback
> functions are invoked from the EventNotifier read handler (executing under
> AioContext).
> 
> It might be possible to record the AioContext for the completion callback on a
> per-request basis and continuing to use a global pool of worker threads.  After
> discussing thread pool models with Paolo I have been convinced that it is
> simpler and more scalable to have one ThreadPool per AioContext instead.
> Therefore this series implements the 1:1 approach.  For details on previous
> thread pool model discussion, see:
> http://lists.gnu.org/archive/html/qemu-devel/2013-02/msg03987.html
> 
> The final patch was previously separate but I have included it because it
> depends on qemu_get_aio_context().  It is unrelated to ThreadPool but the patch
> reviewers are the same in both instances, so I combined the series.
> 
> At the end of this series block/raw-posix.c and block/raw-win32.c are aware of
> the ThreadPool they submit work to.  The next step after this series is to
> associate BlockDriverState with an AioContext so that the block layer can run
> outside the global main loop.
> 
> v2:
>  * Always find AioContext, don't split if (ctx) cases [Paolo]
>  * Introduce bdrv_get_aio_context() [Paolo]
>  * Add CoQueue AioContext patch since it depends on qemu_get_aio_context()
> 
> Stefan Hajnoczi (7):
>   main-loop: add qemu_get_aio_context()
>   threadpool: move globals into struct ThreadPool
>   threadpool: add thread_pool_new() and thread_pool_free()
>   aio: add a ThreadPool instance to AioContext
>   block: add bdrv_get_aio_context()
>   threadpool: drop global thread pool
>   coroutine: use AioContext for CoQueue BH
> 
>  async.c                     |  11 ++
>  block.c                     |   6 ++
>  block/raw-posix.c           |   8 +-
>  block/raw-win32.c           |   4 +-
>  include/block/aio.h         |   6 ++
>  include/block/block_int.h   |   7 ++
>  include/block/coroutine.h   |   1 +
>  include/block/thread-pool.h |  15 ++-
>  include/qemu/main-loop.h    |   5 +
>  main-loop.c                 |   5 +
>  qemu-coroutine-lock.c       |  55 ++++++----
>  tests/test-thread-pool.c    |  44 ++++----
>  thread-pool.c               | 243 ++++++++++++++++++++++++++++----------------
>  trace-events                |   4 +-
>  14 files changed, 276 insertions(+), 138 deletions(-)
> 
> -- 
> 1.8.1.4
> 
> 

Applied to my block tree:
https://github.com/stefanha/qemu/commits/block

Stefan

      parent reply	other threads:[~2013-03-13 13:37 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-07 12:41 [Qemu-devel] [PATCH v2 0/7] threadpool: support multiple ThreadPools Stefan Hajnoczi
2013-03-07 12:41 ` [Qemu-devel] [PATCH v2 1/7] main-loop: add qemu_get_aio_context() Stefan Hajnoczi
2013-03-07 12:41 ` [Qemu-devel] [PATCH v2 2/7] threadpool: move globals into struct ThreadPool Stefan Hajnoczi
2013-03-07 12:41 ` [Qemu-devel] [PATCH v2 3/7] threadpool: add thread_pool_new() and thread_pool_free() Stefan Hajnoczi
2013-03-07 12:41 ` [Qemu-devel] [PATCH v2 4/7] aio: add a ThreadPool instance to AioContext Stefan Hajnoczi
2013-03-07 12:41 ` [Qemu-devel] [PATCH v2 5/7] block: add bdrv_get_aio_context() Stefan Hajnoczi
2013-03-07 12:41 ` [Qemu-devel] [PATCH v2 6/7] threadpool: drop global thread pool Stefan Hajnoczi
2013-03-07 12:41 ` [Qemu-devel] [PATCH v2 7/7] coroutine: use AioContext for CoQueue BH Stefan Hajnoczi
2013-03-07 17:16 ` [Qemu-devel] [PATCH v2 0/7] threadpool: support multiple ThreadPools Paolo Bonzini
2013-03-13 13:37 ` Stefan Hajnoczi [this message]

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=20130313133705.GA22608@stefanha-thinkpad.muc.redhat.com \
    --to=stefanha@gmail.com \
    --cc=kwolf@redhat.com \
    --cc=pbonzini@redhat.com \
    --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).