i40e, xsk: remove HW descriptor prefetch in AF_XDP path
The software prefetching of HW descriptors has a negative impact on the performance. Therefore, it is now removed. Performance for the rx_drop benchmark increased with 2%. 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:
@@ -2295,6 +2295,19 @@ void i40e_finalize_xdp_rx(struct i40e_ring *rx_ring, unsigned int xdp_res)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* i40e_inc_ntc: Advance the next_to_clean index
|
||||||
|
* @rx_ring: Rx ring
|
||||||
|
**/
|
||||||
|
static void i40e_inc_ntc(struct i40e_ring *rx_ring)
|
||||||
|
{
|
||||||
|
u32 ntc = rx_ring->next_to_clean + 1;
|
||||||
|
|
||||||
|
ntc = (ntc < rx_ring->count) ? ntc : 0;
|
||||||
|
rx_ring->next_to_clean = ntc;
|
||||||
|
prefetch(I40E_RX_DESC(rx_ring, ntc));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* i40e_clean_rx_irq - Clean completed descriptors from Rx ring - bounce buf
|
* i40e_clean_rx_irq - Clean completed descriptors from Rx ring - bounce buf
|
||||||
* @rx_ring: rx descriptor ring to transact packets on
|
* @rx_ring: rx descriptor ring to transact packets on
|
||||||
|
|||||||
@@ -99,19 +99,6 @@ static inline bool i40e_rx_is_programming_status(u64 qword1)
|
|||||||
return qword1 & I40E_RXD_QW1_LENGTH_SPH_MASK;
|
return qword1 & I40E_RXD_QW1_LENGTH_SPH_MASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* i40e_inc_ntc: Advance the next_to_clean index
|
|
||||||
* @rx_ring: Rx ring
|
|
||||||
**/
|
|
||||||
static inline void i40e_inc_ntc(struct i40e_ring *rx_ring)
|
|
||||||
{
|
|
||||||
u32 ntc = rx_ring->next_to_clean + 1;
|
|
||||||
|
|
||||||
ntc = (ntc < rx_ring->count) ? ntc : 0;
|
|
||||||
rx_ring->next_to_clean = ntc;
|
|
||||||
prefetch(I40E_RX_DESC(rx_ring, ntc));
|
|
||||||
}
|
|
||||||
|
|
||||||
void i40e_xsk_clean_rx_ring(struct i40e_ring *rx_ring);
|
void i40e_xsk_clean_rx_ring(struct i40e_ring *rx_ring);
|
||||||
void i40e_xsk_clean_tx_ring(struct i40e_ring *tx_ring);
|
void i40e_xsk_clean_tx_ring(struct i40e_ring *tx_ring);
|
||||||
bool i40e_xsk_any_rx_ring_enabled(struct i40e_vsi *vsi);
|
bool i40e_xsk_any_rx_ring_enabled(struct i40e_vsi *vsi);
|
||||||
|
|||||||
@@ -257,6 +257,18 @@ static struct sk_buff *i40e_construct_skb_zc(struct i40e_ring *rx_ring,
|
|||||||
return skb;
|
return skb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* i40e_inc_ntc: Advance the next_to_clean index
|
||||||
|
* @rx_ring: Rx ring
|
||||||
|
**/
|
||||||
|
static void i40e_inc_ntc(struct i40e_ring *rx_ring)
|
||||||
|
{
|
||||||
|
u32 ntc = rx_ring->next_to_clean + 1;
|
||||||
|
|
||||||
|
ntc = (ntc < rx_ring->count) ? ntc : 0;
|
||||||
|
rx_ring->next_to_clean = ntc;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* i40e_clean_rx_irq_zc - Consumes Rx packets from the hardware ring
|
* i40e_clean_rx_irq_zc - Consumes Rx packets from the hardware ring
|
||||||
* @rx_ring: Rx ring
|
* @rx_ring: Rx ring
|
||||||
|
|||||||
Reference in New Issue
Block a user