Re: [PATCH bpf-next 4/4] ixgbe, xsk: use XSK_NAPI_WEIGHT as NAPI poll budget

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2020-09-08 11:45, Eric Dumazet wrote:


On 9/7/20 5:02 PM, Björn Töpel wrote:
From: Björn Töpel <bjorn.topel@xxxxxxxxx>

Start using XSK_NAPI_WEIGHT as NAPI poll budget for the AF_XDP Rx
zero-copy path.

Signed-off-by: Björn Töpel <bjorn.topel@xxxxxxxxx>
---
  drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c
index 3771857cf887..f32c1ba0d237 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c
@@ -239,7 +239,7 @@ int ixgbe_clean_rx_irq_zc(struct ixgbe_q_vector *q_vector,
  	bool failure = false;
  	struct sk_buff *skb;
- while (likely(total_rx_packets < budget)) {
+	while (likely(total_rx_packets < XSK_NAPI_WEIGHT)) {
  		union ixgbe_adv_rx_desc *rx_desc;
  		struct ixgbe_rx_buffer *bi;
  		unsigned int size

This is a violation of NAPI API. IXGBE is already diverging a bit from best practices.


Thanks for having a look, Eric! By diverging from best practices, do
you mean that multiple queues share one NAPI context, and the budget
is split over the queues (say, 4 queues, 64/4 per queue), or that Tx
simply ignores the budget? Or both?

There are reasons we want to control the budget from callers,
if you want bigger budget just increase it instead of using your own ?

I would rather use a generic patch.


Hmm, so a configurable NAPI budget for, say, the AF_XDP enabled
queues/NAPIs? Am I reading that correct? (Note that this is *only* for
the AF_XDP enabled queues.)

I'll try to rework this to something more palatable.


Thanks,
Björn


diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 7bd4fcdd0738a718d8b0f7134523cd87e4dcdb7b..33bcbdb6fef488983438c6584e3cbb0a44febb1a 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -2311,11 +2311,14 @@ static inline void *netdev_priv(const struct net_device *dev)
   */
  #define SET_NETDEV_DEVTYPE(net, devtype)       ((net)->dev.type = (devtype))
-/* Default NAPI poll() weight
- * Device drivers are strongly advised to not use bigger value
- */
+/* Default NAPI poll() weight. Highly recommended. */
  #define NAPI_POLL_WEIGHT 64
+/* Device drivers are strongly advised to not use bigger value,
+ * as this might cause latencies in stress conditions.
+ */
+#define NAPI_POLL_WEIGHT_MAX 256
+
  /**
   *     netif_napi_add - initialize a NAPI context
   *     @dev:  network device
diff --git a/net/core/dev.c b/net/core/dev.c
index 4086d335978c1bf62bd3965bd2ea96a4ac06b13d..496713fb6075bd8e5e22725e7c817172858e1dd7 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -6608,7 +6608,7 @@ void netif_napi_add(struct net_device *dev, struct napi_struct *napi,
         INIT_LIST_HEAD(&napi->rx_list);
         napi->rx_count = 0;
         napi->poll = poll;
-       if (weight > NAPI_POLL_WEIGHT)
+       if (weight > NAPI_POLL_WEIGHT_MAX)
                 netdev_err_once(dev, "%s() called with weight %d\n", __func__,
                                 weight);
         napi->weight = weight;




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux