public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH 00/14] blk-throttle: lockless bio processing for no throttle rule group
@ 2011-05-18 19:13 Vivek Goyal
  2011-05-18 19:13 ` [PATCH 01/14] blk-throttle: Use task_subsys_state() to determine a task's blkio_cgroup Vivek Goyal
                   ` (14 more replies)
  0 siblings, 15 replies; 17+ messages in thread
From: Vivek Goyal @ 2011-05-18 19:13 UTC (permalink / raw)
  To: linux-kernel, jaxboe; +Cc: dpshah, vgoyal

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(-)


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2011-05-19 18:44 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-05-18 19:13 [RFC PATCH 00/14] blk-throttle: lockless bio processing for no throttle rule group Vivek Goyal
2011-05-18 19:13 ` [PATCH 01/14] blk-throttle: Use task_subsys_state() to determine a task's blkio_cgroup Vivek Goyal
2011-05-18 19:13 ` [PATCH 02/14] blk-throttle: Do the new group initialization with the help of a function Vivek Goyal
2011-05-18 19:13 ` [PATCH 03/14] blk-cgroup: move some fields of unaccounted_time file under right config option Vivek Goyal
2011-05-18 19:13 ` [PATCH 04/14] cfq-iosched: Get rid of redundant function parameter "create" Vivek Goyal
2011-05-18 19:13 ` [PATCH 05/14] cfq-iosched: Fix a possible race with cfq cgroup removal code Vivek Goyal
2011-05-18 19:13 ` [PATCH 06/14] blk-cgroup: Allow sleeping while dynamically allocating a group Vivek Goyal
2011-05-18 19:13 ` [PATCH 07/14] blk-throttle: Dynamically allocate root group Vivek Goyal
2011-05-18 19:13 ` [PATCH 08/14] blk-throttle: Introduce a helper function to fill in device details Vivek Goyal
2011-05-18 19:13 ` [PATCH 09/14] blk-throttle: Use helper function to add root throtl group to lists Vivek Goyal
2011-05-18 19:13 ` [PATCH 10/14] blk-throttle: Free up a group only after one rcu grace period Vivek Goyal
2011-05-18 19:13 ` [PATCH 11/14] blk-throttle: Make dispatch stats per cpu Vivek Goyal
2011-05-18 19:13 ` [PATCH 12/14] blk-cgroup: Make 64bit per cpu stats safe on 32bit arch Vivek Goyal
2011-05-18 19:13 ` [PATCH 13/14] blk-cgroup: Make cgroup stat reset path blkg->lock free for dispatch stats Vivek Goyal
2011-05-18 19:13 ` [PATCH 14/14] blk-throttle: Make no throttling rule group processing lockless Vivek Goyal
2011-05-19 18:33 ` [RFC PATCH 00/14] blk-throttle: lockless bio processing for no throttle rule group Jens Axboe
2011-05-19 18:44   ` Vivek Goyal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox