020-v5.12-bcm63xx_enet-batch-process-rx-path.patch 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. From 9cbfea02c1dbee0afb9128f065e6e793672b9ff7 Mon Sep 17 00:00:00 2001
  2. From: Sieng Piaw Liew <[email protected]>
  3. Date: Wed, 6 Jan 2021 22:42:02 +0800
  4. Subject: [PATCH 1/7] bcm63xx_enet: batch process rx path
  5. Use netif_receive_skb_list to batch process rx skb.
  6. Tested on BCM6328 320 MHz using iperf3 -M 512, increasing performance
  7. by 12.5%.
  8. Before:
  9. [ ID] Interval Transfer Bandwidth Retr
  10. [ 4] 0.00-30.00 sec 120 MBytes 33.7 Mbits/sec 277 sender
  11. [ 4] 0.00-30.00 sec 120 MBytes 33.5 Mbits/sec receiver
  12. After:
  13. [ ID] Interval Transfer Bandwidth Retr
  14. [ 4] 0.00-30.00 sec 136 MBytes 37.9 Mbits/sec 203 sender
  15. [ 4] 0.00-30.00 sec 135 MBytes 37.7 Mbits/sec receiver
  16. Signed-off-by: Sieng Piaw Liew <[email protected]>
  17. Acked-by: Florian Fainelli <[email protected]>
  18. Signed-off-by: Jakub Kicinski <[email protected]>
  19. ---
  20. drivers/net/ethernet/broadcom/bcm63xx_enet.c | 6 +++++-
  21. 1 file changed, 5 insertions(+), 1 deletion(-)
  22. --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
  23. +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
  24. @@ -297,10 +297,12 @@ static void bcm_enet_refill_rx_timer(str
  25. static int bcm_enet_receive_queue(struct net_device *dev, int budget)
  26. {
  27. struct bcm_enet_priv *priv;
  28. + struct list_head rx_list;
  29. struct device *kdev;
  30. int processed;
  31. priv = netdev_priv(dev);
  32. + INIT_LIST_HEAD(&rx_list);
  33. kdev = &priv->pdev->dev;
  34. processed = 0;
  35. @@ -391,10 +393,12 @@ static int bcm_enet_receive_queue(struct
  36. skb->protocol = eth_type_trans(skb, dev);
  37. dev->stats.rx_packets++;
  38. dev->stats.rx_bytes += len;
  39. - netif_receive_skb(skb);
  40. + list_add_tail(&skb->list, &rx_list);
  41. } while (--budget > 0);
  42. + netif_receive_skb_list(&rx_list);
  43. +
  44. if (processed || !priv->rx_desc_count) {
  45. bcm_enet_refill_rx(dev);