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

Tejun Heo tj at kernel.org
Tue May 14 21:09:33 UTC 2013


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


More information about the Containers mailing list