summaryrefslogtreecommitdiffstats
path: root/debian/patches/features/all/ethernet-microsoft/0026-net-mana-Batch-ringing-RX-queue-doorbell-on-receivin.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/features/all/ethernet-microsoft/0026-net-mana-Batch-ringing-RX-queue-doorbell-on-receivin.patch')
-rw-r--r--debian/patches/features/all/ethernet-microsoft/0026-net-mana-Batch-ringing-RX-queue-doorbell-on-receivin.patch62
1 files changed, 62 insertions, 0 deletions
diff --git a/debian/patches/features/all/ethernet-microsoft/0026-net-mana-Batch-ringing-RX-queue-doorbell-on-receivin.patch b/debian/patches/features/all/ethernet-microsoft/0026-net-mana-Batch-ringing-RX-queue-doorbell-on-receivin.patch
new file mode 100644
index 000000000..6f03091cd
--- /dev/null
+++ b/debian/patches/features/all/ethernet-microsoft/0026-net-mana-Batch-ringing-RX-queue-doorbell-on-receivin.patch
@@ -0,0 +1,62 @@
+From ad96bbb0b221f0cc22fba13a28234636bf7fb9f5 Mon Sep 17 00:00:00 2001
+From: Long Li <longli@microsoft.com>
+Date: Mon, 17 Jul 2023 12:35:38 -0700
+Subject: [PATCH 26/30] net: mana: Batch ringing RX queue doorbell on receiving
+ packets
+
+It's inefficient to ring the doorbell page every time a WQE is posted to
+the received queue. Excessive MMIO writes result in CPU spending more
+time waiting on LOCK instructions (atomic operations), resulting in
+poor scaling performance.
+
+Move the code for ringing doorbell page to where after we have posted all
+WQEs to the receive queue during a callback from napi_poll().
+
+With this change, tests showed an improvement from 120G/s to 160G/s on a
+200G physical link, with 16 or 32 hardware queues.
+
+Tests showed no regression in network latency benchmarks on single
+connection.
+
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Reviewed-by: Dexuan Cui <decui@microsoft.com>
+Signed-off-by: Long Li <longli@microsoft.com>
+Link: https://lore.kernel.org/r/1689622539-5334-2-git-send-email-longli@linuxonhyperv.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+(cherry picked from commit da4e8648079eb6f26f3a88d8c34270a057e2bfe6)
+Signed-off-by: Bastian Blank <waldi@debian.org>
+---
+ drivers/net/ethernet/microsoft/mana/mana_en.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/ethernet/microsoft/mana/mana_en.c
+index 7d82b8949a1e..75c1f81ce64f 100644
+--- a/drivers/net/ethernet/microsoft/mana/mana_en.c
++++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
+@@ -1387,8 +1387,8 @@ static void mana_post_pkt_rxq(struct mana_rxq *rxq)
+
+ recv_buf_oob = &rxq->rx_oobs[curr_index];
+
+- err = mana_gd_post_and_ring(rxq->gdma_rq, &recv_buf_oob->wqe_req,
+- &recv_buf_oob->wqe_inf);
++ err = mana_gd_post_work_request(rxq->gdma_rq, &recv_buf_oob->wqe_req,
++ &recv_buf_oob->wqe_inf);
+ if (WARN_ON_ONCE(err))
+ return;
+
+@@ -1660,6 +1660,12 @@ static void mana_poll_rx_cq(struct mana_cq *cq)
+ mana_process_rx_cqe(rxq, cq, &comp[i]);
+ }
+
++ if (comp_read > 0) {
++ struct gdma_context *gc = rxq->gdma_rq->gdma_dev->gdma_context;
++
++ mana_gd_wq_ring_doorbell(gc, rxq->gdma_rq);
++ }
++
+ if (rxq->xdp_flush)
+ xdp_do_flush();
+ }
+--
+2.40.1
+