From: Tejun Heo <tj@kernel.org>
To: axboe@kernel.dk
Cc: linux-kernel@vger.kernel.org, lizefan@huawei.com,
containers@lists.linux-foundation.org, cgroups@vger.kernel.org,
vgoyal@redhat.com, Tejun Heo <tj@kernel.org>
Subject: [PATCH 29/31] blk-throttle: make throtl_pending_timer_fn() ready for hierarchy
Date: Wed, 1 May 2013 17:39:47 -0700 [thread overview]
Message-ID: <1367455189-6957-30-git-send-email-tj@kernel.org> (raw)
In-Reply-To: <1367455189-6957-1-git-send-email-tj@kernel.org>
throtl_pending_timer_fn() currently assumes that the parent_sq is the
top level one and the bio's dispatched are ready to be issued;
however, this assumption will be wrong with proper hierarchy support.
This patch makes the following changes to make
throtl_pending_timer_fn() ready for hiearchy.
* If the parent_sq isn't the top-level one, update the parent
throtl_grp's dispatch time and schedule the next dispatch as
necessary. If the parent's dispatch time is now, repeat the
function for the parent throtl_grp.
* If the parent_sq is the top-level one, kick issue work_item as
before.
* The debug message printed by throtl_log() now prints out the
service_queue's nr_queued[] instead of the total nr_queued as the
latter becomes uninteresting and misleading with hierarchical
dispatch.
Signed-off-by: Tejun Heo <tj@kernel.org>
---
block/blk-throttle.c | 40 +++++++++++++++++++++++++++++++++-------
1 file changed, 33 insertions(+), 7 deletions(-)
diff --git a/block/blk-throttle.c b/block/blk-throttle.c
index 367c269..f3bd278 100644
--- a/block/blk-throttle.c
+++ b/block/blk-throttle.c
@@ -949,23 +949,33 @@ static int throtl_select_dispatch(struct throtl_service_queue *parent_sq)
* This timer is armed when a child throtl_grp with active bio's become
* pending and queued on the service_queue's pending_tree and expires when
* the first child throtl_grp should be dispatched. This function
- * dispatches bio's from the children throtl_grps and kicks
- * throtl_data->dispatch_work if there are bio's ready to be issued.
+ * dispatches bio's from the children throtl_grps to the parent
+ * service_queue.
+ *
+ * If the parent's parent is another throtl_grp, dispatching is propagated
+ * by either arming its pending_timer or repeating dispatch directly. If
+ * the top-level service_tree is reached, throtl_data->dispatch_work is
+ * kicked so that the ready bio's are issued.
*/
static void throtl_pending_timer_fn(unsigned long arg)
{
struct throtl_service_queue *sq = (void *)arg;
+ struct throtl_grp *tg = sq_to_tg(sq);
struct throtl_data *td = sq_to_td(sq);
struct request_queue *q = td->queue;
- bool dispatched = false;
+ struct throtl_service_queue *parent_sq;
+ bool dispatched;
int ret;
spin_lock_irq(q->queue_lock);
+again:
+ parent_sq = sq->parent_sq;
+ dispatched = false;
while (true) {
throtl_log(sq, "dispatch nr_queued=%u read=%u write=%u",
- td->nr_queued[READ] + td->nr_queued[WRITE],
- td->nr_queued[READ], td->nr_queued[WRITE]);
+ sq->nr_queued[READ] + sq->nr_queued[WRITE],
+ sq->nr_queued[READ], sq->nr_queued[WRITE]);
ret = throtl_select_dispatch(sq);
if (ret) {
@@ -982,9 +992,25 @@ static void throtl_pending_timer_fn(unsigned long arg)
spin_lock_irq(q->queue_lock);
}
- if (dispatched)
- queue_work(kthrotld_workqueue, &td->dispatch_work);
+ if (!dispatched)
+ goto out_unlock;
+ if (parent_sq) {
+ /* @parent_sq is another throl_grp, propagate dispatch */
+ if (tg->flags & THROTL_TG_WAS_EMPTY) {
+ tg_update_disptime(tg);
+ if (!throtl_schedule_next_dispatch(parent_sq, false)) {
+ /* window is already open, repeat dispatching */
+ sq = parent_sq;
+ tg = sq_to_tg(sq);
+ goto again;
+ }
+ }
+ } else {
+ /* reached the top-level, queue issueing */
+ queue_work(kthrotld_workqueue, &td->dispatch_work);
+ }
+out_unlock:
spin_unlock_irq(q->queue_lock);
}
--
1.8.1.4
next prev parent reply other threads:[~2013-05-02 0:39 UTC|newest]
Thread overview: 154+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-02 0:39 [PATCHSET] blk-throttle: implement proper hierarchy support Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 11/31] blk-throttle: rename throtl_rb_root to throtl_service_queue Tejun Heo
2013-05-02 0:39 ` [PATCH 17/31] blk-throttle: move bio_lists[] and friends " Tejun Heo
2013-05-02 0:39 ` [PATCH 20/31] blk-throttle: add throtl_service_queue->parent_sq Tejun Heo
2013-05-02 0:39 ` [PATCH 21/31] blk-throttle: implement sq_to_tg(), sq_to_td() and throtl_log() Tejun Heo
[not found] ` <1367455189-6957-22-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-05-06 17:36 ` Vivek Goyal
2013-05-06 17:36 ` Vivek Goyal
[not found] ` <20130506173644.GD11731-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-06 18:38 ` Tejun Heo
2013-05-06 18:38 ` Tejun Heo
2013-05-06 20:38 ` Tejun Heo
2013-05-06 20:38 ` Tejun Heo
[not found] ` <20130506203827.GE800-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-06 20:39 ` Tejun Heo
2013-05-06 20:39 ` Tejun Heo
2013-05-06 20:39 ` Tejun Heo
2013-05-06 20:41 ` Vivek Goyal
2013-05-06 20:41 ` Vivek Goyal
[not found] ` <20130506204141.GF11731-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-06 20:43 ` Tejun Heo
2013-05-06 20:43 ` Tejun Heo
2013-05-06 20:43 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 22/31] blk-throttle: set REQ_THROTTLED from throtl_charge_bio() and gate stats update with it Tejun Heo
2013-05-02 0:39 ` [PATCH 23/31] blk-throttle: separate out throtl_service_queue->pending_timer from throtl_data->dispatch_work Tejun Heo
2013-05-02 0:39 ` [PATCH 24/31] blk-throttle: implement dispatch looping Tejun Heo
2013-05-02 0:39 ` [PATCH 26/31] blk-throttle: make blk_throtl_drain() ready for hierarchy Tejun Heo
2013-05-02 0:39 ` [PATCH 27/31] blk-throttle: make blk_throtl_bio() " Tejun Heo
2013-05-02 0:39 ` Tejun Heo [this message]
2013-05-02 0:39 ` [PATCH 30/31] blk-throttle: implement throtl_grp->has_rules[] Tejun Heo
[not found] ` <1367455189-6957-1-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-05-02 0:39 ` [PATCH 01/31] blkcg: fix error return path in blkg_create() Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 02/31] blkcg: move blkg_for_each_descendant_pre() to block/blk-cgroup.h Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 03/31] blkcg: implement blkg_for_each_descendant_post() Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 04/31] blkcg: invoke blkcg_policy->pd_init() after parent is linked Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 05/31] blkcg: move bulk of blkcg_gq release operations to the RCU callback Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 06/31] blk-throttle: remove spurious throtl_enqueue_tg() call from throtl_select_dispatch() Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 07/31] blk-throttle: removed deferred config application mechanism Tejun Heo
2013-05-02 0:39 ` Tejun Heo
[not found] ` <1367455189-6957-8-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-05-02 14:49 ` Vivek Goyal
2013-05-02 14:49 ` Vivek Goyal
[not found] ` <20130502144912.GE30020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 17:27 ` Tejun Heo
2013-05-02 17:27 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 08/31] blk-throttle: collapse throtl_dispatch() into the work function Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 09/31] blk-throttle: relocate throtl_schedule_delayed_work() Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 10/31] blk-throttle: remove pointless throtl_nr_queued() optimizations Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 11/31] blk-throttle: rename throtl_rb_root to throtl_service_queue Tejun Heo
2013-05-02 0:39 ` [PATCH 12/31] blk-throttle: simplify throtl_grp flag handling Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 13/31] blk-throttle: add backlink pointer from throtl_grp to throtl_data Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 14/31] blk-throttle: pass around throtl_service_queue instead of throtl_data Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 15/31] blk-throttle: reorganize throtl_service_queue passed around as argument Tejun Heo
2013-05-02 0:39 ` Tejun Heo
[not found] ` <1367455189-6957-16-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-05-02 15:21 ` Vivek Goyal
2013-05-02 15:21 ` Vivek Goyal
[not found] ` <20130502152148.GF30020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 17:29 ` Tejun Heo
2013-05-02 17:29 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 16/31] blk-throttle: add throtl_grp->service_queue Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 17/31] blk-throttle: move bio_lists[] and friends to throtl_service_queue Tejun Heo
2013-05-02 0:39 ` [PATCH 18/31] blk-throttle: dispatch to throtl_data->service_queue.bio_lists[] Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 19/31] blk-throttle: generalize update_disptime optimization in blk_throtl_bio() Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 20/31] blk-throttle: add throtl_service_queue->parent_sq Tejun Heo
2013-05-02 0:39 ` [PATCH 21/31] blk-throttle: implement sq_to_tg(), sq_to_td() and throtl_log() Tejun Heo
2013-05-02 0:39 ` [PATCH 22/31] blk-throttle: set REQ_THROTTLED from throtl_charge_bio() and gate stats update with it Tejun Heo
2013-05-02 0:39 ` [PATCH 23/31] blk-throttle: separate out throtl_service_queue->pending_timer from throtl_data->dispatch_work Tejun Heo
2013-05-02 0:39 ` [PATCH 24/31] blk-throttle: implement dispatch looping Tejun Heo
2013-05-02 0:39 ` [PATCH 25/31] blk-throttle: dispatch from throtl_pending_timer_fn() Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 26/31] blk-throttle: make blk_throtl_drain() ready for hierarchy Tejun Heo
2013-05-02 0:39 ` [PATCH 27/31] blk-throttle: make blk_throtl_bio() " Tejun Heo
2013-05-02 0:39 ` [PATCH 28/31] blk-throttle: make tg_dispatch_one_bio() " Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 29/31] blk-throttle: make throtl_pending_timer_fn() " Tejun Heo
2013-05-02 0:39 ` [PATCH 30/31] blk-throttle: implement throtl_grp->has_rules[] Tejun Heo
2013-05-02 0:39 ` [PATCH 31/31] blk-throttle: implement proper hierarchy support Tejun Heo
2013-05-02 17:34 ` [PATCHSET] " Vivek Goyal
2013-05-02 17:34 ` Vivek Goyal
[not found] ` <20130502173428.GA4771-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 17:57 ` Tejun Heo
2013-05-02 17:57 ` Tejun Heo
[not found] ` <20130502175701.GL19814-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-02 18:17 ` Vivek Goyal
2013-05-02 18:17 ` Vivek Goyal
[not found] ` <20130502181747.GH30020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 18:29 ` Tejun Heo
2013-05-02 18:29 ` Tejun Heo
2013-05-02 18:29 ` Tejun Heo
[not found] ` <20130502182933.GN19814-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-02 18:45 ` Vivek Goyal
2013-05-02 18:45 ` Vivek Goyal
[not found] ` <20130502184514.GI30020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 18:49 ` Tejun Heo
2013-05-02 18:49 ` Tejun Heo
2013-05-02 18:49 ` Tejun Heo
[not found] ` <20130502184953.GP19814-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-02 19:07 ` Vivek Goyal
2013-05-02 19:07 ` Vivek Goyal
[not found] ` <20130502190732.GK30020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 19:11 ` Tejun Heo
2013-05-02 19:11 ` Tejun Heo
[not found] ` <CAOS58YOk7G=dBG1v5Ed2z3biMMyKkkutp30vH5XC72z0_Z85cw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-05-02 19:31 ` Vivek Goyal
2013-05-02 19:31 ` Vivek Goyal
2013-05-02 19:31 ` Vivek Goyal
[not found] ` <20130502193139.GL30020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 23:13 ` Tejun Heo
2013-05-02 23:13 ` Tejun Heo
[not found] ` <20130502231307.GT19814-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-03 17:56 ` Vivek Goyal
2013-05-03 17:56 ` Vivek Goyal
2013-05-03 17:56 ` Vivek Goyal
[not found] ` <20130503175652.GB6062-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-03 18:57 ` Tejun Heo
2013-05-03 18:57 ` Tejun Heo
[not found] ` <20130503185751.GA22860-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-03 18:58 ` Tejun Heo
2013-05-03 18:58 ` Tejun Heo
2013-05-03 18:58 ` Tejun Heo
2013-05-03 19:08 ` Vivek Goyal
2013-05-03 19:08 ` Vivek Goyal
[not found] ` <20130503190823.GC6062-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-03 19:14 ` Tejun Heo
2013-05-03 19:14 ` Tejun Heo
[not found] ` <20130503191418.GC22860-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-03 19:26 ` Vivek Goyal
2013-05-03 19:26 ` Vivek Goyal
2013-05-03 21:05 ` Vivek Goyal
2013-05-03 21:05 ` Vivek Goyal
2013-05-03 21:05 ` Vivek Goyal
[not found] ` <20130503210513.GE6062-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-03 23:54 ` Tejun Heo
2013-05-03 23:54 ` Tejun Heo
[not found] ` <20130503235455.GE22860-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-06 17:33 ` Vivek Goyal
2013-05-06 17:33 ` Vivek Goyal
2013-05-03 19:14 ` Tejun Heo
2013-05-03 19:08 ` Vivek Goyal
2013-05-03 18:57 ` Tejun Heo
2013-05-02 17:57 ` Tejun Heo
2013-05-02 18:08 ` Vivek Goyal
2013-05-02 18:08 ` Vivek Goyal
[not found] ` <20130502180815.GG30020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-02 18:44 ` Tejun Heo
2013-05-02 18:44 ` Tejun Heo
[not found] ` <20130502184426.GO19814-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-02 18:59 ` Vivek Goyal
2013-05-02 18:59 ` Vivek Goyal
2013-05-02 18:59 ` Vivek Goyal
2013-05-04 0:50 ` [PATCH 29.5/32] blk-throttle: add throtl_qnode for dispatch fairness Tejun Heo
2013-05-04 0:50 ` Tejun Heo
[not found] ` <20130504005044.GF22860-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-05-04 0:53 ` Tejun Heo
2013-05-04 0:53 ` Tejun Heo
2013-05-06 16:00 ` Vivek Goyal
2013-05-06 16:00 ` Vivek Goyal
2013-05-06 16:00 ` Vivek Goyal
[not found] ` <20130506160006.GA11731-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-05-06 18:35 ` Tejun Heo
2013-05-06 18:35 ` Tejun Heo
2013-05-02 0:39 ` [PATCH 31/31] blk-throttle: implement proper hierarchy support Tejun Heo
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=1367455189-6957-30-git-send-email-tj@kernel.org \
--to=tj@kernel.org \
--cc=axboe@kernel.dk \
--cc=cgroups@vger.kernel.org \
--cc=containers@lists.linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lizefan@huawei.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.