Re: [PATCH] mm: warn about allocations which stall for too long

From: Michal Hocko
Date: Fri Sep 23 2016 - 04:32:45 EST


On Fri 23-09-16 16:29:36, Hillf Danton wrote:
[...]
> > @@ -3659,6 +3661,15 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
> > else
> > no_progress_loops++;
> >
> > + /* Make sure we know about allocations which stall for too long */
> > + if (!(gfp_mask & __GFP_NOWARN) && time_after(jiffies, alloc_start + stall_timeout)) {
> > + pr_warn("%s: page alloction stalls for %ums: order:%u mode:%#x(%pGg)\n",
> > + current->comm, jiffies_to_msecs(jiffies-alloc_start),
>
> Better if pid is also printed.

I've tried to be consistent with warn_alloc_failed and that doesn't
print pid either. Maybe both of them should. Dunno

> > + order, gfp_mask, &gfp_mask);
> > + stall_timeout += 10 * HZ;
>
> Alternatively alloc_start = jiffies;

Then we would lose the cumulative time in the output which is imho
helpful because you cannot tell whether the new warning is a new request
or the old one still looping.

> > + dump_stack();
> > + }
> > +
> > if (should_reclaim_retry(gfp_mask, order, ac, alloc_flags,
> > did_some_progress > 0, no_progress_loops))
> > goto retry;
> > --
> > 2.9.3
> >
> thanks
> Hillf
>

--
Michal Hocko
SUSE Labs