Re: [PATCH] mm, vmscan: do not loop on too_many_isolated for ever

From: Michal Hocko
Date: Mon Jul 24 2017 - 02:51:01 EST


On Fri 21-07-17 16:01:04, Andrew Morton wrote:
> On Thu, 20 Jul 2017 08:56:26 +0200 Michal Hocko <mhocko@xxxxxxxxxx> wrote:
> >
> > > > --- a/mm/vmscan.c
> > > > +++ b/mm/vmscan.c
> > > > @@ -1713,9 +1713,15 @@ shrink_inactive_list(unsigned long nr_to_scan, struct lruvec *lruvec,
> > > > int file = is_file_lru(lru);
> > > > struct pglist_data *pgdat = lruvec_pgdat(lruvec);
> > > > struct zone_reclaim_stat *reclaim_stat = &lruvec->reclaim_stat;
> > > > + bool stalled = false;
> > > >
> > > > while (unlikely(too_many_isolated(pgdat, file, sc))) {
> > > > - congestion_wait(BLK_RW_ASYNC, HZ/10);
> > > > + if (stalled)
> > > > + return 0;
> > > > +
> > > > + /* wait a bit for the reclaimer. */
> > > > + schedule_timeout_interruptible(HZ/10);
> > >
> > > a) if this task has signal_pending(), this falls straight through
> > > and I suspect the code breaks?
> >
> > It will not break. It will return to the allocation path more quickly
> > but no over-reclaim will happen and it will/should get throttled there.
> > So nothing critical.
> >
> > > b) replacing congestion_wait() with schedule_timeout_interruptible()
> > > means this task no longer contributes to load average here and it's
> > > a (slightly) user-visible change.
> >
> > you are right. I am not sure it matters but it might be visible.
> >
> > > c) msleep_interruptible() is nicer
> > >
> > > d) IOW, methinks we should be using msleep() here?
> >
> > OK, I do not have objections. Are you going to squash this in or want a
> > separate patch explaining all the above?
>
> I'd prefer to have a comment explaining why interruptible sleep is
> being used, because that "what if signal_pending()" case is rather a
> red flag.

I didn't really consider interruptible vs. uninterruptible sleep so it
wasn't really a deliberate decision. Now, that you have brought up the
above points I am OK changing that the uninterruptible.

Here is a fix up. I am fine with this either folded in or as a separate
patch.
---