Skip to content

Commit

Permalink
xen-blkback: add a parameter for disabling of persistent grants
Browse files Browse the repository at this point in the history
Persistent grants feature provides high scalability.  On some small
systems, however, it could incur data copy overheads[1] and thus it is
required to be disabled.  But, there is no option to disable it.  For
the reason, this commit adds a module parameter for disabling of the
feature.

[1] https://wiki.xen.org/wiki/Xen_4.3_Block_Protocol_Scalability

Signed-off-by: Anthony Liguori <aliguori@amazon.com>
Signed-off-by: SeongJae Park <sjpark@amazon.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
Link: https://lore.kernel.org/r/20200923061841.20531-2-sjpark@amazon.com
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
  • Loading branch information
sj-aws authored and Boris Ostrovsky committed Oct 21, 2020
1 parent 5f7f774 commit aac8a70
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 6 deletions.
9 changes: 9 additions & 0 deletions Documentation/ABI/testing/sysfs-driver-xen-blkback
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,12 @@ Description:
controls the duration in milliseconds that blkback will not
cache any page not backed by a grant mapping.
The default is 10ms.

What: /sys/module/xen_blkback/parameters/feature_persistent
Date: September 2020
KernelVersion: 5.10
Contact: SeongJae Park <sjpark@amazon.de>
Description:
Whether to enable the persistent grants feature or not. Note
that this option only takes effect on newly created backends.
The default is Y (enable).
22 changes: 16 additions & 6 deletions drivers/block/xen-blkback/xenbus.c
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,12 @@ static void xen_vbd_free(struct xen_vbd *vbd)
vbd->bdev = NULL;
}

/* Enable the persistent grants feature. */
static bool feature_persistent = true;
module_param(feature_persistent, bool, 0644);
MODULE_PARM_DESC(feature_persistent,
"Enables the persistent grants feature");

static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle,
unsigned major, unsigned minor, int readonly,
int cdrom)
Expand Down Expand Up @@ -518,6 +524,8 @@ static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle,
if (q && blk_queue_secure_erase(q))
vbd->discard_secure = true;

vbd->feature_gnt_persistent = feature_persistent;

pr_debug("Successful creation of handle=%04x (dom=%u)\n",
handle, blkif->domid);
return 0;
Expand Down Expand Up @@ -905,7 +913,8 @@ static void connect(struct backend_info *be)

xen_blkbk_barrier(xbt, be, be->blkif->vbd.flush_support);

err = xenbus_printf(xbt, dev->nodename, "feature-persistent", "%u", 1);
err = xenbus_printf(xbt, dev->nodename, "feature-persistent", "%u",
be->blkif->vbd.feature_gnt_persistent);
if (err) {
xenbus_dev_fatal(dev, err, "writing %s/feature-persistent",
dev->nodename);
Expand Down Expand Up @@ -1066,7 +1075,6 @@ static int connect_ring(struct backend_info *be)
{
struct xenbus_device *dev = be->dev;
struct xen_blkif *blkif = be->blkif;
unsigned int pers_grants;
char protocol[64] = "";
int err, i;
char *xspath;
Expand All @@ -1092,9 +1100,11 @@ static int connect_ring(struct backend_info *be)
xenbus_dev_fatal(dev, err, "unknown fe protocol %s", protocol);
return -ENOSYS;
}
pers_grants = xenbus_read_unsigned(dev->otherend, "feature-persistent",
0);
blkif->vbd.feature_gnt_persistent = pers_grants;
if (blkif->vbd.feature_gnt_persistent)
blkif->vbd.feature_gnt_persistent =
xenbus_read_unsigned(dev->otherend,
"feature-persistent", 0);

blkif->vbd.overflow_max_grants = 0;

/*
Expand All @@ -1117,7 +1127,7 @@ static int connect_ring(struct backend_info *be)

pr_info("%s: using %d queues, protocol %d (%s) %s\n", dev->nodename,
blkif->nr_rings, blkif->blk_protocol, protocol,
pers_grants ? "persistent grants" : "");
blkif->vbd.feature_gnt_persistent ? "persistent grants" : "");

ring_page_order = xenbus_read_unsigned(dev->otherend,
"ring-page-order", 0);
Expand Down

0 comments on commit aac8a70

Please sign in to comment.