enetc: Refine buffer descriptor ring sizes
authorClaudiu Manoil <claudiu.manoil@nxp.com>
Tue, 21 Jul 2020 07:55:17 +0000 (10:55 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 21 Jul 2020 22:38:30 +0000 (15:38 -0700)
It's time to differentiate between Rx and Tx ring sizes.
Not only Tx rings are processed differently than Rx rings,
but their default number also differs - i.e. up to 8 Tx rings
per device (8 traffic classes) vs. 2 Rx rings (one per CPU).
So let's set Tx rings sizes to half the size of the Rx rings
for now, to be conservative.
The default ring sizes were decreased as well (to the next
lower power of 2), to reduce the memory footprint, buffering
etc., since the measurements I've made so far show that the
rings are very unlikely to get full.
This change also anticipates the introduction of the
dynamic interrupt moderation (dim) algorithm which operates
on maximum packet thresholds of 256 packets for Rx and 128
packets for Tx.

Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/enetc/enetc.c
drivers/net/ethernet/freescale/enetc/enetc.h

index 3f32b85..d91e526 100644 (file)
@@ -1064,8 +1064,8 @@ void enetc_init_si_rings_params(struct enetc_ndev_priv *priv)
        struct enetc_si *si = priv->si;
        int cpus = num_online_cpus();
 
-       priv->tx_bd_count = ENETC_BDR_DEFAULT_SIZE;
-       priv->rx_bd_count = ENETC_BDR_DEFAULT_SIZE;
+       priv->tx_bd_count = ENETC_TX_RING_DEFAULT_SIZE;
+       priv->rx_bd_count = ENETC_RX_RING_DEFAULT_SIZE;
 
        /* Enable all available TX rings in order to configure as many
         * priorities as possible, when needed.
index b705464..0dd8ee1 100644 (file)
@@ -44,8 +44,9 @@ struct enetc_ring_stats {
        unsigned int rx_alloc_errs;
 };
 
-#define ENETC_BDR_DEFAULT_SIZE 1024
-#define ENETC_DEFAULT_TX_WORK  256
+#define ENETC_RX_RING_DEFAULT_SIZE     512
+#define ENETC_TX_RING_DEFAULT_SIZE     256
+#define ENETC_DEFAULT_TX_WORK          (ENETC_TX_RING_DEFAULT_SIZE / 2)
 
 struct enetc_bdr {
        struct device *dev; /* for DMA mapping */