On Wed 17-06-15 16:02:59, David Rientjes wrote: > On Fri, 12 Jun 2015, Vlastimil Babka wrote: > > > > diff --git a/net/core/skbuff.c b/net/core/skbuff.c > > > index 3cfff2a..41ec022 100644 > > > --- a/net/core/skbuff.c > > > +++ b/net/core/skbuff.c > > > @@ -4398,7 +4398,7 @@ struct sk_buff *alloc_skb_with_frags(unsigned long > > > header_len, > > > > > > while (order) { > > > if (npages >= 1 << order) { > > > - page = alloc_pages(gfp_mask | > > > + page = alloc_pages((gfp_mask & ~__GFP_WAIT) | > > > __GFP_COMP | > > > __GFP_NOWARN | > > > __GFP_NORETRY, > > > > Note that __GFP_NORETRY is weaker than ~__GFP_WAIT and thus redundant. But > > it > > won't hurt anything leaving it there. And you might consider __GFP_NO_KSWAPD > > instead, as I said in the other thread. > > > > Yeah, I agreed with __GFP_NO_KSWAPD to avoid utilizing memory reserves for > this.
Abusing __GFP_NO_KSWAPD is a wrong way to go IMHO. It is true that the _current_ implementation of the allocator has this nasty and very subtle side effect but that doesn't mean it should be abused outside of the mm proper. Why shouldn't this path wake the kswapd and let it compact memory on the background to increase the success rate for the later high order allocations? -- Michal Hocko SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html