Linux-Block Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH 0/2] block, bfq: make bfq disable iocost and present a double interface
@ 2019-10-01 19:33 Paolo Valente
  2019-10-01 19:33 ` [PATCH 1/2] blkcg: Make bfq disable iocost when enabled Paolo Valente
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Paolo Valente @ 2019-10-01 19:33 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, linux-kernel, ulf.hansson, linus.walleij,
	bfq-iosched, oleksandr, Tejun Heo, cgroups, Paolo Valente

Hi Jens,

the first patch in this series is Tejun's patch for making BFQ disable
io.cost. The second patch makes BFQ present both the bfq-prefixes
parameters and non-prefixed parameters, as suggested by Tejun [1].

In the first patch I've tried to use macros not to repeat code
twice. checkpatch complains that these macros should be enclosed in
parentheses. I don't see how to do it. I'm willing to switch to any
better solution.

Thanks,
Paolo

[1] https://lkml.org/lkml/2019/9/18/736

Paolo Valente (1):
  block, bfq: present a double cgroups interface

Tejun Heo (1):
  blkcg: Make bfq disable iocost when enabled

 Documentation/admin-guide/cgroup-v2.rst |   8 +-
 Documentation/block/bfq-iosched.rst     |  40 ++--
 block/bfq-cgroup.c                      | 260 ++++++++++++------------
 block/bfq-iosched.c                     |  32 +++
 block/blk-iocost.c                      |   5 +-
 include/linux/blk-cgroup.h              |   5 +
 kernel/cgroup/cgroup.c                  |   2 +
 7 files changed, 201 insertions(+), 151 deletions(-)

--
2.20.1

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/2] blkcg: Make bfq disable iocost when enabled
  2019-10-01 19:33 [PATCH 0/2] block, bfq: make bfq disable iocost and present a double interface Paolo Valente
@ 2019-10-01 19:33 ` Paolo Valente
  2019-10-01 19:33 ` [PATCH 2/2] block, bfq: present a double cgroups interface Paolo Valente
  2019-10-09 14:25 ` [PATCH 0/2] block, bfq: make bfq disable iocost and present a double interface Paolo Valente
  2 siblings, 0 replies; 7+ messages in thread
From: Paolo Valente @ 2019-10-01 19:33 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, linux-kernel, ulf.hansson, linus.walleij,
	bfq-iosched, oleksandr, Tejun Heo, cgroups, Paolo Valente

From: Tejun Heo <tj@kernel.org>

Both iocost and bfq implement weight based IO control.  Currently, bfq
is using io.bfq prefix but wants to drop the bfq part.  To avoid
interface conflict, make bfq disable iocost when it's selected as the
IO scheduler for any block device on the system.  iocost is only
re-enabled when bfq is built as a module and unloaded.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Paolo Valente <paolo.valente@linaro.org>
---
 Documentation/admin-guide/cgroup-v2.rst |  8 ++++---
 block/bfq-cgroup.c                      |  2 ++
 block/bfq-iosched.c                     | 32 +++++++++++++++++++++++++
 block/blk-iocost.c                      |  5 ++--
 include/linux/blk-cgroup.h              |  5 ++++
 kernel/cgroup/cgroup.c                  |  2 ++
 6 files changed, 48 insertions(+), 6 deletions(-)

diff --git a/Documentation/admin-guide/cgroup-v2.rst b/Documentation/admin-guide/cgroup-v2.rst
index 0fa8c0e615c2..8374957213f1 100644
--- a/Documentation/admin-guide/cgroup-v2.rst
+++ b/Documentation/admin-guide/cgroup-v2.rst
@@ -1440,9 +1440,11 @@ IO
 
 The "io" controller regulates the distribution of IO resources.  This
 controller implements both weight based and absolute bandwidth or IOPS
-limit distribution; however, weight based distribution is available
-only if cfq-iosched is in use and neither scheme is available for
-blk-mq devices.
+limit distribution.  Weight based distribution is implemented by
+either iocost controller or bfq IO scheduler.  When bfq is selected as
+the IO scheduler for any block device, iocost is disabled and bfq's
+implementation overrides for all devices.  If bfq is built as a kernel
+module, unloading it re-enables iocost.
 
 
 IO Interface Files
diff --git a/block/bfq-cgroup.c b/block/bfq-cgroup.c
index 86a607cf19a1..decda96770f4 100644
--- a/block/bfq-cgroup.c
+++ b/block/bfq-cgroup.c
@@ -1194,7 +1194,9 @@ struct bfq_group *bfq_create_group_hierarchy(struct bfq_data *bfqd, int node)
 }
 
 struct blkcg_policy blkcg_policy_bfq = {
+#ifndef CONFIG_BLK_CGROUP_IOCOST
 	.dfl_cftypes		= bfq_blkg_files,
+#endif
 	.legacy_cftypes		= bfq_blkcg_legacy_files,
 
 	.cpd_alloc_fn		= bfq_cpd_alloc,
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
index 0319d6339822..21d1b08610b1 100644
--- a/block/bfq-iosched.c
+++ b/block/bfq-iosched.c
@@ -6382,6 +6382,36 @@ static void bfq_init_root_group(struct bfq_group *root_group,
 	root_group->sched_data.bfq_class_idle_last_service = jiffies;
 }
 
+#if defined(CONFIG_BFQ_GROUP_IOSCHED) && defined(CONFIG_BLK_CGROUP_IOCOST)
+static bool bfq_enabled = false;
+
+static void bfq_enable(void)
+{
+	static DEFINE_MUTEX(bfq_enable_mutex);
+
+	mutex_lock(&bfq_enable_mutex);
+	if (!bfq_enabled) {
+		pr_info("bfq-iosched: Overriding iocost\n");
+		blkcg_policy_unregister(&blkcg_policy_iocost);
+		cgroup_add_dfl_cftypes(&io_cgrp_subsys, bfq_blkg_files);
+		bfq_enabled = true;
+	}
+	mutex_unlock(&bfq_enable_mutex);
+}
+
+static void __exit bfq_disable(void)
+{
+	if (bfq_enabled) {
+		pr_info("bfq-iosched: Restoring iocost\n");
+		cgroup_rm_cftypes(bfq_blkg_files);
+		blkcg_policy_register(&blkcg_policy_iocost);
+	}
+}
+#else
+static void bfq_enable(void) {}
+static void __exit bfq_disable(void) {}
+#endif
+
 static int bfq_init_queue(struct request_queue *q, struct elevator_type *e)
 {
 	struct bfq_data *bfqd;
@@ -6506,6 +6536,7 @@ static int bfq_init_queue(struct request_queue *q, struct elevator_type *e)
 	bfq_init_entity(&bfqd->oom_bfqq.entity, bfqd->root_group);
 
 	wbt_disable_default(q);
+	bfq_enable();
 	return 0;
 
 out_free:
@@ -6823,6 +6854,7 @@ static void __exit bfq_exit(void)
 	blkcg_policy_unregister(&blkcg_policy_bfq);
 #endif
 	bfq_slab_kill();
+	bfq_disable();
 }
 
 module_init(bfq_init);
diff --git a/block/blk-iocost.c b/block/blk-iocost.c
index 2a3db80c1dce..511bf80b6db3 100644
--- a/block/blk-iocost.c
+++ b/block/blk-iocost.c
@@ -605,8 +605,6 @@ static u32 vrate_adj_pct[] =
 	  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 	  4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 16 };
 
