Re: [PATCH net-next] ip: avoid OOM kills with large UDP sends over loopback
From: Jakub Kicinski <kuba@kernel.org>
Date: 2021-06-22 18:09:51
On Tue, 22 Jun 2021 19:48:43 +0200 Eric Dumazet wrote:
quoted
quoted
What about using sock_alloc_send_pskb(... PAGE_ALLOC_COSTLY_ORDER) (as we did in unix_dgram_sendmsg() for large packets), for SG enabled interfaces ?PAGE_ALLOC_COSTLY_ORDER in itself is more of a problem than a solution. AFAIU the app sends messages primarily above the ~60kB mark, which is above COSTLY, and those do not trigger OOM kills. All OOM kills we see have order=3. Checking with Rik and Johannes W that's expected, OOM killer is only invoked for allocations <= COSTLY, larger ones will just return NULL and let us deal with it (e.g. by falling back).I really thought alloc_skb_with_frags() was already handling low-memory-conditions. (alloc_skb_with_frags() is called from sock_alloc_send_pskb()) If it is not, lets fix it, because af_unix sockets will have the same issue ?
af_unix seems to cap at SKB_MAX_ALLOC which is order 2, AFAICT. Perhaps that's a good enough fix in practice given we see OOMs with order=3 only? I'll review callers of alloc_skb_with_frags() and see if they depend on the explicit geometry of the skb or we can safely fallback to pages.