* [PATCH net-next] net: skbuff: sprinkle more __GFP_NOWARN on ingress allocs
@ 2024-08-02 0:19 Jakub Kicinski
2024-08-02 4:52 ` Jason Xing
2024-08-02 7:18 ` Eric Dumazet
0 siblings, 2 replies; 5+ messages in thread
From: Jakub Kicinski @ 2024-08-02 0:19 UTC (permalink / raw)
To: davem; +Cc: netdev, edumazet, pabeni, Jakub Kicinski
build_skb() and frag allocations done with GFP_ATOMIC will
fail in real life, when system is under memory pressure,
and there's nothing we can do about that. So no point
printing warnings.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
net/core/skbuff.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 83f8cd8aa2d1..de2a044cc665 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -314,8 +314,8 @@ void *__napi_alloc_frag_align(unsigned int fragsz, unsigned int align_mask)
fragsz = SKB_DATA_ALIGN(fragsz);
local_lock_nested_bh(&napi_alloc_cache.bh_lock);
- data = __page_frag_alloc_align(&nc->page, fragsz, GFP_ATOMIC,
- align_mask);
+ data = __page_frag_alloc_align(&nc->page, fragsz,
+ GFP_ATOMIC | __GFP_NOWARN, align_mask);
local_unlock_nested_bh(&napi_alloc_cache.bh_lock);
return data;
@@ -330,7 +330,8 @@ void *__netdev_alloc_frag_align(unsigned int fragsz, unsigned int align_mask)
struct page_frag_cache *nc = this_cpu_ptr(&netdev_alloc_cache);
fragsz = SKB_DATA_ALIGN(fragsz);
- data = __page_frag_alloc_align(nc, fragsz, GFP_ATOMIC,
+ data = __page_frag_alloc_align(nc, fragsz,
+ GFP_ATOMIC | __GFP_NOWARN,
align_mask);
} else {
local_bh_disable();
@@ -349,7 +350,7 @@ static struct sk_buff *napi_skb_cache_get(void)
local_lock_nested_bh(&napi_alloc_cache.bh_lock);
if (unlikely(!nc->skb_count)) {
nc->skb_count = kmem_cache_alloc_bulk(net_hotdata.skbuff_cache,
- GFP_ATOMIC,
+ GFP_ATOMIC | __GFP_NOWARN,
NAPI_SKB_CACHE_BULK,
nc->skb_cache);
if (unlikely(!nc->skb_count)) {
@@ -418,7 +419,8 @@ struct sk_buff *slab_build_skb(void *data)
struct sk_buff *skb;
unsigned int size;
- skb = kmem_cache_alloc(net_hotdata.skbuff_cache, GFP_ATOMIC);
+ skb = kmem_cache_alloc(net_hotdata.skbuff_cache,
+ GFP_ATOMIC | __GFP_NOWARN);
if (unlikely(!skb))
return NULL;
@@ -469,7 +471,8 @@ struct sk_buff *__build_skb(void *data, unsigned int frag_size)
{
struct sk_buff *skb;
- skb = kmem_cache_alloc(net_hotdata.skbuff_cache, GFP_ATOMIC);
+ skb = kmem_cache_alloc(net_hotdata.skbuff_cache,
+ GFP_ATOMIC | __GFP_NOWARN);
if (unlikely(!skb))
return NULL;
--
2.45.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net-next] net: skbuff: sprinkle more __GFP_NOWARN on ingress allocs
2024-08-02 0:19 [PATCH net-next] net: skbuff: sprinkle more __GFP_NOWARN on ingress allocs Jakub Kicinski
@ 2024-08-02 4:52 ` Jason Xing
2024-08-02 14:48 ` Jakub Kicinski
2024-08-02 7:18 ` Eric Dumazet
1 sibling, 1 reply; 5+ messages in thread
From: Jason Xing @ 2024-08-02 4:52 UTC (permalink / raw)
To: Jakub Kicinski; +Cc: davem, netdev, edumazet, pabeni
Hello Jakub,
On Fri, Aug 2, 2024 at 8:20 AM Jakub Kicinski <kuba@kernel.org> wrote:
>
> build_skb() and frag allocations done with GFP_ATOMIC will
> fail in real life, when system is under memory pressure,
It's true. It can frequently happen under huge pressure.
> and there's nothing we can do about that. So no point
> printing warnings.
As you said, we cannot handle it because of that flag, but I wonder if
we at least let users/admins know about this failure, like: adding MIB
counter or trace_alloc_skb() tracepoint, which can also avoid printing
too many useless/necessary warnings. Or else, people won't know what
exactly happens in the kernel.
Thanks,
Jason
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> ---
> net/core/skbuff.c | 15 +++++++++------
> 1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/net/core/skbuff.c b/net/core/skbuff.c
> index 83f8cd8aa2d1..de2a044cc665 100644
> --- a/net/core/skbuff.c
> +++ b/net/core/skbuff.c
> @@ -314,8 +314,8 @@ void *__napi_alloc_frag_align(unsigned int fragsz, unsigned int align_mask)
> fragsz = SKB_DATA_ALIGN(fragsz);
>
> local_lock_nested_bh(&napi_alloc_cache.bh_lock);
> - data = __page_frag_alloc_align(&nc->page, fragsz, GFP_ATOMIC,
> - align_mask);
> + data = __page_frag_alloc_align(&nc->page, fragsz,
> + GFP_ATOMIC | __GFP_NOWARN, align_mask);
> local_unlock_nested_bh(&napi_alloc_cache.bh_lock);
> return data;
>
> @@ -330,7 +330,8 @@ void *__netdev_alloc_frag_align(unsigned int fragsz, unsigned int align_mask)
> struct page_frag_cache *nc = this_cpu_ptr(&netdev_alloc_cache);
>
> fragsz = SKB_DATA_ALIGN(fragsz);
> - data = __page_frag_alloc_align(nc, fragsz, GFP_ATOMIC,
> + data = __page_frag_alloc_align(nc, fragsz,
> + GFP_ATOMIC | __GFP_NOWARN,
> align_mask);
> } else {
> local_bh_disable();
> @@ -349,7 +350,7 @@ static struct sk_buff *napi_skb_cache_get(void)
> local_lock_nested_bh(&napi_alloc_cache.bh_lock);
> if (unlikely(!nc->skb_count)) {
> nc->skb_count = kmem_cache_alloc_bulk(net_hotdata.skbuff_cache,
> - GFP_ATOMIC,
> + GFP_ATOMIC | __GFP_NOWARN,
> NAPI_SKB_CACHE_BULK,
> nc->skb_cache);
> if (unlikely(!nc->skb_count)) {
> @@ -418,7 +419,8 @@ struct sk_buff *slab_build_skb(void *data)
> struct sk_buff *skb;
> unsigned int size;
>
> - skb = kmem_cache_alloc(net_hotdata.skbuff_cache, GFP_ATOMIC);
> + skb = kmem_cache_alloc(net_hotdata.skbuff_cache,
> + GFP_ATOMIC | __GFP_NOWARN);
> if (unlikely(!skb))
> return NULL;
>
> @@ -469,7 +471,8 @@ struct sk_buff *__build_skb(void *data, unsigned int frag_size)
> {
> struct sk_buff *skb;
>
> - skb = kmem_cache_alloc(net_hotdata.skbuff_cache, GFP_ATOMIC);
> + skb = kmem_cache_alloc(net_hotdata.skbuff_cache,
> + GFP_ATOMIC | __GFP_NOWARN);
> if (unlikely(!skb))
> return NULL;
>
> --
> 2.45.2
>
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next] net: skbuff: sprinkle more __GFP_NOWARN on ingress allocs
2024-08-02 0:19 [PATCH net-next] net: skbuff: sprinkle more __GFP_NOWARN on ingress allocs Jakub Kicinski
2024-08-02 4:52 ` Jason Xing
@ 2024-08-02 7:18 ` Eric Dumazet
1 sibling, 0 replies; 5+ messages in thread
From: Eric Dumazet @ 2024-08-02 7:18 UTC (permalink / raw)
To: Jakub Kicinski; +Cc: davem, netdev, pabeni
On Fri, Aug 2, 2024 at 2:20 AM Jakub Kicinski <kuba@kernel.org> wrote:
>
> build_skb() and frag allocations done with GFP_ATOMIC will
> fail in real life, when system is under memory pressure,
> and there's nothing we can do about that. So no point
> printing warnings.
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Eric Dumazet <edumazet@google.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next] net: skbuff: sprinkle more __GFP_NOWARN on ingress allocs
2024-08-02 4:52 ` Jason Xing
@ 2024-08-02 14:48 ` Jakub Kicinski
2024-08-05 8:06 ` Jason Xing
0 siblings, 1 reply; 5+ messages in thread
From: Jakub Kicinski @ 2024-08-02 14:48 UTC (permalink / raw)
To: Jason Xing; +Cc: davem, netdev, edumazet, pabeni
On Fri, 2 Aug 2024 12:52:06 +0800 Jason Xing wrote:
> > and there's nothing we can do about that. So no point
> > printing warnings.
>
> As you said, we cannot handle it because of that flag, but I wonder if
> we at least let users/admins know about this failure, like: adding MIB
> counter or trace_alloc_skb() tracepoint, which can also avoid printing
> too many useless/necessary warnings. Or else, people won't know what
> exactly happens in the kernel.
Hm, maybe... I prefer not to add counters and trace points upstream
until they have sat for a few months in production and proven their
usefulness.
We also have a driver-level, per device counter already:
https://docs.kernel.org/next/networking/netlink_spec/netdev.html#rx-alloc-fail-uint
and I'm pretty sure system level OOM tracking will indicate severe
OOM conditions as well.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next] net: skbuff: sprinkle more __GFP_NOWARN on ingress allocs
2024-08-02 14:48 ` Jakub Kicinski
@ 2024-08-05 8:06 ` Jason Xing
0 siblings, 0 replies; 5+ messages in thread
From: Jason Xing @ 2024-08-05 8:06 UTC (permalink / raw)
To: Jakub Kicinski; +Cc: davem, netdev, edumazet, pabeni
On Fri, Aug 2, 2024 at 10:48 PM Jakub Kicinski <kuba@kernel.org> wrote:
>
> On Fri, 2 Aug 2024 12:52:06 +0800 Jason Xing wrote:
> > > and there's nothing we can do about that. So no point
> > > printing warnings.
> >
> > As you said, we cannot handle it because of that flag, but I wonder if
> > we at least let users/admins know about this failure, like: adding MIB
> > counter or trace_alloc_skb() tracepoint, which can also avoid printing
> > too many useless/necessary warnings. Or else, people won't know what
> > exactly happens in the kernel.
>
> Hm, maybe... I prefer not to add counters and trace points upstream
> until they have sat for a few months in production and proven their
> usefulness.
>
> We also have a driver-level, per device counter already:
> https://docs.kernel.org/next/networking/netlink_spec/netdev.html#rx-alloc-fail-uint
> and I'm pretty sure system level OOM tracking will indicate severe
> OOM conditions as well.
Thanks for your explanation. I see.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-08-05 8:07 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-02 0:19 [PATCH net-next] net: skbuff: sprinkle more __GFP_NOWARN on ingress allocs Jakub Kicinski
2024-08-02 4:52 ` Jason Xing
2024-08-02 14:48 ` Jakub Kicinski
2024-08-05 8:06 ` Jason Xing
2024-08-02 7:18 ` Eric Dumazet
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).