Re: [RFC][PATCH v3 2/5] mm/zsmalloc: remove shrinker compaction callbacks

From: Minchan Kim
Date: Mon Mar 14 2016 - 22:19:13 EST


On Tue, Mar 15, 2016 at 10:05:42AM +0900, Sergey Senozhatsky wrote:
> On (03/15/16 09:52), Minchan Kim wrote:
> [..]
> > > > I suggested to remove shrinker compaction but while I review your
> > > > first patch in this thread, I thought we need upper-bound to
> > > > compact zspage so background work can bail out for latency easily.
> > > > IOW, the work could give up the job. In such case, we might need
> > > > fall-back scheme to continue the job. And I think that could be
> > > > a shrinker.
> > > >
> > > > What do you think?
> > >
> > > wouldn't this unnecessarily complicate the whole thing? we would
> > > have
> > > a) a compaction that can be triggered by used space
> >
> > Maybe, user space? :)
>
> haha, yes! sorry, I do quite a lot of typos.
>
> > > b) a compaction from zs_free() that can bail out
> > > c) a compaction triggered by the shrinker.
> > >
> > > all 3 three can run simultaneously.
> >
> > Yeb.
> >
> > >
> > >
> > > _if_ we can keep every class below its watermark, we can reduce the
> > > need of "c)".
> >
> > But the problem is timing. We cannot guarantee when background
> > compaction triggers while shrinker is interop with VM so we should
> > do the job instantly for the system.
>
> we can have pool's compaction-kthread that we will wake_up()
> every time we need a compaction, with no dependency on workqueue
> or shrinker.

Hmm, I don't think it can work either because wake_up doesn't
guarantee instant execution of the thread.
I think it would be better to have both direct/background
compaction.