All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vivek Goyal <vgoyal@redhat.com>
To: Andrea Righi <arighi@develer.com>
Cc: Balbir Singh <balbir@linux.vnet.ibm.com>,
	Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Greg Thelen <gthelen@google.com>,
	Wu Fengguang <fengguang.wu@intel.com>,
	Gui Jianfeng <guijianfeng@cn.fujitsu.com>,
	Ryo Tsuruta <ryov@valinux.co.jp>,
	Hirokazu Takahashi <taka@valinux.co.jp>,
	Jens Axboe <axboe@kernel.dk>,
	Andrew Morton <akpm@linux-foundation.org>,
	containers@lists.linux-foundation.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4/5] blk-throttle: track buffered and anonymous pages
Date: Tue, 22 Feb 2011 19:07:19 -0500	[thread overview]
Message-ID: <20110223000718.GN28269@redhat.com> (raw)
In-Reply-To: <20110222230534.GD23723@linux.develer.com>

On Wed, Feb 23, 2011 at 12:05:34AM +0100, Andrea Righi wrote:
> On Tue, Feb 22, 2011 at 04:00:30PM -0500, Vivek Goyal wrote:
> > On Tue, Feb 22, 2011 at 06:12:55PM +0100, Andrea Righi wrote:
> > > Add the tracking of buffered (writeback) and anonymous pages.
> > > 
> > > Dirty pages in the page cache can be processed asynchronously by the
> > > per-bdi flusher kernel threads or by any other thread in the system,
> > > according to the writeback policy.
> > > 
> > > For this reason the real writes to the underlying block devices may
> > > occur in a different IO context respect to the task that originally
> > > generated the dirty pages involved in the IO operation. This makes
> > > the tracking and throttling of writeback IO more complicate respect to
> > > the synchronous IO from the blkio controller's point of view.
> > > 
> > > The idea is to save the cgroup owner of each anonymous page and dirty
> > > page in page cache. A page is associated to a cgroup the first time it
> > > is dirtied in memory (for file cache pages) or when it is set as
> > > swap-backed (for anonymous pages). This information is stored using the
> > > page_cgroup functionality.
> > > 
> > > Then, at the block layer, it is possible to retrieve the throttle group
> > > looking at the bio_page(bio). If the page was not explicitly associated
> > > to any cgroup the IO operation is charged to the current task/cgroup, as
> > > it was done by the previous implementation.
> > > 
> > > Signed-off-by: Andrea Righi <arighi@develer.com>
> > > ---
> > >  block/blk-throttle.c   |   87 +++++++++++++++++++++++++++++++++++++++++++++++-
> > >  include/linux/blkdev.h |   26 ++++++++++++++-
> > >  2 files changed, 111 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/block/blk-throttle.c b/block/blk-throttle.c
> > > index 9ad3d1e..a50ee04 100644
> > > --- a/block/blk-throttle.c
> > > +++ b/block/blk-throttle.c
> > > @@ -8,6 +8,10 @@
> > >  #include <linux/slab.h>
> > >  #include <linux/blkdev.h>
> > >  #include <linux/bio.h>
> > > +#include <linux/memcontrol.h>
> > > +#include <linux/mm_inline.h>
> > > +#include <linux/pagemap.h>
> > > +#include <linux/page_cgroup.h>
> > >  #include <linux/blktrace_api.h>
> > >  #include <linux/blk-cgroup.h>
> > >  
> > > @@ -221,6 +225,85 @@ done:
> > >  	return tg;
> > >  }
> > >  
> > > +static inline bool is_kernel_io(void)
> > > +{
> > > +	return !!(current->flags & (PF_KTHREAD | PF_KSWAPD | PF_MEMALLOC));
> > > +}
> > > +
> > > +static int throtl_set_page_owner(struct page *page, struct mm_struct *mm)
> > > +{
> > > +	struct blkio_cgroup *blkcg;
> > > +	unsigned short id = 0;
> > > +
> > > +	if (blkio_cgroup_disabled())
> > > +		return 0;
> > > +	if (!mm)
> > > +		goto out;
> > > +	rcu_read_lock();
> > > +	blkcg = task_to_blkio_cgroup(rcu_dereference(mm->owner));
> > > +	if (likely(blkcg))
> > > +		id = css_id(&blkcg->css);
> > > +	rcu_read_unlock();
> > > +out:
> > > +	return page_cgroup_set_owner(page, id);
> > > +}
> > > +
> > > +int blk_throtl_set_anonpage_owner(struct page *page, struct mm_struct *mm)
> > > +{
> > > +	return throtl_set_page_owner(page, mm);
> > > +}
> > > +EXPORT_SYMBOL(blk_throtl_set_anonpage_owner);
> > > +
> > > +int blk_throtl_set_filepage_owner(struct page *page, struct mm_struct *mm)
> > > +{
> > > +	if (is_kernel_io() || !page_is_file_cache(page))
> > > +		return 0;
> > > +	return throtl_set_page_owner(page, mm);
> > > +}
> > > +EXPORT_SYMBOL(blk_throtl_set_filepage_owner);
> > 
> > Why are we exporting all these symbols?
> 
> Right. Probably a single one is enough:
> 
>  int blk_throtl_set_page_owner(struct page *page,
> 			struct mm_struct *mm, bool anon);

