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

From: Arianna Avanzini
Date: Thu Sep 11 2014 - 19:57:35 EST


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

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/