Re: [PATCH net-next v2 5/9] xsk: add xsk_alloc_batch_skb() to build skbs in batch
From: Jason Xing <hidden>
Date: 2025-08-29 00:31:54
Also in:
bpf
On Thu, Aug 28, 2025 at 11:29 PM Alexander Lobakin [off-list ref] wrote:
From: Jason Xing <redacted> Date: Thu, 28 Aug 2025 08:38:42 +0800quoted
On Wed, Aug 27, 2025 at 10:33 PM Alexander Lobakin [off-list ref] wrote:quoted
From: Jason Xing <redacted> Date: Mon, 25 Aug 2025 21:53:38 +0800quoted
From: Jason Xing <kernelxing@tencent.com> Support allocating and building skbs in batch.[...]quoted
+ base_len = max(NET_SKB_PAD, L1_CACHE_ALIGN(dev->needed_headroom)); + if (!(dev->priv_flags & IFF_TX_SKB_NO_LINEAR)) + base_len += dev->needed_tailroom; + + if (xs->skb_count >= nb_pkts) + goto build; + + if (xs->skb) { + i = 1; + xs->skb_count++; + } + + xs->skb_count += kmem_cache_alloc_bulk(net_hotdata.skbuff_cache, + gfp_mask, nb_pkts - xs->skb_count, + (void **)&skbs[xs->skb_count]);Have you tried napi_skb_cache_get_bulk()? Depending on the workload, it may give better perf numbers.Sure, my initial try is using this interface. But later I want to see a standalone cache belonging to xsk. The whole xsk_alloc_batch_skb function I added is quite similar to napi_skb_cache_get_bulk(), to some extent. And if using napi_xxx(), we need a lock to avoid the race between this context and softirq context on the same core.Are you saying this particular function is not run in the softirq
No, it runs in process context. Please see this chain: sendto->__xsk_generic_xmit-> (allocating skbs function handling). Thanks, Jason
context? I thought all Tx is done in BH. If it's not BH, then ignore my suggestion -- napi_skb_cache_get_bulk() requires BH, that's true.quoted
Thanks, JasonThanks, Olek