Re: [RFC][PATCH 4/9] soft limit queue and priority

From: KAMEZAWA Hiroyuki
Date: Mon Apr 06 2009 - 19:56:36 EST


On Tue, 7 Apr 2009 00:12:21 +0530
Balbir Singh <balbir@xxxxxxxxxxxxxxxxxx> wrote:

> * KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> [2009-04-03 17:12:48]:
>
> > From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx>
> >
> > Softlimitq. for memcg.
> >
> > Implements an array of queue to list memcgs, array index is determined by
> > the amount of memory usage excess the soft limit.
> >
> > While Balbir's one uses RB-tree and my old one used a per-zone queue
> > (with round-robin), this is one of mixture of them.
> > (I'd like to use rotation of queue in later patches)
> >
> > Priority is determined by following.
> > Assume unit = total pages/1024. (the code uses different value)
> > if excess is...
> > < unit, priority = 0,
> > < unit*2, priority = 1,
> > < unit*2*2, priority = 2,
> > ...
> > < unit*2^9, priority = 9,
> > < unit*2^10, priority = 10, (> 50% to total mem)
> >
> > This patch just includes queue management part and not includes
> > selection logic from queue. Some trick will be used for selecting victims at
> > soft limit in efficient way.
> >
> > And this equips 2 queues, for anon and file. Inset/Delete of both list is
> > done at once but scan will be independent. (These 2 queues are used later.)
> >
> > Major difference from Balbir's one other than RB-tree is bahavior under
> > hierarchy. This one adds all children to queue by checking hierarchical
> > priority. This is for helping per-zone usage check on victim-selection logic.
> >
> > Changelog: v1->v2
> > - fixed comments.
> > - change base size to exponent.
> > - some micro optimization to reduce code size.
> > - considering memory hotplug, it's not good to record a value calculated
> > from totalram_pages at boot and using it later is bad manner. Fixed it.
> > - removed soft_limit_lock (spinlock)
> > - added soft_limit_update counter for avoiding mulptiple update at once.
> >
> >
> > Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx>
> > ---
> > mm/memcontrol.c | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
> > 1 file changed, 117 insertions(+), 1 deletion(-)
> >
> > Index: softlimit-test2/mm/memcontrol.c
> > ===================================================================
> > --- softlimit-test2.orig/mm/memcontrol.c
> > +++ softlimit-test2/mm/memcontrol.c
> > @@ -192,7 +192,14 @@ struct mem_cgroup {
> > atomic_t refcnt;
> >
> > unsigned int swappiness;
> > -
> > + /*
> > + * For soft limit.
> > + */
> > + int soft_limit_priority;
> > + struct list_head soft_limit_list[2];
>
> Looking at the rest of the code in the patch, it is not apparent as to
> why we need two list_heads/array of list_heads?
>

Considering LRU rotation, it's done per anon, file in zone.

ACTIVE -> INACTIVE -> out.

And, there can be 'File only', 'Anon only' cgroup.

Then, we have 2 design choices.

1. Use one list for selecting victim.
If target memory type (FILE/ANON) is empty, select another victim.
2. Use two list for selecting victim.
FILE and ANON victim selection can be done independently from each other.

This series uses "2". Because "1" can make "ticket" parameter useless in victim
selection.

Sorry for short text.

Thanks,
-Kame










--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/