i40e, xsk: move buffer allocation out of the Rx processing loop
Instead of checking in each iteration of the Rx packet processing loop, move the allocation out of the loop and do it once for each napi activation. For AF_XDP the rx_drop benchmark was improved by 6%. Signed-off-by: Björn Töpel <bjorn.topel@intel.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
f0064bfd96
commit
8cbf741499
|
@ -281,8 +281,8 @@ int i40e_clean_rx_irq_zc(struct i40e_ring *rx_ring, int budget)
|
|||
unsigned int total_rx_bytes = 0, total_rx_packets = 0;
|
||||
u16 cleaned_count = I40E_DESC_UNUSED(rx_ring);
|
||||
unsigned int xdp_res, xdp_xmit = 0;
|
||||
bool failure = false;
|
||||
struct sk_buff *skb;
|
||||
bool failure;
|
||||
|
||||
while (likely(total_rx_packets < (unsigned int)budget)) {
|
||||
union i40e_rx_desc *rx_desc;
|
||||
|
@ -290,13 +290,6 @@ int i40e_clean_rx_irq_zc(struct i40e_ring *rx_ring, int budget)
|
|||
unsigned int size;
|
||||
u64 qword;
|
||||
|
||||
if (cleaned_count >= I40E_RX_BUFFER_WRITE) {
|
||||
failure = failure ||
|
||||
!i40e_alloc_rx_buffers_zc(rx_ring,
|
||||
cleaned_count);
|
||||
cleaned_count = 0;
|
||||
}
|
||||
|
||||
rx_desc = I40E_RX_DESC(rx_ring, rx_ring->next_to_clean);
|
||||
qword = le64_to_cpu(rx_desc->wb.qword1.status_error_len);
|
||||
|
||||
|
@ -371,6 +364,9 @@ int i40e_clean_rx_irq_zc(struct i40e_ring *rx_ring, int budget)
|
|||
napi_gro_receive(&rx_ring->q_vector->napi, skb);
|
||||
}
|
||||
|
||||
if (cleaned_count >= I40E_RX_BUFFER_WRITE)
|
||||
failure = !i40e_alloc_rx_buffers_zc(rx_ring, cleaned_count);
|
||||
|
||||
i40e_finalize_xdp_rx(rx_ring, xdp_xmit);
|
||||
i40e_update_rx_stats(rx_ring, total_rx_bytes, total_rx_packets);
|
||||
|
||||
|
|
Loading…
Reference in New Issue