Re: [PATCH] igb: don't reuse pages with pfmemalloc flag

From: Eric Dumazet
Date: Wed Oct 22 2014 - 12:03:25 EST


On Wed, 2014-10-22 at 17:50 +0400, Roman Gushchin wrote:
> Incoming packet is dropped silently by sk_filter(), if the skb was
> allocated from pfmemalloc reserves and the corresponding socket is
> not marked with the SOCK_MEMALLOC flag.
>
> Igb driver allocates pages for DMA with __skb_alloc_page(), which
> calls alloc_pages_node() with the __GFP_MEMALLOC flag. So, in case
> of OOM condition, igb can get pages with pfmemalloc flag set.
>
> If an incoming packet hits the pfmemalloc page and is large enough
> (small packets are copying into the memory, allocated with
> netdev_alloc_skb_ip_align(), so they are not affected), it will be
> dropped.
>
> This behavior is ok under high memory pressure, but the problem is
> that the igb driver reuses these mapped pages. So, packets are still
> dropping even if all memory issues are gone and there is a plenty
> of free memory.
>
> In my case, some TCP sessions hang on a small percentage (< 0.1%)
> of machines days after OOMs.
>
> Fix this by avoiding reuse of such pages.
>
> Signed-off-by: Roman Gushchin <klamm@xxxxxxxxxxxxxx>
> ---

Interesting...

It seems we also need to clear skb->pfmemalloc in napi_reuse_skb()



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/