Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1559152

[PATCH V6 04/18] blk-throttle: configure bps/iops limit for cgroup in low limit

From Shaohua Li <shli@fb.com>
Newsgroups linux.kernel
Subject [PATCH V6 04/18] blk-throttle: configure bps/iops limit for cgroup in low limit
Date 2017-01-15 04:50 +0100
Message-ID <sZJZo-60P-43@gated-at.bofh.it> (permalink)
References <sZJZn-60P-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


each queue will have a state machine. Initially queue is in LIMIT_LOW
state, which means all cgroups will be throttled according to their low
limit. After all cgroups with low limit cross the limit, the queue state
gets upgraded to LIMIT_MAX state.
For max limit, cgroup will use the limit configured by user.
For low limit, cgroup will use the minimal value between low limit and
max limit configured by user. If the minimal value is 0, which means the
cgroup doesn't configure low limit, we will use max limit to throttle
the cgroup and the cgroup is ready to upgrade to LIMIT_MAX

Signed-off-by: Shaohua Li <shli@fb.com>
---
 block/blk-throttle.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/block/blk-throttle.c b/block/blk-throttle.c
index d3ad43c..3bc6deb 100644
--- a/block/blk-throttle.c
+++ b/block/blk-throttle.c
@@ -212,12 +212,28 @@ static struct throtl_data *sq_to_td(struct throtl_service_queue *sq)
 
 static uint64_t tg_bps_limit(struct throtl_grp *tg, int rw)
 {
-	return tg->bps[rw][tg->td->limit_index];
+	struct blkcg_gq *blkg = tg_to_blkg(tg);
+	uint64_t ret;
+
+	if (cgroup_subsys_on_dfl(io_cgrp_subsys) && !blkg->parent)
+		return U64_MAX;
+	ret = tg->bps[rw][tg->td->limit_index];
+	if (ret == 0 && tg->td->limit_index == LIMIT_LOW)
+		return tg->bps[rw][LIMIT_MAX];
+	return ret;
 }
 
 static unsigned int tg_iops_limit(struct throtl_grp *tg, int rw)
 {
-	return tg->iops[rw][tg->td->limit_index];
+	struct blkcg_gq *blkg = tg_to_blkg(tg);
+	unsigned int ret;
+
+	if (cgroup_subsys_on_dfl(io_cgrp_subsys) && !blkg->parent)
+		return UINT_MAX;
+	ret = tg->iops[rw][tg->td->limit_index];
+	if (ret == 0 && tg->td->limit_index == LIMIT_LOW)
+		return tg->iops[rw][LIMIT_MAX];
+	return ret;
 }
 
 /**
-- 
2.9.3

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH V6 00/18] blk-throttle: add .low limit Shaohua Li <shli@fb.com> - 2017-01-15 04:50 +0100
  [PATCH V6 04/18] blk-throttle: configure bps/iops limit for cgroup in low limit Shaohua Li <shli@fb.com> - 2017-01-15 04:50 +0100
  [PATCH V6 15/18] blk-throttle: add interface for per-cgroup target latency Shaohua Li <shli@fb.com> - 2017-01-15 04:50 +0100
  [PATCH V6 03/18] blk-throttle: add .low interface Shaohua Li <shli@fb.com> - 2017-01-15 04:50 +0100
  [PATCH V6 09/18] blk-throttle: choose a small throtl_slice for SSD Shaohua Li <shli@fb.com> - 2017-01-15 04:50 +0100
  [PATCH V6 17/18] blk-throttle: add a mechanism to estimate IO latency Shaohua Li <shli@fb.com> - 2017-01-15 04:50 +0100

csiph-web