Who is going to use this single export? Which module?

Thanks
Vivek

WARNING: multiple messages have this Message-ID (diff)
From: Vivek Goyal <vgoyal@redhat.com>
To: Andrea Righi <arighi@develer.com>
Cc: Balbir Singh <balbir@linux.vnet.ibm.com>,
	Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Greg Thelen <gthelen@google.com>,
	Wu Fengguang <fengguang.wu@intel.com>,
	Gui Jianfeng <guijianfeng@cn.fujitsu.com>,
	Ryo Tsuruta <ryov@valinux.co.jp>,
	Hirokazu Takahashi <taka@valinux.co.jp>,
	Jens Axboe <axboe@kernel.dk>,
	Andrew Morton <akpm@linux-foundation.org>,
	containers@lists.linux-foundation.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4/5] blk-throttle: track buffered and anonymous pages
Date: Tue, 22 Feb 2011 19:07:19 -0500	[thread overview]
Message-ID: <20110223000718.GN28269@redhat.com> (raw)
In-Reply-To: <20110222230534.GD23723@linux.develer.com>

On Wed, Feb 23, 2011 at 12:05:34AM +0100, Andrea Righi wrote:
> On Tue, Feb 22, 2011 at 04:00:30PM -0500, Vivek Goyal wrote:
> > On Tue, Feb 22, 2011 at 06:12:55PM +0100, Andrea Righi wrote:
> > > Add the tracking of buffered (writeback) and anonymous pages.
> > > 
> > > Dirty pages in the page cache can be processed asynchronously by the
> > > per-bdi flusher kernel threads or by any other thread in the system,
> > > according to the writeback policy.
> > > 
> > > For this reason the real writes to the underlying block devices may
> > > occur in a different IO context respect to the task that originally
> > > generated the dirty pages involved in the IO operation. This makes
> > > the tracking and throttling of writeback IO more complicate respect to
> > > the synchronous IO from the blkio controller's point of view.
> > > 
> > > The idea is to save the cgroup owner of each anonymous page and dirty
> > > page in page cache. A page is associated to a cgroup the first time it
> > > is dirtied in memory (for file cache pages) or when it is set as
> > > swap-backed (for anonymous pages). This information is stored using the
> > > page_cgroup functionality.
> > > 
> > > Then, at the block layer, it is possible to retrieve the throttle group
> > > looking at the bio_page(bio). If the page was not explicitly associated
> > > to any cgroup the IO operation is charged to the current task/cgroup, as
> > > it was done by the previous implementation.
> > > 
> > > Signed-off-by: Andrea Righi <arighi@develer.com>
> > > ---
> > >  block/blk-throttle.c   |   87 +++++++++++++++++++++++++++++++++++++++++++++++-
> > >  include/linux/blkdev.h |   26 ++++++++++++++-
> > >  2 files changed, 111 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/block/blk-throttle.c b/block/blk-throttle.c
> > > index 9ad3d1e..a50ee04 100644
> > > --- a/block/blk-throttle.c
> > > +++ b/block/blk-throttle.c
> > > @@ -8,6 +8,10 @@
> > >  #include <linux/slab.h>
> > >  #include <linux/blkdev.h>
> > >  #include <linux/bio.h>
> > > +#include <linux/memcontrol.h>
> > > +#include <linux/mm_inline.h>
> > > +#include <linux/pagemap.h>
> > > +#include <linux/page_cgroup.h>
> > >  #include <linux/blktrace_api.h>
> > >  #include <linux/blk-cgroup.h>
> > >  
> > > @@ -221,6 +225,85 @@ done:
> > >  	return tg;
> > >  }
> > >  
> > > +static inline bool is_kernel_io(void)
> > > +{
> > > +	return !!(current->flags & (PF_KTHREAD | PF_KSWAPD | PF_MEMALLOC));
> > > +}
> > > +
> > > +static int throtl_set_page_owner(struct page *page, struct mm_struct *mm)
> > > +{
> > > +	struct blkio_cgroup *blkcg;
> > > +	unsigned short id = 0;
> > > +
> > > +	if (blkio_cgroup_disabled())
> > > +		return 0;
> > > +	if (!mm)
> > > +		goto out;
> > > +	rcu_read_lock();
> > > +	blkcg = task_to_blkio_cgroup(rcu_dereference(mm->owner));
> > > +	if (likely(blkcg))
> > > +		id = css_id(&blkcg->css);
> > > +	rcu_read_unlock();
> > > +out:
> > > +	return page_cgroup_set_owner(page, id);
> > > +}
> > > +
> > > +int blk_throtl_set_anonpage_owner(struct page *page, struct mm_struct *mm)
> > > +{
> > > +	return throtl_set_page_owner(page, mm);
> > > +}
> > > +EXPORT_SYMBOL(blk_throtl_set_anonpage_owner);
> > > +
> > > +int blk_throtl_set_filepage_owner(struct page *page, struct mm_struct *mm)
> > > +{
> > > +	if (is_kernel_io() || !page_is_file_cache(page))
> > > +		return 0;
> > > +	return throtl_set_page_owner(page, mm);
> > > +}
> > > +EXPORT_SYMBOL(blk_throtl_set_filepage_owner);
> > 
> > Why are we exporting all these symbols?
> 
> Right. Probably a single one is enough:
> 
>  int blk_throtl_set_page_owner(struct page *page,
> 			struct mm_struct *mm, bool anon);

