Re: GFP_ATOMIC page allocation failures.

Jeff Garzik
2008-04-02T18:19:33Z

Andrew Morton wrote:
> After you've read Nick's comments (which I pray you have not), and after
> you've convinced us and yourself of their wrongness, you might like to
> consider adding a __GFP_NOWARN to netdev_alloc_skb().

Already done so. Adding __GFP_NOWARN to netdev_alloc_skb() is wrong
for several reasons.

It doesn't change the underlying conditions.
It doesn't fix the desire to stamp other drivers in this manner.

And most importantly, it is not even correct: the handling of the
allocation failure remains delegated to the netdev_alloc_skb() users,
which may or may not be properly handling allocation failures.

Put simply, you don't know if the caller is stupid or smart. And there
are a _lot_ of callers, do you really want to flag all of them?

Many modern net drivers are smart, and quite gracefully handle
allocation failure without skipping a beat.

But some are really dumb, and leave big holes in their DMA rings when
allocations fail.

The warnings are valid _sometimes_, but not for others. So adding
__GFP_NOWARN to netdev_alloc_skb() unconditionally makes no sense,
except as an admission that the "spew when there is memory pressure"
idea was silly.

Turning to Nick's comment,

> It's still actually nice to know how often it is happening even for
> these known good sites because too much can indicate a problem and
> that you could actually bring performance up by tuning some things.

then create a counter or acculuation buffer somewhere.

We don't need spew every time there is memory pressure of this magnitude.

IMO there are much better ways than printk(), to inform tasks, and
humans, of allocation failures.

Jeff