All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jens Axboe <jens.axboe@oracle.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, knikanth@novell.com,
	"Paul E. McKenney" <paulmck@us.ibm.com>
Subject: Re: [PATCH 4/6] block: cfq: make the io contect sharing lockless
Date: Thu, 24 Jan 2008 08:36:06 +0100	[thread overview]
Message-ID: <20080124073606.GN6258@kernel.dk> (raw)
In-Reply-To: <20080123140819.d53bc976.akpm@linux-foundation.org>

On Wed, Jan 23 2008, Andrew Morton wrote:
> > On Tue, 22 Jan 2008 10:49:19 +0100 Jens Axboe <jens.axboe@oracle.com> wrote:
> > The io context sharing introduced a per-ioc spinlock, that would protect
> > the cfq io context lookup. That is a regression from the original, since
> > we never needed any locking there because the ioc/cic were process private.
> > 
> > The cic lookup is changed from an rbtree construct to a radix tree, which
> > we can then use RCU to make the reader side lockless. That is the performance
> > critical path, modifying the radix tree is only done on process creation
> > (when that process first does IO, actually) and on process exit (if that
> > process has done IO).
> 
> Perhaps Paul would review the rcu usage here sometime?

That would indeed be awesome :-)

> > +/*
> > + * Add cic into ioc, using cfqd as the search key. This enables us to lookup
> > + * the process specific cfq io context when entered from the block layer.
> > + * Also adds the cic to a per-cfqd list, used when this queue is removed.
> > + */
> > +static inline int
> 
> There's a lot of pointless inlining in there.

Will kill.

> > +++ b/block/ll_rw_blk.c
> > @@ -3831,6 +3831,16 @@ int __init blk_dev_init(void)
> >  	return 0;
> >  }
> >  
> > +static void cfq_dtor(struct io_context *ioc)
> > +{
> > +	struct cfq_io_context *cic[1];
> > +	int r;
> > +
> > +	r = radix_tree_gang_lookup(&ioc->radix_root, (void **) cic, 0, 1);
> > +	if (r > 0)
> > +		cic[0]->dtor(ioc);
> > +}
> 
> Some comments here might help others who are wondering why we can't just
> use radix_tree_lookup().

Sure, will add a comment.

> > @@ -3900,7 +3911,7 @@ struct io_context *alloc_io_context(gfp_t gfp_flags, int node)
> >  		ret->last_waited = jiffies; /* doesn't matter... */
> >  		ret->nr_batch_requests = 0; /* because this is 0 */
> >  		ret->aic = NULL;
> > -		ret->cic_root.rb_node = NULL;
> > +		INIT_RADIX_TREE(&ret->radix_root, GFP_ATOMIC | __GFP_HIGH);
> 
> Did this need to be atomic?

It's actually only ever used with a radix_tree_preload() where the
proper gfp mask is passed, the actual radix_tree_insert() is done under
lock protecting the tree.

-- 
Jens Axboe


  reply	other threads:[~2008-01-24  7:36 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-22  9:49 [PATCH 0/6] IO context sharing Jens Axboe
2008-01-22  9:49 ` [PATCH 1/6] ioprio: move io priority from task_struct to io_context Jens Axboe
2008-01-23 22:07   ` Andrew Morton
2008-01-24  7:30     ` Jens Axboe
2008-01-22  9:49 ` [PATCH 2/6] io context sharing: preliminary support Jens Axboe
2008-01-23 22:08   ` Andrew Morton
2008-01-24  7:36     ` Jens Axboe
2008-01-22  9:49 ` [PATCH 3/6] io_context sharing - cfq changes Jens Axboe
2008-01-22  9:49 ` [PATCH 4/6] block: cfq: make the io contect sharing lockless Jens Axboe
2008-01-23 22:08   ` Andrew Morton
2008-01-24  7:36     ` Jens Axboe [this message]
2008-01-24 16:42     ` Paul E. McKenney
2008-01-22  9:49 ` [PATCH 5/6] io_context sharing - anticipatory changes Jens Axboe
2008-01-22  9:49 ` [PATCH 6/6] kernel: add CLONE_IO to specifically request sharing of IO contexts Jens Axboe
2008-01-22 14:49 ` [PATCH 0/6] IO context sharing Peter Zijlstra
2008-01-22 18:21   ` Jens Axboe
2008-01-23  3:50 ` David Chinner
2008-01-23  8:44   ` Andi Kleen

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=20080124073606.GN6258@kernel.dk \
    --to=jens.axboe@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=knikanth@novell.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paulmck@us.ibm.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.