From: Vivek Goyal <vgoyal@redhat.com>
To: Gui Jianfeng <guijianfeng@cn.fujitsu.com>
Cc: Jens Axboe <axboe@kernel.dk>,
linux kernel mailing list <linux-kernel@vger.kernel.org>,
Corrado Zoccolo <czoccolo@gmail.com>,
Chad Talbott <ctalbott@google.com>,
Nauman Rafique <nauman@google.com>,
Divyesh Shah <dpshah@google.com>,
jmoyer@redhat.com, Shaohua Li <shaohua.li@intel.com>
Subject: Re: [PATCH 5/6 v3] cfq-iosched: CFQ group hierarchical scheduling and use_hierarchy interface
Date: Mon, 24 Jan 2011 17:52:53 -0500 [thread overview]
Message-ID: <20110124225253.GF9420@redhat.com> (raw)
In-Reply-To: <4D185382.8080601@cn.fujitsu.com>
On Mon, Dec 27, 2010 at 04:51:14PM +0800, Gui Jianfeng wrote:
[..]
> -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)
> @@ -640,10 +646,19 @@ static inline unsigned cfq_group_get_avg_queues(struct cfq_data *cfqd,
> static inline unsigned
> cfq_group_slice(struct cfq_data *cfqd, struct cfq_group *cfqg)
> {
> - struct cfq_rb_root *st = &cfqd->grp_service_tree;
> struct cfq_entity *cfqe = &cfqg->cfqe;
> + struct cfq_rb_root *st = cfqe->service_tree;
> + int group_slice = cfq_target_latency;
> +
> + /* Calculate group slice in a hierarchical way */
> + do {
> + group_slice = group_slice * cfqe->weight / st->total_weight;
> + cfqe = cfqe->parent;
> + if (cfqe)
> + st = cfqe->service_tree;
> + } while (cfqe);
>
> - return cfq_target_latency * cfqe->weight / st->total_weight;
> + return group_slice;
> }
Gui, I think this is still not fully correct. In flat mode there was
only 1 service tree at top and all the groups were on that service tree
so st->total_weight worked fine.
But now with hierarchical mode, children group might be on one of the
sync-idle tree and there might be other queues on other service tree
in the parent group.
So we shall have to have a notion of total group weigt (and not just
service tree weight) to calculate this accurately I think.
Secondly, this logic does not take into account the ioprio or sync/async
to calculate the group share. I think for the time being we can keep
it simple and later look into it to refine it.
Also I want to have some integration/simplification of workload slice
a and cfqq slice calculation logic with group slice logic. I guess will take
that up later.
>
> static inline void
> @@ -666,7 +681,8 @@ cfq_set_prio_slice(struct cfq_data *cfqd, struct cfq_queue *cfqq)
> /* scale low_slice according to IO priority
> * and sync vs async */
> unsigned low_slice =
> - min(slice, base_low_slice * slice / sync_slice);
> + min(slice, base_low_slice * slice /
> + sync_slice);
Why extra line?
Thanks
Vivek
next prev parent reply other threads:[~2011-01-24 22:53 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4D180ECE.4000305@cn.fujitsu.com>
2010-12-27 8:50 ` [PATCH 1/6 v3] cfq-iosched: Introduce cfq_entity for CFQ queue Gui Jianfeng
2010-12-27 8:50 ` [PATCH 2/6 v3] cfq-iosched: Introduce cfq_entity for CFQ group Gui Jianfeng
2011-01-18 21:20 ` Vivek Goyal
2011-01-19 1:25 ` Gui Jianfeng
2011-01-23 2:15 ` Gui Jianfeng
2010-12-27 8:51 ` [PATCH 3/6 v3] cfq-iosched: Introduce vdisktime and io weight for CFQ queue Gui Jianfeng
2010-12-28 2:50 ` Shaohua Li
2010-12-28 3:59 ` Gui Jianfeng
2010-12-28 6:03 ` Shaohua Li
2010-12-28 6:59 ` Gui Jianfeng
2011-01-19 22:58 ` Vivek Goyal
2011-01-20 3:58 ` Gui Jianfeng
2011-01-20 11:09 ` Vivek Goyal
2011-01-24 4:45 ` Gui Jianfeng
2011-01-24 18:51 ` Vivek Goyal
2010-12-27 8:51 ` [PATCH 4/6 v3] cfq-iosched: Extract some common code of service tree handling for CFQ queue and CFQ group Gui Jianfeng
2010-12-27 8:51 ` [PATCH 5/6 v3] cfq-iosched: CFQ group hierarchical scheduling and use_hierarchy interface Gui Jianfeng
2011-01-24 22:52 ` Vivek Goyal [this message]
2010-12-27 8:51 ` [PATCH 6/6 v3] blkio-cgroup: Document for blkio.use_hierarchy interface Gui Jianfeng
2011-01-18 20:27 ` Vivek Goyal
2011-01-19 1:20 ` 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=20110124225253.GF9420@redhat.com \
--to=vgoyal@redhat.com \
--cc=axboe@kernel.dk \
--cc=ctalbott@google.com \
--cc=czoccolo@gmail.com \
--cc=dpshah@google.com \
--cc=guijianfeng@cn.fujitsu.com \
--cc=jmoyer@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nauman@google.com \
--cc=shaohua.li@intel.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.