On Thu, Jun 04, 2015 at 12:15:14PM +0900, Sergey Senozhatsky wrote: > On (06/04/15 11:55), Minchan Kim wrote: > > > [ 3303.108960] class-3072 objs:24652 inuse:24628 objs-per-page:4 pages-tofree:6 > > > > maxobjs-per-zspage? > > > > yeah, I shortened it to be more of less "80 chars" friendly. > > > [..] > > > > + * calculate how many unused allocated objects we > > > > c should be captital. > > > > I hope you will fix all of english grammer in next spin > > because someone(like me) who is not a native will learn the > > wrong english. :) > > sure, will fix. yeah, I'm a native broken english speaker :-) > > > > + * have and see if we can free any zspages. otherwise, > > > + * compaction can just move objects back and forth w/o > > > + * any memory gain. > > > + */ > > > + unsigned long ret = zs_stat_get(class, OBJ_ALLOCATED) - > > > + zs_stat_get(class, OBJ_USED); > > > + > > > > I prefer obj_wasted to "ret". > > ok. > > I'm still thinking how good it should be. > > for automatic compaction we don't want to uselessly move objects between > pages and I tend to think that it's better to compact less, than to waste > more cpu cycless. > > > on the other hand, this policy will miss cases like: > > -- free objects in class: 5 (free-objs class capacity) > -- page1: inuse 2 > -- page2: inuse 2 > -- page3: inuse 3 > -- page4: inuse 2 What scenario do you have a cocern? Could you describe this example more clear? Thanks. > > so total "insuse" is greater than free-objs class capacity. but, it's > surely possible to compact this class. partial inuse summ <= free-objs class > capacity (a partial summ is a ->inuse summ of any two of class pages: > page1 + page2, page2 + page3, etc.). > > otoh, these partial sums will badly affect performance. may be for automatic > compaction (the one that happens w/o user interaction) we can do zs_can_compact() > and for manual compaction (the one that has been triggered by a user) we can > old "full-scan". > > anyway, zs_can_compact() looks like something that we can optimize > independently later. > > -ss > > > > + ret /= get_maxobj_per_zspage(class->size, > > > + class->pages_per_zspage); > > > + return ret > 0; > > > +} > > > + > > > static unsigned long __zs_compact(struct zs_pool *pool, > > > struct size_class *class) > > > { > > > @@ -1686,6 +1708,9 @@ static unsigned long __zs_compact(struct zs_pool *pool, > > > > > > BUG_ON(!is_first_page(src_page)); > > > > > > + if (!zs_can_compact(class)) > > > + break; > > > + > > > cc.index = 0; > > > cc.s_page = src_page; > > > > > > -- > > > 2.4.2.337.gfae46aa > > > > > > > -- > > Kind regards, > > Minchan Kim > > -- Kind regards, Minchan Kim -- 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/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>