Re: 4.8.8 kernel trigger OOM killer repeatedly when I have lots of RAM that should be free

From: Michal Hocko
Date: Wed Nov 23 2016 - 02:00:10 EST


On Wed 23-11-16 14:53:12, Hillf Danton wrote:
> On Wednesday, November 23, 2016 2:34 PM Michal Hocko wrote:
> > @@ -3161,6 +3161,16 @@ should_compact_retry(struct alloc_context *ac, unsigned int order, int alloc_fla
> > if (!order || order > PAGE_ALLOC_COSTLY_ORDER)
> > return false;
> >
> > +#ifdef CONFIG_COMPACTION
> > + /*
> > + * This is a gross workaround to compensate a lack of reliable compaction
> > + * operation. We cannot simply go OOM with the current state of the compaction
> > + * code because this can lead to pre mature OOM declaration.
> > + */
> > + if (order <= PAGE_ALLOC_COSTLY_ORDER)
>
> No need to check order once more.

yes simple return true would be sufficient but I wanted the code to be
more obvious.

> Plus can we retry without CONFIG_COMPACTION enabled?

Yes checking the order-0 watermark was the original implementation of
the high order retry without compaction enabled. I do not rememeber any
reports for that so I didn't want to touch that path.
--
Michal Hocko
SUSE Labs