[GIT PULL] blk-throttle: implement proper hierarchy support

From: Tejun Heo
Date: Tue May 14 2013 - 17:09:44 EST


Hello, Jens.

This is the pull request for patches which implement proper hierarchy
support in blk-throttle and remove .broken_hierarchy tagging from
blkcg.

http://thread.gmane.org/gmane.linux.kernel.cgroups/7119

The implementation is fairly straight-forward in that it just repeats
the same scheduling at each layer until it reaches the top and thus
isn't very scalable. It also still has an issue where a nested cgroup
could get lower than configured limits as it travels towards root but
the severity is at an acceptable level after Vivke's start time
adjustment patch. The issue ultimately is a problem in the scheduling
algorithm itself and can also show up in flat hierarchy given the
right (well, wrong) IO pattern. If it still is an actual problem,
which I don't think is, we should be able to work on it later on in
fairly isolated manner.

While the implementation isn't perfect, it should be good enough in
most cases with a few levels of nesting and this allows the rest of
cgroup to proceed towards unified hierarchy handling.

The series is based on top of v3.10-rc1 and available in the following
git branch

git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc.git blk-throttle-hierarchy

for you to fetch changes up to 9138125beabbb76b4a373d4a619870f6f5d86fc5:

blk-throttle: implement proper hierarchy support (2013-05-14 13:52:38 -0700)

Thanks.

----------------------------------------------------------------
Tejun Heo (32):
blkcg: fix error return path in blkg_create()
blkcg: move blkg_for_each_descendant_pre() to block/blk-cgroup.h
blkcg: implement blkg_for_each_descendant_post()
blkcg: invoke blkcg_policy->pd_init() after parent is linked
blkcg: move bulk of blkcg_gq release operations to the RCU callback
blk-throttle: remove spurious throtl_enqueue_tg() call from throtl_select_dispatch()
blk-throttle: remove deferred config application mechanism
blk-throttle: collapse throtl_dispatch() into the work function
blk-throttle: relocate throtl_schedule_delayed_work()
blk-throttle: remove pointless throtl_nr_queued() optimizations
blk-throttle: rename throtl_rb_root to throtl_service_queue
blk-throttle: simplify throtl_grp flag handling
blk-throttle: add backlink pointer from throtl_grp to throtl_data
blk-throttle: pass around throtl_service_queue instead of throtl_data
blk-throttle: reorganize throtl_service_queue passed around as argument
blk-throttle: add throtl_grp->service_queue
blk-throttle: move bio_lists[] and friends to throtl_service_queue
blk-throttle: dispatch to throtl_data->service_queue.bio_lists[]
blk-throttle: generalize update_disptime optimization in blk_throtl_bio()
blk-throttle: add throtl_service_queue->parent_sq
blk-throttle: implement sq_to_tg(), sq_to_td() and throtl_log()
blk-throttle: set REQ_THROTTLED from throtl_charge_bio() and gate stats update with it
blk-throttle: separate out throtl_service_queue->pending_timer from throtl_data->dispatch_work
blk-throttle: implement dispatch looping
blk-throttle: dispatch from throtl_pending_timer_fn()
blk-throttle: make blk_throtl_drain() ready for hierarchy
blk-throttle: make blk_throtl_bio() ready for hierarchy
blk-throttle: make tg_dispatch_one_bio() ready for hierarchy
blk-throttle: make throtl_pending_timer_fn() ready for hierarchy
blk-throttle: add throtl_qnode for dispatch fairness
blk-throttle: implement throtl_grp->has_rules[]
blk-throttle: implement proper hierarchy support

Vivek Goyal (1):
blk-throttle: Account for child group's start time in parent while bio climbs up

Documentation/cgroups/blkio-controller.txt | 29 +-
block/blk-cgroup.c | 105 ++-
block/blk-cgroup.h | 38 +-
block/blk-throttle.c | 1064 +++++++++++++++++++---------
include/linux/cgroup.h | 2 +
5 files changed, 837 insertions(+), 401 deletions(-)

--
tejun
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/