[PATCH] cgroups: Do not show inactive devices in cgroups statistics

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

 



Before 3.5 CFQ cgroups stats was lazy initialized - the stat object was created
only if the device had any I/O in that cgroup.

Around 3.5 time CFQ stat structure became part of device structure. And
zero stat is created when device is initialized. Initialization can happen
e.g. when we configure it via 'weight_device' file. It calls
cfqg_set_weight_device() and it creates cfq_group structure.

But even if device is initialized the stats is still zero.
If we configure all devices in all in all cgroups it generates a lot of
useless stat info that takes more resources to process and store. Imagine
servers with handreds cgroups and handreds iSCSI block devices.

Do not print stats for inactive devices - it restores functionality
that was before 3.5

Signed-off-by: Anatol Pomozov <anatol.pomozov@xxxxxxxxx>
---
 block/blk-cgroup.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
index e8918ff..4e07e73 100644
--- a/block/blk-cgroup.c
+++ b/block/blk-cgroup.c
@@ -560,6 +560,7 @@ EXPORT_SYMBOL_GPL(__blkg_prfill_u64);
  * @rwstat: rwstat to print
  *
  * Print @rwstat to @sf for the device assocaited with @pd.
+ * Devices with zero activity will not be printed.
  */
 u64 __blkg_prfill_rwstat(struct seq_file *sf, struct blkg_policy_data *pd,
 			 const struct blkg_rwstat *rwstat)
@@ -571,19 +572,23 @@ u64 __blkg_prfill_rwstat(struct seq_file *sf, struct blkg_policy_data *pd,
 		[BLKG_RWSTAT_ASYNC]	= "Async",
 	};
 	const char *dname = blkg_dev_name(pd->blkg);
-	u64 v;
+	u64 total;
 	int i;
 
 	if (!dname)
 		return 0;
 
+	total = rwstat->cnt[BLKG_RWSTAT_READ] + rwstat->cnt[BLKG_RWSTAT_WRITE];
+	/* skip devices with no activity */
+	if (!total)
+		return 0;
+
 	for (i = 0; i < BLKG_RWSTAT_NR; i++)
 		seq_printf(sf, "%s %s %llu\n", dname, rwstr[i],
 			   (unsigned long long)rwstat->cnt[i]);
 
-	v = rwstat->cnt[BLKG_RWSTAT_READ] + rwstat->cnt[BLKG_RWSTAT_WRITE];
-	seq_printf(sf, "%s Total %llu\n", dname, (unsigned long long)v);
-	return v;
+	seq_printf(sf, "%s Total %llu\n", dname, (unsigned long long)total);
+	return total;
 }
 EXPORT_SYMBOL_GPL(__blkg_prfill_rwstat);
 
-- 
1.8.3

--
To unsubscribe from this list: send the line "unsubscribe cgroups" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]     [Monitors]

  Powered by Linux