Who is going to use this single export? Which module?

Thanks
Vivek

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2011-02-23  0:08 UTC|newest]

Thread overview: 120+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-22 17:12 [PATCH 0/5] blk-throttle: writeback and swap IO control Andrea Righi
2011-02-22 17:12 ` Andrea Righi
2011-02-22 17:12 ` [PATCH 1/5] blk-cgroup: move blk-cgroup.h in include/linux/blk-cgroup.h Andrea Righi
2011-02-22 17:12   ` Andrea Righi
2011-02-22 17:12 ` [PATCH 2/5] blk-cgroup: introduce task_to_blkio_cgroup() Andrea Righi
2011-02-22 17:12   ` Andrea Righi
2011-02-22 17:12 ` [PATCH 3/5] page_cgroup: make page tracking available for blkio Andrea Righi
2011-02-22 17:12   ` Andrea Righi
2011-02-22 20:01   ` Jonathan Corbet
2011-02-22 20:01     ` Jonathan Corbet
2011-02-22 21:57     ` Vivek Goyal
2011-02-22 21:57       ` Vivek Goyal
2011-02-22 23:01     ` Andrea Righi
2011-02-22 23:01       ` Andrea Righi
2011-02-22 23:06       ` Vivek Goyal
2011-02-22 23:06         ` Vivek Goyal
2011-02-22 23:21         ` Jonathan Corbet
2011-02-22 23:21           ` Jonathan Corbet
     [not found]         ` <20110222230630.GL28269-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-02-22 23:21           ` Jonathan Corbet
2011-02-22 23:37           ` Andrea Righi
2011-02-22 23:37         ` Andrea Righi
2011-02-22 23:37           ` Andrea Righi
2011-02-23  4:49           ` KAMEZAWA Hiroyuki
2011-02-23  4:49             ` KAMEZAWA Hiroyuki
     [not found]             ` <20110223134910.abbdc931.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2011-02-23  8:59               ` Andrea Righi
2011-02-23  8:59             ` Andrea Righi
2011-02-23  8:59               ` Andrea Righi
2011-02-23 23:58               ` KAMEZAWA Hiroyuki
2011-02-23 23:58                 ` KAMEZAWA Hiroyuki
     [not found]                 ` <20110224085805.14766e93.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2011-02-25  0:48                   ` Andrea Righi
