From: Fengguang Wu <fengguang.wu@intel.com>
To: Linux Memory Management List <linux-mm@kvack.org>
Cc: Vivek Goyal <vgoyal@redhat.com>,
Fengguang Wu <fengguang.wu@intel.com>,
Suresh Jayaraman <sjayaraman@suse.com>,
Andrea Righi <andrea@betterlinux.com>,
Jeff Moyer <jmoyer@redhat.com>,
linux-fsdevel@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>
Subject: [PATCH 3/6] blk-cgroup: buffered write IO controller - bandwidth weight
Date: Wed, 28 Mar 2012 20:13:11 +0800 [thread overview]
Message-ID: <20120328131153.305137134@intel.com> (raw)
In-Reply-To: 20120328121308.568545879@intel.com
[-- Attachment #1: writeback-io-controller-weight.patch --]
[-- Type: text/plain, Size: 3526 bytes --]
blkcg->weight can be trivially supported for buffered writes by directly
scaling task_ratelimit in balance_dirty_pages().
However the sementics are not quite the same with direct IO.
- for direct IO, weight is normally applied to disk time
- for buffered writes, weight is applied to dirty rate
Notes about the (balanced_dirty_ratelimit > write_bw) check removal:
When there is only one dd running and its weight is set to
BLKIO_WEIGHT_MIN=10, bdi->dirty_ratelimit will end up balancing around
write_bw * BLKIO_WEIGHT_DEFAULT / BLKIO_WEIGHT_MIN
= write_bw * 50
So the limit should now be raised to (write_bw * 50) to deal with the
above extreme case, which seems too large to be useful for normal cases.
So just remove it.
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
---
include/linux/blk-cgroup.h | 18 ++++++++++++++----
mm/page-writeback.c | 10 +++++-----
2 files changed, 19 insertions(+), 9 deletions(-)
--- linux-next.orig/include/linux/blk-cgroup.h 2012-03-28 13:42:26.686233288 +0800
+++ linux-next/include/linux/blk-cgroup.h 2012-03-28 14:25:16.150180560 +0800
@@ -21,6 +21,10 @@ enum blkio_policy_id {
BLKIO_POLICY_THROTL, /* Throttling */
};
+#define BLKIO_WEIGHT_MIN 10
+#define BLKIO_WEIGHT_MAX 1000
+#define BLKIO_WEIGHT_DEFAULT 500
+
/* Max limits for throttle policy */
#define THROTL_IOPS_MAX UINT_MAX
@@ -209,6 +213,11 @@ extern unsigned int blkcg_get_read_iops(
extern unsigned int blkcg_get_write_iops(struct blkio_cgroup *blkcg,
dev_t dev);
+static inline unsigned int blkcg_weight(struct blkio_cgroup *blkcg)
+{
+ return blkcg->weight;
+}
+
typedef void (blkio_unlink_group_fn) (void *key, struct blkio_group *blkg);
typedef void (blkio_update_group_weight_fn) (void *key,
@@ -259,11 +268,12 @@ static inline void blkio_policy_unregist
static inline char *blkg_path(struct blkio_group *blkg) { return NULL; }
-#endif
+static inline unsigned int blkcg_weight(struct blkio_cgroup *blkcg)
+{
+ return BLKIO_WEIGHT_DEFAULT;
+}
-#define BLKIO_WEIGHT_MIN 10
-#define BLKIO_WEIGHT_MAX 1000
-#define BLKIO_WEIGHT_DEFAULT 500
+#endif
#ifdef CONFIG_DEBUG_BLK_CGROUP
void blkiocg_update_avg_queue_size_stats(struct blkio_group *blkg);
--- linux-next.orig/mm/page-writeback.c 2012-03-28 13:42:26.678233289 +0800
+++ linux-next/mm/page-writeback.c 2012-03-28 14:26:02.694179605 +0800
@@ -905,11 +905,6 @@ static void bdi_update_dirty_ratelimit(s
*/
balanced_dirty_ratelimit = div_u64((u64)task_ratelimit * write_bw,
dirty_rate | 1);
- /*
- * balanced_dirty_ratelimit ~= (write_bw / N) <= write_bw
- */
- if (unlikely(balanced_dirty_ratelimit > write_bw))
- balanced_dirty_ratelimit = write_bw;
/*
* We could safely do this and return immediately:
@@ -1263,6 +1258,11 @@ static void balance_dirty_pages(struct a
bdi_thresh, bdi_dirty);
task_ratelimit = ((u64)dirty_ratelimit * pos_ratio) >>
RATELIMIT_CALC_SHIFT;
+
+ if (blkcg_weight(blkcg) != BLKIO_WEIGHT_DEFAULT)
+ task_ratelimit = (u64)task_ratelimit *
+ blkcg_weight(blkcg) / BLKIO_WEIGHT_DEFAULT;
+
max_pause = bdi_max_pause(bdi, bdi_dirty);
min_pause = bdi_min_pause(bdi, max_pause,
task_ratelimit, dirty_ratelimit,
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2012-03-28 22:03 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-28 12:13 [PATCH 0/6] buffered write IO controller in balance_dirty_pages() Fengguang Wu
2012-03-28 12:13 ` [PATCH 1/6] blk-cgroup: move blk-cgroup.h in include/linux/blk-cgroup.h Fengguang Wu
2012-03-28 12:13 ` [PATCH 2/6] blk-cgroup: account dirtied pages Fengguang Wu
2012-03-28 12:13 ` Fengguang Wu [this message]
2012-03-28 12:13 ` [PATCH 4/6] blk-cgroup: buffered write IO controller - bandwidth limit Fengguang Wu
2012-03-28 12:13 ` [PATCH 5/6] blk-cgroup: buffered write IO controller - bandwidth limit interface Fengguang Wu
2012-03-28 12:13 ` [PATCH 6/6] blk-cgroup: buffered write IO controller - debug trace Fengguang Wu
2012-03-28 21:10 ` [PATCH 0/6] buffered write IO controller in balance_dirty_pages() Vivek Goyal
2012-03-28 22:35 ` Fengguang Wu
2012-03-29 2:48 ` Suresh Jayaraman
2012-03-29 0:34 ` KAMEZAWA Hiroyuki
2012-03-29 1:22 ` Fengguang Wu
2012-04-01 4:16 ` Suresh Jayaraman
2012-04-01 8:30 ` Fengguang Wu
2012-04-01 20:56 ` Vivek Goyal
2012-04-03 8:00 ` Fengguang Wu
2012-04-03 14:53 ` Vivek Goyal
2012-04-03 23:32 ` Fengguang Wu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120328131153.305137134@intel.com \
--to=fengguang.wu@intel.com \
--cc=andrea@betterlinux.com \
--cc=jmoyer@redhat.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=sjayaraman@suse.com \
--cc=vgoyal@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).