From: Vivek Goyal <vgoyal@redhat.com>
To: Tejun Heo <tj@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>, linux-kernel@vger.kernel.org
Subject: Re: [PATCH block/for-next 4/4] block: implement bio_associate_blkcg()
Date: Thu, 20 Nov 2014 16:15:06 -0500 [thread overview]
Message-ID: <20141120211506.GE11595@redhat.com> (raw)
In-Reply-To: <20141117211619.GG23126@htj.dyndns.org>
On Mon, Nov 17, 2014 at 04:16:19PM -0500, Tejun Heo wrote:
> Currently, a bio can only be associated with the io_context and blkcg
> of %current using bio_associate_current(). This is too restrictive
> for cgroup writeback support. Implement bio_associate_blkcg() which
> associates a bio with the specified blkcg.
>
> bio_associate_blkcg() leaves the io_context unassociated.
> bio_associate_current() is updated so that it considers a bio as
> already associated if it has a blkcg_css, instead of an io_context,
> associated with it.
>
> Signed-off-by: Tejun Heo <tj@kernel.org>
> Cc: Jens Axboe <axboe@kernel.dk>
> Cc: Vivek Goyal <vgoyal@redhat.com>
> ---
> block/bio.c | 24 +++++++++++++++++++++++-
> include/linux/bio.h | 3 +++
> 2 files changed, 26 insertions(+), 1 deletion(-)
>
> --- a/block/bio.c
> +++ b/block/bio.c
> @@ -1981,6 +1981,28 @@ struct bio_set *bioset_create_nobvec(uns
> EXPORT_SYMBOL(bioset_create_nobvec);
>
> #ifdef CONFIG_BLK_CGROUP
> +
> +/**
> + * bio_associate_blkcg - associate a bio with the specified blkcg
> + * @bio: target bio
> + * @blkcg_css: the css of the blkcg to associate
> + *
> + * Associate @bio with the blkcg specified by @blkcg_css. Block layer will
> + * treat @bio as if it were issued by a task which belongs to the blkcg.
> + *
> + * This function takes an extra reference of @blkcg_css which will be put
> + * when @bio is released. The caller must own @bio and is responsible for
> + * synchronizing calls to this function.
> + */
> +int bio_associate_blkcg(struct bio *bio, struct cgroup_subsys_state *blkcg_css)
> +{
> + if (unlikely(bio->bi_css))
> + return -EBUSY;
> + css_get(blkcg_css);
> + bio->bi_css = blkcg_css;
> + return 0;
> +}
> +
> /**
> * bio_associate_current - associate a bio with %current
> * @bio: target bio
> @@ -1998,7 +2020,7 @@ int bio_associate_current(struct bio *bi
> {
> struct io_context *ioc;
>
> - if (bio->bi_ioc)
> + if (bio->bi_css)
> return -EBUSY;
Hi Tejun,
Have a query. So if somebody calls bio_associate_blkcg(), that bio will
not have io context information. That means io context information of
submitter will be used in CFQ. That will also mean that if we select
differnt thread to IO of same cgroup or use a thread to submit IO of
different cgroup, check_blkcg_changed() will be true and we will
unnecessary drop sync queue despite the fact that IO we are submitting
now is async. And everytime a submitter submits IO for a different cgroup,
it will drop its existing sync queue. Sounds suboptimal.
I guess ideally io context of original writer who wrote data in page
cache should be used. But we probably don't have that information as
we might be planning to get block cgroup information from inode of
the file being written.
Not sure what can be done about this. May be a notion of per
block cgroup per device io context and always use that io context
when bio has cgroup info but not io context info.
Thanks
Vivek
next prev parent reply other threads:[~2014-11-20 21:15 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-17 21:13 [PATCH block/for-next 1/4] blkcg: move block/blk-cgroup.h to include/linux/blk-cgroup.h Tejun Heo
2014-11-17 21:13 ` [PATCH block/for-next 2/4] blkcg: add blkcg_root_css Tejun Heo
2014-11-17 21:15 ` [PATCH block/for-next 3/4] cgroup, block: implement task_get_css() and use it in bio_associate_current() Tejun Heo
2014-11-17 21:16 ` [PATCH block/for-next 4/4] block: implement bio_associate_blkcg() Tejun Heo
2014-11-20 21:15 ` Vivek Goyal [this message]
2015-01-06 23:12 ` Tejun Heo
2014-11-20 20:27 ` [PATCH block/for-next 3/4] cgroup, block: implement task_get_css() and use it in bio_associate_current() Vivek Goyal
2014-11-20 20:16 ` [PATCH block/for-next 2/4] blkcg: add blkcg_root_css Vivek Goyal
2015-01-06 22:37 ` Tejun Heo
2014-11-20 20:10 ` [PATCH block/for-next 1/4] blkcg: move block/blk-cgroup.h to include/linux/blk-cgroup.h Vivek Goyal
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=20141120211506.GE11595@redhat.com \
--to=vgoyal@redhat.com \
--cc=axboe@kernel.dk \
--cc=linux-kernel@vger.kernel.org \
--cc=tj@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox