All of lore.kernel.org
 help / color / mirror / Atom feed
From: Miao Xie <miaox@cn.fujitsu.com>
To: Gu Zheng <guz.fnst@cn.fujitsu.com>, Benjamin <bcrl@kvack.org>
Cc: linux-aio@kvack.org, fsdevel <linux-fsdevel@vger.kernel.org>,
	linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] aio: optimize free kioctx slot search
Date: Thu, 26 Dec 2013 18:39:27 +0800	[thread overview]
Message-ID: <52BC075F.6060101@cn.fujitsu.com> (raw)
In-Reply-To: <52BC0352.2040504@cn.fujitsu.com>

On thu, 26 Dec 2013 18:22:10 +0800, Gu Zheng wrote:
> Add a 'next_free' field into kioctx_table to store the next id that
> may be free, in order to reduce the search region when we insert
> kioctx into kioctx table.
> When we take a free slot from kioctx_table, update 'next_free' to
> the next slot. Also when  we free one slot to kioctx_table, update 'next_free'
> to the new free slot if it's smaller than 'next_free'. So that we can
> ensure that the slots before 'next_free' are all used, and the search can start
> from 'next_free' to reduce the search and improve the performance.
> 
> Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>

Reviewed-by: Miao Xie <miaox@cn.fujitsu.com>

Thanks
Miao

> ---
>  fs/aio.c |   10 ++++++++--
>  1 files changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/aio.c b/fs/aio.c
> index 062a5f6..489fda6 100644
> --- a/fs/aio.c
> +++ b/fs/aio.c
> @@ -69,6 +69,7 @@ struct aio_ring {
>  struct kioctx_table {
>  	struct rcu_head	rcu;
>  	unsigned	nr;
> +	unsigned	next_free;
>  	struct kioctx	*table[];
>  };
>  
> @@ -548,11 +549,12 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
>  	table = rcu_dereference(mm->ioctx_table);
>  
>  	while (1) {
> -		if (table)
> -			for (i = 0; i < table->nr; i++)
> +		if (table && table->next_free < table->nr)
> +			for (i = table->next_free; i < table->nr; i++)
>  				if (!table->table[i]) {
>  					ctx->id = i;
>  					table->table[i] = ctx;
> +					table->next_free = i + 1;
>  					rcu_read_unlock();
>  					spin_unlock(&mm->ioctx_lock);
>  
> @@ -579,8 +581,10 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
>  		old = rcu_dereference(mm->ioctx_table);
>  
>  		if (!old) {
> +			table->next_free = 0;
>  			rcu_assign_pointer(mm->ioctx_table, table);
>  		} else if (table->nr > old->nr) {
> +			table->next_free = old->nr;
>  			memcpy(table->table, old->table,
>  			       old->nr * sizeof(struct kioctx *));
>  
> @@ -716,6 +720,8 @@ static void kill_ioctx(struct mm_struct *mm, struct kioctx *ctx)
>  
>  		WARN_ON(ctx != table->table[ctx->id]);
>  		table->table[ctx->id] = NULL;
> +		if (ctx->id < table->next_free)
> +			table->next_free = ctx->id;
>  		rcu_read_unlock();
>  		spin_unlock(&mm->ioctx_lock);
>  
> 

--
To unsubscribe, send a message with 'unsubscribe linux-aio' in
the body to majordomo@kvack.org.  For more info on Linux AIO,
see: http://www.kvack.org/aio/
Don't email: <a href=mailto:"aart@kvack.org">aart@kvack.org</a>

WARNING: multiple messages have this Message-ID (diff)
From: Miao Xie <miaox@cn.fujitsu.com>
To: Gu Zheng <guz.fnst@cn.fujitsu.com>, Benjamin <bcrl@kvack.org>
Cc: linux-aio@kvack.org, fsdevel <linux-fsdevel@vger.kernel.org>,
	linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] aio: optimize free kioctx slot search
Date: Thu, 26 Dec 2013 18:39:27 +0800	[thread overview]
Message-ID: <52BC075F.6060101@cn.fujitsu.com> (raw)
In-Reply-To: <52BC0352.2040504@cn.fujitsu.com>

On thu, 26 Dec 2013 18:22:10 +0800, Gu Zheng wrote:
> Add a 'next_free' field into kioctx_table to store the next id that
> may be free, in order to reduce the search region when we insert
> kioctx into kioctx table.
> When we take a free slot from kioctx_table, update 'next_free' to
> the next slot. Also when  we free one slot to kioctx_table, update 'next_free'
> to the new free slot if it's smaller than 'next_free'. So that we can
> ensure that the slots before 'next_free' are all used, and the search can start
> from 'next_free' to reduce the search and improve the performance.
> 
> Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>

Reviewed-by: Miao Xie <miaox@cn.fujitsu.com>

Thanks
Miao

> ---
>  fs/aio.c |   10 ++++++++--
>  1 files changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/aio.c b/fs/aio.c
> index 062a5f6..489fda6 100644
> --- a/fs/aio.c
> +++ b/fs/aio.c
> @@ -69,6 +69,7 @@ struct aio_ring {
>  struct kioctx_table {
>  	struct rcu_head	rcu;
>  	unsigned	nr;
> +	unsigned	next_free;
>  	struct kioctx	*table[];
>  };
>  
> @@ -548,11 +549,12 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
>  	table = rcu_dereference(mm->ioctx_table);
>  
>  	while (1) {
> -		if (table)
> -			for (i = 0; i < table->nr; i++)
> +		if (table && table->next_free < table->nr)
> +			for (i = table->next_free; i < table->nr; i++)
>  				if (!table->table[i]) {
>  					ctx->id = i;
>  					table->table[i] = ctx;
> +					table->next_free = i + 1;
>  					rcu_read_unlock();
>  					spin_unlock(&mm->ioctx_lock);
>  
> @@ -579,8 +581,10 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
>  		old = rcu_dereference(mm->ioctx_table);
>  
>  		if (!old) {
> +			table->next_free = 0;
>  			rcu_assign_pointer(mm->ioctx_table, table);
>  		} else if (table->nr > old->nr) {
> +			table->next_free = old->nr;
>  			memcpy(table->table, old->table,
>  			       old->nr * sizeof(struct kioctx *));
>  
> @@ -716,6 +720,8 @@ static void kill_ioctx(struct mm_struct *mm, struct kioctx *ctx)
>  
>  		WARN_ON(ctx != table->table[ctx->id]);
>  		table->table[ctx->id] = NULL;
> +		if (ctx->id < table->next_free)
> +			table->next_free = ctx->id;
>  		rcu_read_unlock();
>  		spin_unlock(&mm->ioctx_lock);
>  
> 


  reply	other threads:[~2013-12-26 10:39 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-26 10:22 [PATCH] aio: optimize free kioctx slot search Gu Zheng
2013-12-26 10:22 ` Gu Zheng
2013-12-26 10:39 ` Miao Xie [this message]
2013-12-26 10:39   ` Miao Xie
2013-12-26 14:13 ` Matthew Wilcox
2013-12-27 10:32   ` Gu Zheng
2013-12-27 10:32     ` Gu Zheng
2013-12-27 12:32     ` Matthew Wilcox

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=52BC075F.6060101@cn.fujitsu.com \
    --to=miaox@cn.fujitsu.com \
    --cc=bcrl@kvack.org \
    --cc=guz.fnst@cn.fujitsu.com \
    --cc=linux-aio@kvack.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /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.