Re: [PATCH v1 09/19] zsmalloc: keep max_object in size_class

From: Minchan Kim
Date: Tue Mar 15 2016 - 02:40:48 EST


On Tue, Mar 15, 2016 at 03:28:24PM +0900, Sergey Senozhatsky wrote:
> On (03/11/16 16:30), Minchan Kim wrote:
> > Every zspage in a size_class has same number of max objects so
> > we could move it to a size_class.
> >
> > Signed-off-by: Minchan Kim <minchan@xxxxxxxxxx>
> > ---
> > mm/zsmalloc.c | 29 ++++++++++++++---------------
> > 1 file changed, 14 insertions(+), 15 deletions(-)
> >
> > diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
> > index b4fb11831acb..ca663c82c1fc 100644
> > --- a/mm/zsmalloc.c
> > +++ b/mm/zsmalloc.c
> > @@ -32,8 +32,6 @@
> > * page->freelist: points to the first free object in zspage.
> > * Free objects are linked together using in-place
> > * metadata.
> > - * page->objects: maximum number of objects we can store in this
> > - * zspage (class->zspage_order * PAGE_SIZE / class->size)
> > * page->lru: links together first pages of various zspages.
> > * Basically forming list of zspages in a fullness group.
> > * page->mapping: class index and fullness group of the zspage
> > @@ -211,6 +209,7 @@ struct size_class {
> > * of ZS_ALIGN.
> > */
> > int size;
> > + int objs_per_zspage;
> > unsigned int index;
>
> struct page ->objects "comes for free". now we don't use it, instead
> every size_class grows by 4 bytes? is there any reason for this?

It is union with _mapcount and it is used by checking non-lru movable
page in this patchset.
>
> -ss