Re: [PATCH V3 3/7] New APIs to adjust per-memcg wmarks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On Wed, Apr 13, 2011 at 1:30 AM, KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> wrote:
On Wed, 13 Apr 2011 00:03:03 -0700
Ying Han <yinghan@xxxxxxxxxx> wrote:

> Add wmark_ratio and reclaim_wmarks APIs per-memcg. The wmark_ratio
> adjusts the internal low/high wmark calculation and the reclaim_wmarks
> exports the current value of watermarks. By default, the wmark_ratio is
> set to 0 and the watermarks are equal to the hard_limit(limit_in_bytes).
>
> $ cat /dev/cgroup/A/memory.wmark_ratio
> 0
>
> $ cat /dev/cgroup/A/memory.limit_in_bytes
> 524288000
>
> $ echo 80 >/dev/cgroup/A/memory.wmark_ratio
>
> $ cat /dev/cgroup/A/memory.reclaim_wmarks
> low_wmark 393216000
> high_wmark 419430400
>

I think havig _ratio_ will finally leads us to a tragedy as dirty_ratio,
a complicated interface.

For memcg, I'd like to have only _bytes.

And, as I wrote in previous mail, how about setting _distance_ ?

  memory.low_wmark_distance_in_bytes .... # hard_limit - low_wmark.
  memory.high_wmark_distance_in_bytes ... # hard_limit - high_wmark.

Anwyay, percent is too big unit.

Replied to your comment on "Add per memcg reclaim watermarks". I have no problem to make the
wmark individual tunable. One thing to confirm before making the change is to have:


memory.low_wmark_distance_in_bytes .... # min(hard_limit, soft_limit) - low_wmark
memory.high_wmark_distance_in_bytes ... # min(hard_limit, soft_limit) - high_wmark.

And also, some checks on soft_limit are needed. If "soft_limit" == 0, use hard_limit

--Ying 
 
Thanks,
-Kame


> changelog v3..v2:
> 1. replace the "min_free_kbytes" api with "wmark_ratio". This is part of
> feedbacks
>
> Signed-off-by: Ying Han <yinghan@xxxxxxxxxx>
> ---
>  mm/memcontrol.c |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 49 insertions(+), 0 deletions(-)
>
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 664cdc5..36ae377 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -3983,6 +3983,31 @@ static int mem_cgroup_swappiness_write(struct cgroup *cgrp, struct cftype *cft,
>       return 0;
>  }
>
> +static u64 mem_cgroup_wmark_ratio_read(struct cgroup *cgrp, struct cftype *cft)
> +{
> +     struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp);
> +
> +     return get_wmark_ratio(memcg);
> +}
> +
> +static int mem_cgroup_wmark_ratio_write(struct cgroup *cgrp, struct cftype *cfg,
> +                                  u64 val)
> +{
> +     struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp);
> +     struct mem_cgroup *parent;
> +
> +     if (cgrp->parent == NULL)
> +             return -EINVAL;
> +
> +     parent = mem_cgroup_from_cont(cgrp->parent);
> +
> +     memcg->wmark_ratio = val;
> +
> +     setup_per_memcg_wmarks(memcg);
> +     return 0;
> +
> +}
> +
>  static void __mem_cgroup_threshold(struct mem_cgroup *memcg, bool swap)
>  {
>       struct mem_cgroup_threshold_ary *t;
> @@ -4274,6 +4299,21 @@ static void mem_cgroup_oom_unregister_event(struct cgroup *cgrp,
>       mutex_unlock(&memcg_oom_mutex);
>  }
>
> +static int mem_cgroup_wmark_read(struct cgroup *cgrp,
> +     struct cftype *cft,  struct cgroup_map_cb *cb)
> +{
> +     struct mem_cgroup *mem = mem_cgroup_from_cont(cgrp);
> +     u64 low_wmark, high_wmark;
> +
> +     low_wmark = res_counter_read_u64(&mem->res, RES_LOW_WMARK_LIMIT);
> +     high_wmark = res_counter_read_u64(&mem->res, RES_HIGH_WMARK_LIMIT);
> +
> +     cb->fill(cb, "low_wmark", low_wmark);
> +     cb->fill(cb, "high_wmark", high_wmark);
> +
> +     return 0;
> +}
> +
>  static int mem_cgroup_oom_control_read(struct cgroup *cgrp,
>       struct cftype *cft,  struct cgroup_map_cb *cb)
>  {
> @@ -4377,6 +4417,15 @@ static struct cftype mem_cgroup_files[] = {
>               .unregister_event = mem_cgroup_oom_unregister_event,
>               .private = MEMFILE_PRIVATE(_OOM_TYPE, OOM_CONTROL),
>       },
> +     {
> +             .name = "wmark_ratio",
> +             .write_u64 = mem_cgroup_wmark_ratio_write,
> +             .read_u64 = mem_cgroup_wmark_ratio_read,
> +     },
> +     {
> +             .name = "reclaim_wmarks",
> +             .read_map = mem_cgroup_wmark_read,
> +     },
>  };
>
>  #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
> --
> 1.7.3.1
>
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@xxxxxxxxx.  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="" href="mailto:dont@xxxxxxxxx">dont@xxxxxxxxx"> email@xxxxxxxxx </a>
>



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]