[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH RFC v2 0/5] Multi-queue support for xen-blkfront and xen-blkback



Hello,

this patchset adds to the Xen PV block driver support to exploit the multi-
queue block layer API by sharing and using multiple I/O rings in the frontend
and backend. It is the result of my internship for GNOME's Outreach Program
for Women ([1]), in which I was mentored by Konrad Rzeszutek Wilk.

The patchset implements in the backend driver the retrieval of information
about the currently-in-use block layer API for a certain device and about
the number of available submission queues, if the API turns out to be the
multi-queue one. The information is then advertised to the frontend driver
via XenStore.
The frontend device can exploit such an information to allocate and grant
multiple I/O rings and advertise the final number to the backend so that
it will be able to map them.
The patchset has been tested with fio's IOmeter emulation on a four-cores
machine with a null_blk device (some results are available here: [2]).

With respect to the first version of this RFC patchset ([3]), the patchset has
undergone the following changes (as the structure of the patchset itself
has changed, I'm summarizing them here).

. Now the use of the multi-queue API replaces that of the request queue API,
  as indicated by Christoph Hellwig.
. Patch 0003 from the previous patchset has been split into two patches, the
  first introducing in the frontend actual support for multiple block rings,
  the second adding support to negotiate the number of I/O rings with the
  backend, as suggested by David Vrabel.
. Patch 0004 from the previous patchset has been split into two patches, the
  first introducing in the backend support for multiple block rings, the second
  adding support to negotiate the number of I/O rings, as suggested by David
  Vrabel.
. Added the BLK_MQ_F_SG_MERGE and BLK_MQ_F_SHOULD_SORT flags to the frontend
  driver's initialization as suggested by Christoph Hellwig.
. Removed empty/useless definition of the init_hctx and complete hooks, as
  pointed out by Christoph Hellwig.
. Removed useless debug printk()s from code added in xen-blkfront, as indicated
  by David Vrabel.
. Added return of an actual error code in the blk_mq_init_queue() failure path
  in xlvbd_init_blk_queue(), as suggested by Christoph Hellwig.
. Fixed coding style issue in blkfront_queue_rq() as suggested by Christoph
  Hellwig.

. Added support for the migration of a multi-queue-capable domU to a host with
  non-multi-queue-capable devices.
. Fixed locking issues in the interrupt path, avoiding to grab the io_lock
  twice when calling blk_mq_start_stopped_hw_queues().
. Fixed wrong use of the return value of blk_mq_init_queue().
. Dropped the use of ternary operator in the macros that compute the number
  of per-ring requests and grants: now they use the max() macro.

Any comments or suggestions are more than welcome.
Thank you,
Arianna

[1] http://goo.gl/bcvHMh
[2] http://goo.gl/O8RlLL
[3] http://lkml.org/lkml/2014/8/22/158

Arianna Avanzini (5):
  xen, blkfront: port to the the multi-queue block layer API
  xen, blkfront: introduce support for multiple block rings
  xen, blkfront: negotiate the number of block rings with the backend
  xen, blkback: introduce support for multiple block rings
  xen, blkback: negotiate of the number of block rings with the frontend

 drivers/block/xen-blkback/blkback.c | 377 ++++++++-------
 drivers/block/xen-blkback/common.h  | 110 +++--
 drivers/block/xen-blkback/xenbus.c  | 472 +++++++++++++------
 drivers/block/xen-blkfront.c        | 894 +++++++++++++++++++++---------------
 4 files changed, 1122 insertions(+), 731 deletions(-)

-- 
2.1.0


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.