2011-02-25  0:48                 ` Andrea Righi
2011-02-25  0:48                   ` Andrea Righi
     [not found]               ` <20110223085911.GC2174-fxUVXftIFDlZdMzt4l2sLQC/G2K4zDHf@public.gmane.org>
2011-02-23 23:58                 ` KAMEZAWA Hiroyuki
     [not found]           ` <20110222233718.GF23723-fxUVXftIFDlZdMzt4l2sLQC/G2K4zDHf@public.gmane.org>
2011-02-23  4:49             ` KAMEZAWA Hiroyuki
2011-02-22 23:27       ` Jonathan Corbet
2011-02-22 23:27         ` Jonathan Corbet
2011-02-22 23:48         ` Andrea Righi
2011-02-22 23:48           ` Andrea Righi
     [not found]         ` <20110222162729.054fe596-vw3g6Xz/EtPk1uMJSBkQmQ@public.gmane.org>
2011-02-22 23:48           ` Andrea Righi
     [not found]       ` <20110222230146.GB23723-fxUVXftIFDlZdMzt4l2sLQC/G2K4zDHf@public.gmane.org>
2011-02-22 23:06         ` Vivek Goyal
2011-02-22 23:27         ` Jonathan Corbet
     [not found]     ` <20110222130145.37cb151e-vw3g6Xz/EtPk1uMJSBkQmQ@public.gmane.org>
2011-02-22 21:57       ` Vivek Goyal
2011-02-22 23:01       ` Andrea Righi
     [not found]   ` <1298394776-9957-4-git-send-email-arighi-vWjgImWzx8FBDgjK7y7TUQ@public.gmane.org>
2011-02-22 20:01     ` Jonathan Corbet
2011-02-22 21:22     ` Vivek Goyal
2011-02-22 21:22   ` Vivek Goyal
2011-02-22 21:22     ` Vivek Goyal
     [not found]     ` <20110222212253.GJ28269-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-02-22 23:08       ` Andrea Righi
2011-02-22 23:08     ` Andrea Righi
2011-02-22 23:08       ` Andrea Righi
2011-02-22 17:12 ` [PATCH 4/5] blk-throttle: track buffered and anonymous pages Andrea Righi
2011-02-22 17:12   ` Andrea Righi
2011-02-22 18:42   ` Chad Talbott
2011-02-22 18:42     ` Chad Talbott
2011-02-22 19:12     ` Andrea Righi
2011-02-22 19:12       ` Andrea Righi
2011-02-22 20:49     ` Vivek Goyal
2011-02-22 20:49       ` Vivek Goyal
     [not found]       ` <20110222204928.GH28269-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-02-22 23:03         ` Andrea Righi
2011-02-22 23:03       ` Andrea Righi
2011-02-22 23:03         ` Andrea Righi
     [not found]     ` <AANLkTinD2ZH3hw_iqVpvMjMRbUkXMBgttjd2NevvYq9x-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-02-22 19:12       ` Andrea Righi
2011-02-22 20:49       ` Vivek Goyal
     [not found]   ` <1298394776-9957-5-git-send-email-arighi-vWjgImWzx8FBDgjK7y7TUQ@public.gmane.org>
2011-02-22 18:42     ` Chad Talbott
2011-02-22 21:00     ` Vivek Goyal
2011-02-22 21:00   ` Vivek Goyal
2011-02-22 21:00     ` Vivek Goyal
2011-02-22 23:05     ` Andrea Righi
2011-02-22 23:05       ` Andrea Righi
2011-02-23  0:07       ` Vivek Goyal [this message]
2011-02-23  0:07         ` Vivek Goyal
     [not found]         ` <20110223000718.GN28269-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-02-23  8:37           ` Andrea Righi
2011-02-23  8:37         ` Andrea Righi
2011-02-23  8:37           ` Andrea Righi
     [not found]       ` <20110222230534.GD23723-fxUVXftIFDlZdMzt4l2sLQC/G2K4zDHf@public.gmane.org>
2011-02-23  0:07         ` Vivek Goyal
     [not found]     ` <20110222210030.GI28269-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-02-22 23:05       ` Andrea Righi
2011-02-22 17:12 ` [PATCH 5/5] blk-throttle: buffered and anonymous page tracking instrumentation Andrea Righi
2011-02-22 17:12   ` Andrea Righi
     [not found] ` <1298394776-9957-1-git-send-email-arighi-vWjgImWzx8FBDgjK7y7TUQ@public.gmane.org>
