All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alan D. Brunelle" <Alan.Brunelle@hp.com>
To: Vivek Goyal <vgoyal@redhat.com>
Cc: linux-kernel@vger.kernel.org, jens.axboe@oracle.com,
	nauman@google.com, dpshah@google.com, lizf@cn.fujitsu.com,
	ryov@valinux.co.jp, fernando@oss.ntt.co.jp,
	s-uchida@ap.jp.nec.com, taka@valinux.co.jp,
	guijianfeng@cn.fujitsu.com, jmoyer@redhat.com,
	balbir@linux.vnet.ibm.com, righi.andrea@gmail.com,
	m-ikeda@ds.jp.nec.com, akpm@linux-foundation.org,
	riel@redhat.com, kamezawa.hiroyu@jp.fujitsu.com,
	czoccolo@gmail.com
Subject: Re: [PATCH 08/16] blkio: Dynamic cfq group creation based on cgroup tasks belongs to
Date: Tue, 17 Nov 2009 13:07:51 -0500	[thread overview]
Message-ID: <1258481271.6084.294.camel@cail> (raw)
In-Reply-To: <1258134015-21632-9-git-send-email-vgoyal@redhat.com>

On Fri, 2009-11-13 at 12:40 -0500, Vivek Goyal wrote:
> o Determine the cgroup IO submitting task belongs to and create the cfq
>   group if it does not exist already.
> 
> o Also link cfqq and associated cfq group.
> 
> o Currently all async IO is mapped to root group.
> 
> Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
> ---
>  block/cfq-iosched.c |  113 ++++++++++++++++++++++++++++++++++++++++++++++-----
>  1 files changed, 102 insertions(+), 11 deletions(-)
> 
> diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
> index 4c05d45..9653caf 100644
> --- a/block/cfq-iosched.c
> +++ b/block/cfq-iosched.c
> @@ -188,6 +188,10 @@ struct cfq_group {
>  	unsigned long saved_workload_slice;
>  	enum wl_type_t saved_workload;
>  	enum wl_prio_t saved_serving_prio;
> +	struct blkio_group blkg;
> +#ifdef CONFIG_CFQ_GROUP_IOSCHED
> +	struct hlist_node cfqd_node;
> +#endif
>  };
>  
>  /*
> @@ -267,8 +271,13 @@ struct cfq_data {
>  	struct cfq_queue oom_cfqq;
>  
>  	unsigned long last_end_sync_rq;
> +
> +	/* List of cfq groups being managed on this device*/
> +	struct hlist_head cfqg_list;
>  };
>  
> +static struct cfq_group *cfq_get_next_cfqg(struct cfq_data *cfqd);
> +
>  static struct cfq_rb_root *service_tree_for(struct cfq_group *cfqg,
>  					    enum wl_prio_t prio,
>  					    enum wl_type_t type,
> @@ -858,6 +867,91 @@ static void cfq_group_served(struct cfq_data *cfqd, struct cfq_group *cfqg,
>  		cfqg->saved_workload_slice = 0;
>  }
>  
> +#ifdef CONFIG_CFQ_GROUP_IOSCHED
> +static inline struct cfq_group *cfqg_of_blkg(struct blkio_group *blkg)
> +{
> +	if (blkg)
> +		return container_of(blkg, struct cfq_group, blkg);
> +	return NULL;
> +}
> +
> +static struct cfq_group *
> +cfq_find_alloc_cfqg(struct cfq_data *cfqd, struct cgroup *cgroup, int create)
> +{
> +	struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgroup);
> +	struct cfq_group *cfqg = NULL;
> +	void *key = cfqd;
> +	int i, j;
> +
> +	/* Do we need to take this reference */
> +	if (!css_tryget(&blkcg->css))
> +		return NULL;;
> +
> +	cfqg = cfqg_of_blkg(blkiocg_lookup_group(blkcg, key));
> +	if (cfqg || !create)
> +		goto done;
> +
> +	cfqg = kzalloc_node(sizeof(*cfqg), GFP_ATOMIC, cfqd->queue->node);
> +	if (!cfqg)
> +		goto done;
> +
> +	cfqg->weight = blkcg->weight;
> +
> +	for (i = 0; i < 2; ++i)
> +		for (j = 0; j < 3; ++j)
> +			cfqg->service_trees[i][j] = CFQ_RB_ROOT;
> +	cfqg->service_tree_idle = CFQ_RB_ROOT;
> +	RB_CLEAR_NODE(&cfqg->rb_node);
> +
> +	/* Add group onto cgroup list */
> +	blkiocg_add_blkio_group(blkcg, &cfqg->blkg, (void *)cfqd);
> +
> +	/* Add group on cfqd list */
> +	hlist_add_head(&cfqg->cfqd_node, &cfqd->cfqg_list);
> +
> +done:
> +	css_put(&blkcg->css);
> +	return cfqg;
> +}
> +
> +/*
> + * Search for the cfq group current task belongs to. If create = 1, then also
> + * create the cfq group if it does not exist. request_queue lock must be held.

You might want to also note that if the creation fails, the root group
is used.


  reply	other threads:[~2009-11-17 18:08 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-13 17:39 [RFC] Block IO Controller V3 Vivek Goyal
2009-11-13 17:40 ` [PATCH 01/16] blkio: Introduce the notion of cfq groups Vivek Goyal
2009-11-13 17:40 ` [PATCH 02/16] blkio: Keep queue on service tree until we expire it Vivek Goyal
2009-11-17 18:07   ` Alan D. Brunelle
2009-11-13 17:40 ` [PATCH 03/16] blkio: Introduce the root service tree for cfq groups Vivek Goyal
2009-11-13 17:40 ` [PATCH 04/16] blkio: Implement per cfq group latency target and busy queue avg Vivek Goyal
2009-11-16 13:05   ` Vivek Goyal
2009-11-13 17:40 ` [PATCH 05/16] blkio: Introduce blkio controller cgroup interface Vivek Goyal
2009-11-13 17:40 ` [PATCH 06/16] blkio: Introduce per cfq group weights and vdisktime calculations Vivek Goyal
2009-11-17 18:07   ` Alan D. Brunelle
2009-11-13 17:40 ` [PATCH 07/16] blkio: Group time used accounting and workload context save restore Vivek Goyal
2009-11-13 17:40 ` [PATCH 08/16] blkio: Dynamic cfq group creation based on cgroup tasks belongs to Vivek Goyal
2009-11-17 18:07   ` Alan D. Brunelle [this message]
2009-11-13 17:40 ` [PATCH 09/16] blkio: Take care of cgroup deletion and cfq group reference counting Vivek Goyal
2009-11-13 17:40 ` [PATCH 10/16] blkio: Some debugging aids for CFQ Vivek Goyal
2009-11-13 17:40 ` [PATCH 11/16] blkio: Export disk time and sectors used by a group to user space Vivek Goyal
2009-11-13 17:40 ` [PATCH 12/16] blkio: Provide some isolation between groups Vivek Goyal
2009-11-13 17:40 ` [PATCH 13/16] blkio: Drop the reference to queue once the task changes cgroup Vivek Goyal
2009-11-13 17:40 ` [PATCH 14/16] blkio: Propagate cgroup weight updation to cfq groups Vivek Goyal
2009-11-13 17:40 ` [PATCH 15/16] blkio: Idle on a group for some time on rotational media Vivek Goyal
2009-11-13 17:40 ` [PATCH 16/16] blkio: Documentation Vivek Goyal
2009-11-17 18:07   ` Alan D. Brunelle
2009-11-30  7:29 ` [RFC] Block IO Controller V3 Gui Jianfeng
2009-11-30 17:13   ` Vivek Goyal
2009-12-01  2:59     ` Gui Jianfeng

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=1258481271.6084.294.camel@cail \
    --to=alan.brunelle@hp.com \
    --cc=akpm@linux-foundation.org \
    --cc=balbir@linux.vnet.ibm.com \
    --cc=czoccolo@gmail.com \
    --cc=dpshah@google.com \
    --cc=fernando@oss.ntt.co.jp \
    --cc=guijianfeng@cn.fujitsu.com \
    --cc=jens.axboe@oracle.com \
    --cc=jmoyer@redhat.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lizf@cn.fujitsu.com \
    --cc=m-ikeda@ds.jp.nec.com \
    --cc=nauman@google.com \
    --cc=riel@redhat.com \
    --cc=righi.andrea@gmail.com \
    --cc=ryov@valinux.co.jp \
    --cc=s-uchida@ap.jp.nec.com \
    --cc=taka@valinux.co.jp \
    --cc=vgoyal@redhat.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.