All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] xen/netfront: Fix TX response spurious interrupts
@ 2025-07-10 16:11 Anthoine Bourgeois
  2025-07-10 20:05 ` Elliott Mitchell
                   ` (3 more replies)
  0 siblings, 4 replies; 16+ messages in thread
From: Anthoine Bourgeois @ 2025-07-10 16:11 UTC (permalink / raw)
  To: xen-devel
  Cc: Juergen Gross, Stefano Stabellini, Oleksandr Tyshchenko,
	Anthoine Bourgeois

We found at Vates that there are lot of spurious interrupts when
benchmarking the PV drivers of Xen. This issue appeared with a patch
that addresses security issue XSA-391 (see Fixes below). On an iperf
benchmark, spurious interrupts can represent up to 50% of the
interrupts.

Spurious interrupts are interrupts that are rised for nothing, there is
no work to do. This appends because the function that handles the
interrupts ("xennet_tx_buf_gc") is also called at the end of the request
path to garbage collect the responses received during the transmission
load.

The request path is doing the work that the interrupt handler should
have done otherwise. This is particurary true when there is more than
one vcpu and get worse linearly with the number of vcpu/queue.

Moreover, this problem is amplifyed by the penalty imposed by a spurious
interrupt. When an interrupt is found spurious the interrupt chip will
delay the EOI to slowdown the backend. This delay will allow more
responses to be handled by the request path and then there will be more
chance the next interrupt will not find any work to do, creating a new
spurious interrupt.

This causes performance issue. The solution here is to remove the calls
from the request path and let the interrupt handler do the processing of
the responses. This approch removes spurious interrupts (<0.05%) and
also has the benefit of freeing up cycles in the request path, allowing
it to process more work, which improves performance compared to masking
the spurious interrupt one way or another.

Some vif throughput performance figures from a 8 vCPUs, 4GB of RAM HVM
guest(s):

Without this patch on the :
vm -> dom0: 4.5Gb/s
vm -> vm:   7.0Gb/s

Without XSA-391 patch (revert of b27d47950e48):
vm -> dom0: 8.3Gb/s
vm -> vm:   8.7Gb/s

With XSA-391 and this patch:
vm -> dom0: 11.5Gb/s
vm -> vm:   12.6Gb/s

Fixes: b27d47950e48 ("xen/netfront: harden netfront against event channel storms")
Signed-off-by: Anthoine Bourgeois <anthoine.bourgeois@vates.tech>
---
 drivers/net/xen-netfront.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index 9bac50963477..a11a0e949400 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -638,8 +638,6 @@ static int xennet_xdp_xmit_one(struct net_device *dev,
 	tx_stats->packets++;
 	u64_stats_update_end(&tx_stats->syncp);
 
-	xennet_tx_buf_gc(queue);
-
 	return 0;
 }
 
@@ -849,9 +847,6 @@ static netdev_tx_t xennet_start_xmit(struct sk_buff *skb, struct net_device *dev
 	tx_stats->packets++;
 	u64_stats_update_end(&tx_stats->syncp);
 
-	/* Note: It is not safe to access skb after xennet_tx_buf_gc()! */
-	xennet_tx_buf_gc(queue);
-
 	if (!netfront_tx_slot_available(queue))
 		netif_tx_stop_queue(netdev_get_tx_queue(dev, queue->id));
 
-- 
2.49.1



Anthoine Bourgeois | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech



^ permalink raw reply related	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2025-07-21  9:51 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-10 16:11 [PATCH] xen/netfront: Fix TX response spurious interrupts Anthoine Bourgeois
2025-07-10 20:05 ` Elliott Mitchell
2025-07-11  7:41   ` Anthoine Bourgeois
2025-07-11 21:22     ` Elliott Mitchell
2025-07-11  9:29 ` Teddy Astie
2025-07-11 15:27   ` Jürgen Groß
2025-07-11 15:28 ` Jürgen Groß
2025-07-11 15:33 ` Juergen Gross
2025-07-14  7:11   ` Anthoine Bourgeois
2025-07-15  0:37     ` Elliott Mitchell
2025-07-15  8:21       ` Anthoine Bourgeois
2025-07-15 19:19         ` Elliott Mitchell
2025-07-16  7:47           ` Anthoine Bourgeois
2025-07-16 18:31             ` Elliott Mitchell
2025-07-18 20:48               ` Elliott Mitchell
2025-07-21  9:51                 ` Anthoine Bourgeois

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.