Re: [PATCH net-next v2 5/9] xsk: add xsk_alloc_batch_skb() to build skbs in batch
From: Alexander Lobakin <aleksander.lobakin@intel.com>
Date: 2025-08-28 15:29:07
Also in:
bpf
From: Jason Xing <redacted> Date: Thu, 28 Aug 2025 08:38:42 +0800
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 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.
Thanks, Jason
Thanks, Olek