2011-02-22 17:12   ` [PATCH 1/5] blk-cgroup: move blk-cgroup.h in include/linux/blk-cgroup.h Andrea Righi
2011-02-22 17:12   ` [PATCH 2/5] blk-cgroup: introduce task_to_blkio_cgroup() Andrea Righi
2011-02-22 17:12   ` [PATCH 3/5] page_cgroup: make page tracking available for blkio Andrea Righi
2011-02-22 17:12   ` [PATCH 4/5] blk-throttle: track buffered and anonymous pages Andrea Righi
2011-02-22 17:12   ` [PATCH 5/5] blk-throttle: buffered and anonymous page tracking instrumentation Andrea Righi
2011-02-22 19:34   ` [PATCH 0/5] blk-throttle: writeback and swap IO control Vivek Goyal
2011-02-24  6:08   ` Balbir Singh
2011-02-22 19:34 ` Vivek Goyal
2011-02-22 19:34   ` Vivek Goyal
     [not found]   ` <20110222193403.GG28269-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-02-22 22:41     ` Andrea Righi
2011-02-22 22:41   ` Andrea Righi
2011-02-22 22:41     ` Andrea Righi
2011-02-23  0:03     ` Vivek Goyal
2011-02-23  0:03       ` Vivek Goyal
     [not found]       ` <20110223000358.GM28269-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-02-23  8:32         ` Andrea Righi
2011-02-23  8:32       ` Andrea Righi
2011-02-23  8:32         ` Andrea Righi
     [not found]         ` <20110223083206.GA2174-fxUVXftIFDlZdMzt4l2sLQC/G2K4zDHf@public.gmane.org>
2011-02-23 15:23           ` Vivek Goyal
2011-02-23 15:23         ` Vivek Goyal
2011-02-23 15:23           ` Vivek Goyal
2011-02-23 23:14           ` Andrea Righi
2011-02-23 23:14             ` Andrea Righi
2011-02-24  0:10             ` Vivek Goyal
2011-02-24  0:10               ` Vivek Goyal
2011-02-24  0:40               ` KAMEZAWA Hiroyuki
2011-02-24  0:40                 ` KAMEZAWA Hiroyuki
2011-02-24  2:01                 ` Greg Thelen
2011-02-24  2:01                   ` Greg Thelen
     [not found]                 ` <20110224094039.89c07bea.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2011-02-24  2:01                   ` Greg Thelen
2011-02-24 16:18                   ` Vivek Goyal
     [not found]                     ` <20110224161844.GD18494__23141.7772280567$1298564487$gmane$org-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-03-23 18:48                       ` Daniel Poelzleithner
2011-02-24 16:18                 ` Vivek Goyal
2011-02-24 16:18                   ` Vivek Goyal
     [not found]               ` <20110224001033.GF2526-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-02-24  0:40                 ` KAMEZAWA Hiroyuki
2011-02-25  0:54                 ` Andrea Righi
2011-02-25  0:54               ` Andrea Righi
2011-02-25  0:54                 ` Andrea Righi
     [not found]             ` <20110223231410.GB1744-fxUVXftIFDlZdMzt4l2sLQC/G2K4zDHf@public.gmane.org>
2011-02-24  0:10               ` Vivek Goyal
     [not found]           ` <20110223152354.GA2526-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-02-23 23:14             ` Andrea Righi
     [not found]     ` <20110222224141.GA23723-fxUVXftIFDlZdMzt4l2sLQC/G2K4zDHf@public.gmane.org>
2011-02-23  0:03       ` Vivek Goyal
2011-02-24  6:08 ` Balbir Singh
2011-02-24  6:08   ` Balbir Singh

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=20110223000718.GN28269@redhat.com \
    --to=vgoyal@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=arighi@develer.com \
    --cc=axboe@kernel.dk \
    --cc=balbir@linux.vnet.ibm.com \
    --cc=containers@lists.linux-foundation.org \
    --cc=fengguang.wu@intel.com \
    --cc=gthelen@google.com \
    --cc=guijianfeng@cn.fujitsu.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=nishimura@mxp.nes.nec.co.jp \
    --cc=ryov@valinux.co.jp \
    --cc=taka@valinux.co.jp \
    /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.