-static struct blkcg_policy blkcg_policy_iocost;
-
 /* accessors and helpers */
 static struct ioc *rqos_to_ioc(struct rq_qos *rqos)
 {
@@ -2442,7 +2440,7 @@ static struct cftype ioc_files[] = {
 	{}
 };
 
-static struct blkcg_policy blkcg_policy_iocost = {
+struct blkcg_policy blkcg_policy_iocost = {
 	.dfl_cftypes	= ioc_files,
 	.cpd_alloc_fn	= ioc_cpd_alloc,
 	.cpd_free_fn	= ioc_cpd_free,
@@ -2450,6 +2448,7 @@ static struct blkcg_policy blkcg_policy_iocost = {
 	.pd_init_fn	= ioc_pd_init,
 	.pd_free_fn	= ioc_pd_free,
 };
+EXPORT_SYMBOL_GPL(blkcg_policy_iocost);
 
 static int __init ioc_init(void)
 {
diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h
index bed9e43f9426..5669e3cfa1bc 100644
--- a/include/linux/blk-cgroup.h
+++ b/include/linux/blk-cgroup.h
@@ -815,6 +815,11 @@ static inline void blkcg_clear_delay(struct blkcg_gq *blkg)
 void blkcg_add_delay(struct blkcg_gq *blkg, u64 now, u64 delta);
 void blkcg_schedule_throttle(struct request_queue *q, bool use_memdelay);
 void blkcg_maybe_throttle_current(void);
+
+#ifdef CONFIG_BLK_CGROUP_IOCOST
+extern struct blkcg_policy blkcg_policy_iocost;
+#endif
+
 #else	/* CONFIG_BLK_CGROUP */
 
 struct blkcg {
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index 080561bb8a4b..9c9a674c12bd 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -4059,6 +4059,7 @@ int cgroup_rm_cftypes(struct cftype *cfts)
 	mutex_unlock(&cgroup_mutex);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(cgroup_rm_cftypes);
 
 /**
  * cgroup_add_cftypes - add an array of cftypes to a subsystem
@@ -4115,6 +4116,7 @@ int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
 		cft->flags |= __CFTYPE_ONLY_ON_DFL;
 	return cgroup_add_cftypes(ss, cfts);
 }
+EXPORT_SYMBOL_GPL(cgroup_add_dfl_cftypes);
 
 /**
  * cgroup_add_legacy_cftypes - add an array of cftypes for legacy hierarchies
-- 
2.20.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 2/2] block, bfq: present a double cgroups interface
  2019-10-01 19:33 [PATCH 0/2] block, bfq: make bfq disable iocost and present a double interface Paolo Valente
  2019-10-01 19:33 ` [PATCH 1/2] blkcg: Make bfq disable iocost when enabled Paolo Valente
@ 2019-10-01 19:33 ` Paolo Valente
  2019-10-09 14:25 ` [PATCH 0/2] block, bfq: make bfq disable iocost and present a double interface Paolo Valente
  2 siblings, 0 replies; 7+ messages in thread
From: Paolo Valente @ 2019-10-01 19:33 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, linux-kernel, ulf.hansson, linus.walleij,
	bfq-iosched, oleksandr, Tejun Heo, cgroups, Paolo Valente

When bfq was merged into mainline, there were two I/O schedulers that
implemented the proportional-share policy: bfq for blk-mq and cfq for
legacy blk. bfq's interface files in the blkio/io controller have the
same names as cfq. But the cgroups interface doesn't allow two
entities to use the same name for their files, so for bfq we had to
prepend the "bfq" prefix to each of its files. However no legacy code
uses these modified file names. This naming also causes confusion, as,
e.g., in [1].

Now cfq has gone with legacy blk, so there is no need any longer for
these prefixes in (the never used) bfq names. Yet some people may have
started to use the current bfq interface. So, as suggested by Tejun
Heo [2], make bfq present a double interface, one with the file names
prepended with the "bfq" prefix, and the other one with no prefix.

[1] https://github.com/systemd/systemd/issues/7057
[2] https://lkml.org/lkml/2019/9/18/736

Suggested-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
---
 Documentation/block/bfq-iosched.rst |  40 +++--
 block/bfq-cgroup.c                  | 258 ++++++++++++++--------------
 2 files changed, 153 insertions(+), 145 deletions(-)

diff --git a/Documentation/block/bfq-iosched.rst b/Documentation/block/bfq-iosched.rst
index 0d237d402860..8ecd37903391 100644
--- a/Documentation/block/bfq-iosched.rst
+++ b/Documentation/block/bfq-iosched.rst
@@ -536,12 +536,14 @@ process.
 To get proportional sharing of bandwidth with BFQ for a given device,
 BFQ must of course be the active scheduler for that device.
 
-Within each group directory, the names of the files associated with
-BFQ-specific cgroup parameters and stats begin with the "bfq."
-prefix. So, with cgroups-v1 or cgroups-v2, the full prefix for
-BFQ-specific files is "blkio.bfq." or "io.bfq." For example, the group
-parameter to set the weight of a group with BFQ is blkio.bfq.weight
-or io.bfq.weight.
+The interface of the proportional-share policy implemented by BFQ
+consists of a series of cgroup parameters. For legacy issues, each
+parameter can be read or written, equivalently, through one of two
+files: the first file has the same name as the parameter to
+read/write, while the second file has that same name prepended by the
+prefix "bfq.". For example, the two files by which to set/show the
+weight of a group are blkio.weight and blkio.bfq.weight with
+cgroups-v1, or io.weight and io.bfq.weight with cgroups-v2.
 
 As for cgroups-v1 (blkio controller), the exact set of stat files
 created, and kept up-to-date by bfq, depends on whether
@@ -550,14 +552,15 @@ the stat files documented in
 Documentation/admin-guide/cgroup-v1/blkio-controller.rst. If, instead,
 CONFIG_BFQ_CGROUP_DEBUG is not set, then bfq creates only the files::
 
-  blkio.bfq.io_service_bytes
-  blkio.bfq.io_service_bytes_recursive
-  blkio.bfq.io_serviced
-  blkio.bfq.io_serviced_recursive
+  blkio.io_service_bytes
+  blkio.io_service_bytes_recursive
+  blkio.io_serviced
+  blkio.io_serviced_recursive
 
-The value of CONFIG_BFQ_CGROUP_DEBUG greatly influences the maximum
-throughput sustainable with bfq, because updating the blkio.bfq.*
-stats is rather costly, especially for some of the stats enabled by
+(plus their counterparts with also the bfq prefix). The value of
+CONFIG_BFQ_CGROUP_DEBUG greatly influences the maximum throughput
+sustainable with BFQ, because updating the blkio.* stats is rather
+costly, especially for some of the stats enabled by
 CONFIG_BFQ_CGROUP_DEBUG.
 
 Parameters to set
@@ -565,11 +568,12 @@ Parameters to set
 
 For each group, there is only the following parameter to set.
 
-weight (namely blkio.bfq.weight or io.bfq-weight): the weight of the
-group inside its parent. Available values: 1..10000 (default 100). The
-linear mapping between ioprio and weights, described at the beginning
-of the tunable section, is still valid, but all weights higher than
-IOPRIO_BE_NR*10 are mapped to ioprio 0.
+weight (namely blkio.weight/blkio.bfq.weight or
+io.weight/io.bfq.weight): the weight of the group inside its
+parent. Available values: 1..10000 (default 100). The linear mapping
+between ioprio and weights, described at the beginning of the tunable
+section, is still valid, but all weights higher than IOPRIO_BE_NR*10
+are mapped to ioprio 0.
 
 Recall that, if low-latency is set, then BFQ automatically raises the
 weight of the queues associated with interactive and soft real-time
diff --git a/block/bfq-cgroup.c b/block/bfq-cgroup.c
index decda96770f4..d3b59b731992 100644
--- a/block/bfq-cgroup.c
+++ b/block/bfq-cgroup.c
@@ -1211,139 +1211,143 @@ struct blkcg_policy blkcg_policy_bfq = {
 	.pd_reset_stats_fn	= bfq_pd_reset_stats,
 };
 
-struct cftype bfq_blkcg_legacy_files[] = {
-	{
-		.name = "bfq.weight",
-		.flags = CFTYPE_NOT_ON_ROOT,
-		.seq_show = bfq_io_show_weight_legacy,
-		.write_u64 = bfq_io_set_weight_legacy,
-	},
-	{
-		.name = "bfq.weight_device",
-		.flags = CFTYPE_NOT_ON_ROOT,
-		.seq_show = bfq_io_show_weight,
-		.write = bfq_io_set_weight,
-	},
-
-	/* statistics, covers only the tasks in the bfqg */
-	{
-		.name = "bfq.io_service_bytes",
-		.private = (unsigned long)&blkcg_policy_bfq,
-		.seq_show = blkg_print_stat_bytes,
-	},
-	{
-		.name = "bfq.io_serviced",
-		.private = (unsigned long)&blkcg_policy_bfq,
-		.seq_show = blkg_print_stat_ios,
-	},
-#ifdef CONFIG_BFQ_CGROUP_DEBUG
-	{
-		.name = "bfq.time",
-		.private = offsetof(struct bfq_group, stats.time),
-		.seq_show = bfqg_print_stat,
-	},
-	{
-		.name = "bfq.sectors",
-		.seq_show = bfqg_print_stat_sectors,
-	},
-	{
-		.name = "bfq.io_service_time",
-		.private = offsetof(struct bfq_group, stats.service_time),
-		.seq_show = bfqg_print_rwstat,
-	},
-	{
-		.name = "bfq.io_wait_time",
-		.private = offsetof(struct bfq_group, stats.wait_time),
-		.seq_show = bfqg_print_rwstat,
-	},
-	{
-		.name = "bfq.io_merged",
-		.private = offsetof(struct bfq_group, stats.merged),
-		.seq_show = bfqg_print_rwstat,
-	},
-	{
-		.name = "bfq.io_queued",
-		.private = offsetof(struct bfq_group, stats.queued),
-		.seq_show = bfqg_print_rwstat,
-	},
-#endif /* CONFIG_BFQ_CGROUP_DEBUG */
+#define bfq_make_blkcg_legacy_files(prefix)			\
+	{							\
+		.name = #prefix "weight",			\
+		.flags = CFTYPE_NOT_ON_ROOT,			\
+		.seq_show = bfq_io_show_weight,			\
+		.write_u64 = bfq_io_set_weight_legacy,		\
+	},							\
+								\
+	/* statistics, covers only the tasks in the bfqg */	\
+	{							\
+		.name = #prefix "io_service_bytes",		\
+		.private = (unsigned long)&blkcg_policy_bfq,	\
+		.seq_show = blkg_print_stat_bytes,		\
+	},							\
+	{							\
+		.name = #prefix "io_serviced",		\
+		.private = (unsigned long)&blkcg_policy_bfq,	\
+		.seq_show = blkg_print_stat_ios,		\
+	},							\
+								\
+	/* the same statistics which cover the bfqg and its descendants */ \
+	{							\
+		.name = #prefix "io_service_bytes_recursive",	\
+		.private = (unsigned long)&blkcg_policy_bfq,	\
+		.seq_show = blkg_print_stat_bytes_recursive,	\
+	},							\
+	{							\
+		.name = #prefix "io_serviced_recursive",	\
+		.private = (unsigned long)&blkcg_policy_bfq,	\
+		.seq_show = blkg_print_stat_ios_recursive,	\
+	}
+
+#define bfq_make_blkcg_legacy_debug_files(prefix)			\
+	{								\
+		.name = #prefix "time",				\
+		.private = offsetof(struct bfq_group, stats.time),	\
+		.seq_show = bfqg_print_stat,				\
+	},								\
+	{								\
+		.name = #prefix "sectors",				\
+		.seq_show = bfqg_print_stat_sectors,			\
+	},								\
+	{								\
+		.name = #prefix "io_service_time",			\
+		.private = offsetof(struct bfq_group, stats.service_time), \
+		.seq_show = bfqg_print_rwstat,				\
+	},								\
+	{								\
+		.name = #prefix "io_wait_time",			\
+		.private = offsetof(struct bfq_group, stats.wait_time),	\
+		.seq_show = bfqg_print_rwstat,				\
+	},								\
+	{								\
+		.name = #prefix "io_merged",				\
+		.private = offsetof(struct bfq_group, stats.merged),	\
+		.seq_show = bfqg_print_rwstat,				\
+	},								\
+	{								\
+		.name = #prefix "io_queued",				\
+		.private = offsetof(struct bfq_group, stats.queued),	\
+		.seq_show = bfqg_print_rwstat,				\
+	},								\
+	{								\
+		.name = #prefix "time_recursive",			\
+		.private = offsetof(struct bfq_group, stats.time),	\
+		.seq_show = bfqg_print_stat_recursive,			\
+	},								\
+	{								\
+		.name = #prefix "sectors_recursive",			\
+		.seq_show = bfqg_print_stat_sectors_recursive,		\
+	},								\
+	{								\
+		.name = #prefix "io_service_time_recursive",		\
+		.private = offsetof(struct bfq_group, stats.service_time), \
+		.seq_show = bfqg_print_rwstat_recursive,		\
+	},								\
+	{								\
+		.name = #prefix "io_wait_time_recursive",		\
+		.private = offsetof(struct bfq_group, stats.wait_time),	\
+		.seq_show = bfqg_print_rwstat_recursive,		\
+	},								\
+	{								\
+		.name = #prefix "io_merged_recursive",		\
+		.private = offsetof(struct bfq_group, stats.merged),	\
+		.seq_show = bfqg_print_rwstat_recursive,		\
+	},								\
+	{								\
+		.name = #prefix "io_queued_recursive",		\
+		.private = offsetof(struct bfq_group, stats.queued),	\
+		.seq_show = bfqg_print_rwstat_recursive,		\
+	},								\
+	{								\
+		.name = #prefix "avg_queue_size",			\
+		.seq_show = bfqg_print_avg_queue_size,			\
+	},								\
+	{								\
+		.name = #prefix "group_wait_time",			\
+		.private = offsetof(struct bfq_group, stats.group_wait_time), \
+		.seq_show = bfqg_print_stat,				\
+	},								\
+	{								\
+		.name = #prefix "idle_time",				\
+		.private = offsetof(struct bfq_group, stats.idle_time),	\
+		.seq_show = bfqg_print_stat,				\
+	},								\
+	{								\
+		.name = #prefix "empty_time",				\
+		.private = offsetof(struct bfq_group, stats.empty_time), \
+		.seq_show = bfqg_print_stat,				\
+	},								\
+	{								\
+		.name = #prefix "dequeue",				\
+		.private = offsetof(struct bfq_group, stats.dequeue),	\
+		.seq_show = bfqg_print_stat,				\
+	}
 
-	/* the same statistics which cover the bfqg and its descendants */
-	{
-		.name = "bfq.io_service_bytes_recursive",
-		.private = (unsigned long)&blkcg_policy_bfq,
-		.seq_show = blkg_print_stat_bytes_recursive,
-	},
-	{
-		.name = "bfq.io_serviced_recursive",
-		.private = (unsigned long)&blkcg_policy_bfq,
-		.seq_show = blkg_print_stat_ios_recursive,
-	},
+struct cftype bfq_blkcg_legacy_files[] = {
+	bfq_make_blkcg_legacy_files(bfq.),
+	bfq_make_blkcg_legacy_files(),
 #ifdef CONFIG_BFQ_CGROUP_DEBUG
-	{
-		.name = "bfq.time_recursive",
-		.private = offsetof(struct bfq_group, stats.time),
-		.seq_show = bfqg_print_stat_recursive,
-	},
-	{
-		.name = "bfq.sectors_recursive",
-		.seq_show = bfqg_print_stat_sectors_recursive,
-	},
-	{
-		.name = "bfq.io_service_time_recursive",
-		.private = offsetof(struct bfq_group, stats.service_time),
-		.seq_show = bfqg_print_rwstat_recursive,
-	},
-	{
-		.name = "bfq.io_wait_time_recursive",
-		.private = offsetof(struct bfq_group, stats.wait_time),
-		.seq_show = bfqg_print_rwstat_recursive,
-	},
-	{
-		.name = "bfq.io_merged_recursive",
-		.private = offsetof(struct bfq_group, stats.merged),
-		.seq_show = bfqg_print_rwstat_recursive,
-	},
-	{
-		.name = "bfq.io_queued_recursive",
-		.private = offsetof(struct bfq_group, stats.queued),
-		.seq_show = bfqg_print_rwstat_recursive,
-	},
-	{
-		.name = "bfq.avg_queue_size",
-		.seq_show = bfqg_print_avg_queue_size,
-	},
-	{
-		.name = "bfq.group_wait_time",
-		.private = offsetof(struct bfq_group, stats.group_wait_time),
-		.seq_show = bfqg_print_stat,
-	},
-	{
-		.name = "bfq.idle_time",
-		.private = offsetof(struct bfq_group, stats.idle_time),
-		.seq_show = bfqg_print_stat,
-	},
-	{
-		.name = "bfq.empty_time",
-		.private = offsetof(struct bfq_group, stats.empty_time),
-		.seq_show = bfqg_print_stat,
-	},
-	{
-		.name = "bfq.dequeue",
-		.private = offsetof(struct bfq_group, stats.dequeue),
-		.seq_show = bfqg_print_stat,
-	},
-#endif	/* CONFIG_BFQ_CGROUP_DEBUG */
+	bfq_make_blkcg_legacy_debug_files(bfq.),
+	bfq_make_blkcg_legacy_debug_files(),
+#endif
 	{ }	/* terminate */
 };
 
+#define bfq_make_blkg_files(prefix)		\
+	{					\
+		.name = #prefix "weight",	\
+		.flags = CFTYPE_NOT_ON_ROOT,	\
+		.seq_show = bfq_io_show_weight,	\
+		.write = bfq_io_set_weight,	\
+	}
+
 struct cftype bfq_blkg_files[] = {
-	{
-		.name = "bfq.weight",
-		.flags = CFTYPE_NOT_ON_ROOT,
-		.seq_show = bfq_io_show_weight,
-		.write = bfq_io_set_weight,
-	},
+	bfq_make_blkg_files(bfq.),
+	bfq_make_blkg_files(),
 	{} /* terminate */
 };
 
-- 
2.20.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] block, bfq: make bfq disable iocost and present a double interface
  2019-10-01 19:33 [PATCH 0/2] block, bfq: make bfq disable iocost and present a double interface Paolo Valente
  2019-10-01 19:33 ` [PATCH 1/2] blkcg: Make bfq disable iocost when enabled Paolo Valente
  2019-10-01 19:33 ` [PATCH 2/2] block, bfq: present a double cgroups interface Paolo Valente
@ 2019-10-09 14:25 ` Paolo Valente
  2019-10-23  5:44   ` Paolo Valente
  2 siblings, 1 reply; 7+ messages in thread
From: Paolo Valente @ 2019-10-09 14:25 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, linux-kernel, Ulf Hansson, Linus Walleij,
	noreply-spamdigest via bfq-iosched, oleksandr, Tejun Heo,
	cgroups

Jens, Tejun,
can we proceed with this double-interface solution?

Thanks,
Paolo

> Il giorno 1 ott 2019, alle ore 21:33, Paolo Valente <paolo.valente@linaro.org> ha scritto:
> 
> Hi Jens,
> 
> the first patch in this series is Tejun's patch for making BFQ disable
> io.cost. The second patch makes BFQ present both the bfq-prefixes
> parameters and non-prefixed parameters, as suggested by Tejun [1].
> 
> In the first patch I've tried to use macros not to repeat code
> twice. checkpatch complains that these macros should be enclosed in
> parentheses. I don't see how to do it. I'm willing to switch to any
> better solution.
> 
> Thanks,
> Paolo
> 
> [1] https://lkml.org/lkml/2019/9/18/736
> 
> Paolo Valente (1):
>  block, bfq: present a double cgroups interface
> 
> Tejun Heo (1):
>  blkcg: Make bfq disable iocost when enabled
> 
> Documentation/admin-guide/cgroup-v2.rst |   8 +-
> Documentation/block/bfq-iosched.rst     |  40 ++--
> block/bfq-cgroup.c                      | 260 ++++++++++++------------
> block/bfq-iosched.c                     |  32 +++
> block/blk-iocost.c                      |   5 +-
> include/linux/blk-cgroup.h              |   5 +
> kernel/cgroup/cgroup.c                  |   2 +
> 7 files changed, 201 insertions(+), 151 deletions(-)
> 
> --
> 2.20.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] block, bfq: make bfq disable iocost and present a double interface
  2019-10-09 14:25 ` [PATCH 0/2] block, bfq: make bfq disable iocost and present a double interface Paolo Valente
@ 2019-10-23  5:44   ` Paolo Valente
  2019-11-04  6:55     ` Paolo Valente
  0 siblings, 1 reply; 7+ messages in thread
From: Paolo Valente @ 2019-10-23  5:44 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, linux-kernel, Ulf Hansson, Linus Walleij,
	noreply-spamdigest via bfq-iosched, oleksandr, Tejun Heo,
	cgroups

ping

> Il giorno 9 ott 2019, alle ore 16:25, Paolo Valente <paolo.valente@linaro.org> ha scritto:
> 
> Jens, Tejun,
> can we proceed with this double-interface solution?
> 
> Thanks,
> Paolo
> 
>> Il giorno 1 ott 2019, alle ore 21:33, Paolo Valente <paolo.valente@linaro.org> ha scritto:
>> 
>> Hi Jens,
>> 
>> the first patch in this series is Tejun's patch for making BFQ disable
>> io.cost. The second patch makes BFQ present both the bfq-prefixes
>> parameters and non-prefixed parameters, as suggested by Tejun [1].
>> 
>> In the first patch I've tried to use macros not to repeat code
>> twice. checkpatch complains that these macros should be enclosed in
>> parentheses. I don't see how to do it. I'm willing to switch to any
>> better solution.
>> 
>> Thanks,
>> Paolo
>> 
>> [1] https://lkml.org/lkml/2019/9/18/736
>> 
>> Paolo Valente (1):
>> block, bfq: present a double cgroups interface
>> 
>> Tejun Heo (1):
>> blkcg: Make bfq disable iocost when enabled
>> 
>> Documentation/admin-guide/cgroup-v2.rst |   8 +-
>> Documentation/block/bfq-iosched.rst     |  40 ++--
>> block/bfq-cgroup.c                      | 260 ++++++++++++------------
>> block/bfq-iosched.c                     |  32 +++
>> block/blk-iocost.c                      |   5 +-
>> include/linux/blk-cgroup.h              |   5 +
>> kernel/cgroup/cgroup.c                  |   2 +
>> 7 files changed, 201 insertions(+), 151 deletions(-)
>> 
>> --
>> 2.20.1
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] block, bfq: make bfq disable iocost and present a double interface
  2019-10-23  5:44   ` Paolo Valente
@ 2019-11-04  6:55     ` Paolo Valente
  2019-11-22 15:42       ` Paolo Valente
  0 siblings, 1 reply; 7+ messages in thread
From: Paolo Valente @ 2019-11-04  6:55 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, linux-kernel, Ulf Hansson, Linus Walleij,
	noreply-spamdigest via bfq-iosched, Oleksandr Natalenko,
	Tejun Heo, cgroups

Hi Jens,
no issue has been raised in more than a month, and this version was
requested by Tejun and is backed by you. So can it be queued for 5.5?

Thanks,
Paolo

> Il giorno 23 ott 2019, alle ore 07:44, Paolo Valente <paolo.valente@linaro.org> ha scritto:
> 
> ping
> 
>> Il giorno 9 ott 2019, alle ore 16:25, Paolo Valente <paolo.valente@linaro.org> ha scritto:
>> 
>> Jens, Tejun,
>> can we proceed with this double-interface solution?
>> 
>> Thanks,
>> Paolo
>> 
>>> Il giorno 1 ott 2019, alle ore 21:33, Paolo Valente <paolo.valente@linaro.org> ha scritto:
>>> 
>>> Hi Jens,
>>> 
>>> the first patch in this series is Tejun's patch for making BFQ disable
>>> io.cost. The second patch makes BFQ present both the bfq-prefixes
>>> parameters and non-prefixed parameters, as suggested by Tejun [1].
>>> 
>>> In the first patch I've tried to use macros not to repeat code
>>> twice. checkpatch complains that these macros should be enclosed in
>>> parentheses. I don't see how to do it. I'm willing to switch to any
>>> better solution.
>>> 
>>> Thanks,
>>> Paolo
>>> 
>>> [1] https://lkml.org/lkml/2019/9/18/736
>>> 
>>> Paolo Valente (1):
>>> block, bfq: present a double cgroups interface
>>> 
>>> Tejun Heo (1):
>>> blkcg: Make bfq disable iocost when enabled
>>> 
>>> Documentation/admin-guide/cgroup-v2.rst |   8 +-
>>> Documentation/block/bfq-iosched.rst     |  40 ++--
>>> block/bfq-cgroup.c                      | 260 ++++++++++++------------
>>> block/bfq-iosched.c                     |  32 +++
>>> block/blk-iocost.c                      |   5 +-
>>> include/linux/blk-cgroup.h              |   5 +
>>> kernel/cgroup/cgroup.c                  |   2 +
>>> 7 files changed, 201 insertions(+), 151 deletions(-)
>>> 
>>> --
>>> 2.20.1
>> 
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] block, bfq: make bfq disable iocost and present a double interface
  2019-11-04  6:55     ` Paolo Valente
@ 2019-11-22 15:42       ` Paolo Valente
  0 siblings, 0 replies; 7+ messages in thread
From: Paolo Valente @ 2019-11-22 15:42 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, linux-kernel, Ulf Hansson, Linus Walleij,
	noreply-spamdigest via bfq-iosched, Oleksandr Natalenko,
	Tejun Heo, cgroups

Jens,
5.5 has arrived too, and this version should do what you asked.  Can
you please consider this series?

Thanks,
Paolo

> Il giorno 4 nov 2019, alle ore 07:55, Paolo Valente <paolo.valente@linaro.org> ha scritto:
> 
> Hi Jens,
> no issue has been raised in more than a month, and this version was
> requested by Tejun and is backed by you. So can it be queued for 5.5?
> 
> Thanks,
> Paolo
> 
>> Il giorno 23 ott 2019, alle ore 07:44, Paolo Valente <paolo.valente@linaro.org> ha scritto:
>> 
>> ping
>> 
>>> Il giorno 9 ott 2019, alle ore 16:25, Paolo Valente <paolo.valente@linaro.org> ha scritto:
>>> 
>>> Jens, Tejun,
>>> can we proceed with this double-interface solution?
>>> 
>>> Thanks,
>>> Paolo
>>> 
>>>> Il giorno 1 ott 2019, alle ore 21:33, Paolo Valente <paolo.valente@linaro.org> ha scritto:
>>>> 
>>>> Hi Jens,
>>>> 
>>>> the first patch in this series is Tejun's patch for making BFQ disable
>>>> io.cost. The second patch makes BFQ present both the bfq-prefixes
>>>> parameters and non-prefixed parameters, as suggested by Tejun [1].
>>>> 
>>>> In the first patch I've tried to use macros not to repeat code
>>>> twice. checkpatch complains that these macros should be enclosed in
>>>> parentheses. I don't see how to do it. I'm willing to switch to any
>>>> better solution.
>>>> 
>>>> Thanks,
>>>> Paolo
>>>> 
>>>> [1] https://lkml.org/lkml/2019/9/18/736
>>>> 
>>>> Paolo Valente (1):
>>>> block, bfq: present a double cgroups interface
>>>> 
>>>> Tejun Heo (1):
>>>> blkcg: Make bfq disable iocost when enabled
>>>> 
>>>> Documentation/admin-guide/cgroup-v2.rst |   8 +-
>>>> Documentation/block/bfq-iosched.rst     |  40 ++--
>>>> block/bfq-cgroup.c                      | 260 ++++++++++++------------
>>>> block/bfq-iosched.c                     |  32 +++
>>>> block/blk-iocost.c                      |   5 +-
>>>> include/linux/blk-cgroup.h              |   5 +
>>>> kernel/cgroup/cgroup.c                  |   2 +
>>>> 7 files changed, 201 insertions(+), 151 deletions(-)
>>>> 
>>>> --
>>>> 2.20.1
>>> 
>> 
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, back to index

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-01 19:33 [PATCH 0/2] block, bfq: make bfq disable iocost and present a double interface Paolo Valente
2019-10-01 19:33 ` [PATCH 1/2] blkcg: Make bfq disable iocost when enabled Paolo Valente
2019-10-01 19:33 ` [PATCH 2/2] block, bfq: present a double cgroups interface Paolo Valente
2019-10-09 14:25 ` [PATCH 0/2] block, bfq: make bfq disable iocost and present a double interface Paolo Valente
2019-10-23  5:44   ` Paolo Valente
2019-11-04  6:55     ` Paolo Valente
2019-11-22 15:42       ` Paolo Valente

Linux-Block Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-block/0 linux-block/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-block linux-block/ https://lore.kernel.org/linux-block \
		linux-block@vger.kernel.org
	public-inbox-index linux-block

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-block


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git