|From:||Vivek Goyal <firstname.lastname@example.org>|
|Subject:||[RFC PATCH 00/14] blk-throttle: lockless bio processing for no throttle rule group|
|Date:||Wed, 18 May 2011 15:13:12 -0400|
Hi, Block throttling code takes request queue lock for every incoming bio (blk_throtl_bio()). This is true even if there are no throttle rules in the group. This is a common case for root cgroup where distributions will have throttling support compiled in but a vast majority of users will not be specifying throttling rule. This patch series tries to make bio processing lockless (no requeust queue lock), if there are no rules specified for the group. Once a bio is submitted, under rcu_read_lock() we search for the group, update the stats and release the rcu lock. request queue lock is taken only if there are throttling rules specified in the group. I have made some of the dispatch stats per cpu so that these can be updated without taking request queue lock. On my system for a simple dd as follows, request queue lock acquisition count has gone down by 11% roughly. dd if=/mnt/zerofile-1G of=/dev/null bs=4K iflag=direct lockstat output vanilla kernel ----------------------------- class name acquisitions holdtime-total &(&q->__queue_lock)->rlock: 2360944 1850183.07 lockstat output with patched kernel ----------------------------------- class name acquisitions holdtime-total &(&q->__queue_lock)->rlock: 2098599 1430478.79 I did test on a 4 cpu system doing IO to one SSD. I did not see any significant improvement in throughput. I suspect that I never saturated the cpus hence I don't see the improvement in throughput. I will see if I can get more testing done on this and see if I notice IO throughput improvement. Jens, first patch of the series is already in your for-linus branch. I was waiting for it to be pushed to Linus and then I can drop that first patch. Thanks Vivek Vivek Goyal (14): blk-throttle: Use task_subsys_state() to determine a task's blkio_cgroup blk-throttle: Do the new group initialization with the help of a function blk-cgroup: move some fields of unaccounted_time file under right config option cfq-iosched: Get rid of redundant function parameter "create" cfq-iosched: Fix a possible race with cfq cgroup removal code blk-cgroup: Allow sleeping while dynamically allocating a group blk-throttle: Dynamically allocate root group blk-throttle: Introduce a helper function to fill in device details blk-throttle: Use helper function to add root throtl group to lists blk-throttle: Free up a group only after one rcu grace period blk-throttle: Make dispatch stats per cpu blk-cgroup: Make 64bit per cpu stats safe on 32bit arch blk-cgroup: Make cgroup stat reset path blkg->lock free for dispatch stats blk-throttle: Make no throttling rule group processing lockless block/blk-cgroup.c | 187 ++++++++++++++++++++++++------ block/blk-cgroup.h | 39 +++++-- block/blk-core.c | 3 +- block/blk-throttle.c | 318 +++++++++++++++++++++++++++++++++++++------------- block/cfq-iosched.c | 207 ++++++++++++++++++++++++--------- 5 files changed, 578 insertions(+), 176 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to email@example.com More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Copyright © 2011, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds