From: Pavel Emelyanov <xemul-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
To: KAMEZAWA Hiroyuki
<kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
Cc: "containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org"
<containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org>,
"yamamoto-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org"
<yamamoto-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org>,
menage-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
"balbir-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org"
<balbir-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
Subject: Re: [RFC][ only for review ] memory controller bacground reclaim [4/5] high/low watermark for memory controller
Date: Wed, 28 Nov 2007 14:20:33 +0300 [thread overview]
Message-ID: <474D4F01.4070705@openvz.org> (raw)
In-Reply-To: <20071128175607.37df2187.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
KAMEZAWA Hiroyuki wrote:
> High Low watermark for page reclaiming in memory cgroup(1)
>
> High-Low value here is implemented for support background reclaim.
>
> - If USAGE is bigger than high watermark, background reclaim starts.
> - If USAGE is lower than low watermark, background reclaim stops.
>
> Each value is represented in bytes.
> (Not configurable now, but can be easily.)
> The routine which reclaim is in the next patch. This patch just adds
> high/low watermark value.
>
> Changes from YAMAMOTO-san's version
> - I like automatic adjustment of high/low watermark.
> So, I added a code to modify high/low watermark every time the limit
> changes. A user can custorimize it by hand later.
> (I think 93%/97% is not so bad value. need investigation.)
>
> TODO:
> - update documentation.
>
> Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
>
> mm/memcontrol.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++------
> 1 file changed, 57 insertions(+), 6 deletions(-)
>
> Index: linux-2.6.24-rc3-mm1/mm/memcontrol.c
> ===================================================================
> --- linux-2.6.24-rc3-mm1.orig/mm/memcontrol.c 2007-11-28 16:30:44.000000000 +0900
> +++ linux-2.6.24-rc3-mm1/mm/memcontrol.c 2007-11-28 16:44:57.000000000 +0900
> @@ -108,16 +108,12 @@
> struct mem_cgroup_per_node *nodeinfo[MAX_NUMNODES];
> };
>
> +
> /*
> * The memory controller data structure. The memory controller controls both
> * page cache and RSS per cgroup. We would eventually like to provide
> * statistics based on the statistics developed by Rik Van Riel for clock-pro,
> * to help the administrator determine what knobs to tune.
> - *
> - * TODO: Add a water mark for the memory controller. Reclaim will begin when
> - * we hit the water mark. May be even add a low water mark, such that
> - * no reclaim occurs from a cgroup at it's low water mark, this is
> - * a feature that will be implemented much later in the future.
> */
> struct mem_cgroup {
> struct cgroup_subsys_state css;
> @@ -162,6 +158,15 @@
> #define PAGE_CGROUP_FLAG_CACHE (0x1) /* charged as cache */
> #define PAGE_CGROUP_FLAG_ACTIVE (0x2) /* page is active in this cgroup */
>
> +/*
> + * Default value for high-low watermark for start/stop background reclaim.
> + * represented in percent here. can be customized by user later.
> + * This is applied always limit change.
> + */
> +#define DEFAULT_WATERMARK_PERCENT_LOW (93ULL)
> +#define DEFAULT_WATERMARK_PERCENT_HIGH (97ULL)
> +
> +
> static inline int page_cgroup_nid(struct page_cgroup *pc)
> {
> return page_to_nid(pc->page);
> @@ -926,6 +931,29 @@
> return 0;
> }
>
> +static void mem_cgroup_init_watermark(struct cgroup *cont)
> +{
> + struct mem_cgroup *mem;
> + unsigned long long val, high, low;
> + unsigned long flags;
> +
> + mem = mem_cgroup_from_cont(cont);
> + spin_lock_irqsave(&mem->res.lock, flags);
> + val = res_counter_get(&mem->res, RES_LIMIT);
> + if (val == (unsigned long long) LLONG_MAX) {
> + low = (unsigned long long) LLONG_MAX;
> + high = (unsigned long long) LLONG_MAX;
> + } else {
> + low = val * DEFAULT_WATERMARK_PERCENT_LOW / 100ULL;
> + high = val * DEFAULT_WATERMARK_PERCENT_HIGH / 100ULL;
> + }
> + res_counter_set(&mem->res, RES_LOW_WATERMARK, low);
> + res_counter_set(&mem->res, RES_HIGH_WATERMARK, high);
> + spin_unlock_irqrestore(&mem->res.lock, flags);
> + return;
> +}
> +
> +
> static ssize_t mem_cgroup_read(struct cgroup *cont,
> struct cftype *cft, struct file *file,
> char __user *userbuf, size_t nbytes, loff_t *ppos)
> @@ -944,6 +972,17 @@
> mem_cgroup_write_strategy);
> }
>
> +static ssize_t mem_cgroup_write_limit(struct cgroup *cont, struct cftype *cft,
> + struct file *file, const char __user *userbuf,
> + size_t nbytes, loff_t *ppos)
> +{
> + ssize_t ret;
> + ret = mem_cgroup_write(cont, cft, file, userbuf, nbytes, ppos);
> + if (ret > 0)
> + mem_cgroup_init_watermark(cont);
No, please, no! I'd be very disappointed if I tune high and low watermarks
carefully and then they are silently re-set after I tune the limit. Better
(see my comment to patch #3) return -EINVAL in case I try to set limit
below hwmark. Please :)
> + return ret;
> +}
> +
> static ssize_t mem_control_type_write(struct cgroup *cont,
> struct cftype *cft, struct file *file,
> const char __user *userbuf,
> @@ -1088,7 +1127,7 @@
> {
> .name = "limit_in_bytes",
> .private = RES_LIMIT,
> - .write = mem_cgroup_write,
> + .write = mem_cgroup_write_limit,
> .read = mem_cgroup_read,
> },
> {
> @@ -1102,6 +1141,18 @@
> .read = mem_control_type_read,
> },
> {
> + .name = "low_watermark_in_bytes",
> + .private = RES_LOW_WATERMARK,
> + .write = mem_cgroup_write,
> + .read = mem_cgroup_read,
> + },
> + {
> + .name = "high_watermark_in_bytes",
> + .private = RES_HIGH_WATERMARK,
> + .write = mem_cgroup_write,
> + .read = mem_cgroup_read,
> + },
> + {
> .name = "force_empty",
> .write = mem_force_empty_write,
> .read = mem_force_empty_read,
>
>
next prev parent reply other threads:[~2007-11-28 11:20 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-28 8:49 [RFC][ only for review ] memory controller bacground reclaim [0/5] KAMEZAWA Hiroyuki
[not found] ` <20071128174923.1f54f53f.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2007-11-28 8:51 ` [RFC][ only for review ] memory controller bacground reclaim [1/5] spinlock fix in res_counter modification KAMEZAWA Hiroyuki
[not found] ` <20071128175135.c42adecc.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2007-11-28 11:08 ` Pavel Emelyanov
[not found] ` <474D4C2F.8020701-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2007-11-29 1:14 ` KAMEZAWA Hiroyuki
2007-11-28 8:52 ` [RFC][ only for review ] memory controller bacground reclaim [2/5] set/get ops for res_counter KAMEZAWA Hiroyuki
[not found] ` <20071128175239.e20ec09d.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2007-11-28 11:09 ` Pavel Emelyanov
[not found] ` <474D4C66.2080303-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2007-11-29 1:16 ` KAMEZAWA Hiroyuki
2007-11-28 8:54 ` [RFC][ only for review ] memory controller bacground reclaim [3/5] high/low watermark support in res_counter KAMEZAWA Hiroyuki
[not found] ` <20071128175408.1ee479f3.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2007-11-28 11:12 ` Pavel Emelyanov
[not found] ` <474D4D35.9060603-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2007-11-29 1:18 ` KAMEZAWA Hiroyuki
2007-11-29 2:56 ` YAMAMOTO Takashi
[not found] ` <20071129025609.0B7111CFE7C-Pcsii4f/SVk@public.gmane.org>
2007-11-29 3:24 ` KAMEZAWA Hiroyuki
[not found] ` <20071129122402.101c5fbc.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2007-11-29 3:36 ` YAMAMOTO Takashi
2007-11-28 8:56 ` [RFC][ only for review ] memory controller bacground reclaim [4/5] high/low watermark for memory controller KAMEZAWA Hiroyuki
[not found] ` <20071128175607.37df2187.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2007-11-28 11:20 ` Pavel Emelyanov [this message]
[not found] ` <474D4F01.4070705-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2007-11-29 1:27 ` KAMEZAWA Hiroyuki
2007-11-28 12:20 ` Pavel Emelyanov
[not found] ` <474D5D1A.4070409-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2007-11-29 1:20 ` KAMEZAWA Hiroyuki
[not found] ` <20071129102044.8087386c.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2007-11-29 19:55 ` Oren Laadan
[not found] ` <474F194C.1000401-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2007-11-30 0:26 ` KAMEZAWA Hiroyuki
2007-12-01 7:09 ` Paul Menage
[not found] ` <6599ad830711302309p3a68828fjec6793bc9d854a1-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2007-12-01 10:45 ` Balbir Singh
[not found] ` <47513B50.8090003-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2007-12-01 16:55 ` Paul Menage
[not found] ` <6599ad830712010855j7967ddeau1a558474de4eea19-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2007-12-01 17:16 ` Balbir Singh
2007-11-28 8:57 ` [RFC][ only for review ] memory controller bacground reclaim [5/5] KAMEZAWA Hiroyuki
[not found] ` <20071128175713.4e9b8fff.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2007-11-28 11:06 ` Pavel Emelyanov
[not found] ` <474D4BAE.7090407-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2007-11-29 1:26 ` KAMEZAWA Hiroyuki
2007-12-01 7:16 ` Paul Menage
2007-11-29 11:53 ` [RFC][ only for review ] memory controller bacground reclaim [0/5] (Does anyone have an idea about throttling ?) KAMEZAWA Hiroyuki
[not found] ` <20071129205324.f9e7ab4e.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2007-11-29 14:42 ` Balbir Singh
[not found] ` <474ECFEB.9090202-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2007-11-30 0:29 ` KAMEZAWA Hiroyuki
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=474D4F01.4070705@openvz.org \
--to=xemul-gefaqzzx7r8dnm+yrofe0a@public.gmane.org \
--cc=balbir-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org \
--cc=containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org \
--cc=kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org \
--cc=menage-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=yamamoto-jCdQPDEk3idL9jVzuh4AOg@public.gmane.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.