: uperf streaming read test with 50 parallel connections
One guest acts as the uperf client, the other as the server

Open vSwitch configuration:

OVS bridge with two ports
Guests attached via virtio‑net
Each guest configured with 4 vhost‑queues

Problem Description
When comparing PREEMPT_LAZY against full PREEMPT, we see a substantial drop in throughput—on some systems up to 50%.

Observed Behaviour
By tracing packets inside Open vSwitch (ovs_do_execute_action), we see:
Packet drops
Retransmissions
Reductions in packet size (from 64K down to 32K)

Capturing traffic inside the VM and inspecting it in Wireshark shows the following TCP‑level differences between PREEMPT_FULL and PREEMPT_LAZY:
|--------------------------------------+--------------+--------------+------------------|
| Wireshark Warning / Note             | PREEMPT_FULL | PREEMPT_LAZY | (lazy vs full)   |
|--------------------------------------+--------------+--------------+------------------|
| D-SACK Sequence                      |          309 |         2603 | ×8.4             |
| Partial Acknowledgement of a segment |           54 |          279 | ×5.2             |
| Ambiguous ACK (Karn)                 |           32 |          747 | ×23              |
| (Suspected) spurious retransmission  |          205 |          857 | ×4.2             |
| (Suspected) fast retransmission      |           54 |         1622 | ×30              |
| Duplicate ACK                        |          504 |         3446 | ×6.8             |
| Packet length exceeds MSS (TSO/GRO)  |        13172 |        34790 | ×2.6             |
| Previous segment(s) not captured     |         9205 |         6730 | -27%             |
| ACKed segment that wasn't captured   |         7022 |         8272 | +18%             |
| (Suspected) out-of-order segment     |          436 |          303 | -31%             |
|--------------------------------------+--------------+--------------+------------------|
This pattern indicates reordering, loss, or scheduling‑related delays, but it is still unclear why PREEMPT_LAZY is causing this behaviour in this workload.

Additional observations:

Monitoring the guest CPU run time shows that it drops from 16% with PREEMPT_FULL to 9% with PREEMPT_LAZY.

The workload is dominated by voluntary preemption (schedule()), and PREEMPT_LAZY is, as far as I understand, mainly concerned with forced preemption.
It is therefore not obvious why PREEMPT_LAZY has an impact here.

Changing guest configuration to disable mergeable RX buffers:
       <host mrg_rxbuf="off"/>
       had a clear effect on throughput:
       PREEMPT_LAZY: throughput improved from 40 Gb/s → 60 Gb/s



From - Tue Feb 24 15:53:32 2026
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
Return-Path: <stable+bounces-217922-hi=josie.lol@vger.kernel.org>
Delivered-To: hi@josie.lol
Received: from witcher.mxrouting.net
	by witcher.mxrouting.net with LMTP
	id MKylHnfJnWmDexwAYBR5ng
	(envelope-from <stable+bounces-217922-hi=josie.lol@vger.kernel.org>)
	for <hi@josie.lol>; Tue, 24 Feb 2026 15:53:27 +0000
Return-path: <stable+bounces-217922-hi=josie.lol@vger.kernel.org>
Envelope-to: hi@josie.lol
Delivery-date: Tue, 24 Feb 2026 15:53:27 +0000
Received: from sea.lore.kernel.org ([172.234.253.10])
	by witcher.mxrouting.net with esmtps  (TLS1.3) tls TLS_AES_256_GCM_SHA384
	(Exim 4.98)
	(envelope-from <stable+bounces-217922-hi=josie.lol@vger.kernel.org>)
	id 1vuuj0-00000008mMH-3mdu
	for hi@josie.lol;
	Tue, 24 Feb 2026 15:53:27 +0000
Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1])
	by sea.lore.kernel.org (Postfix) with ESMTP id AC944308B76F
	for <hi@josie.lol>; Tue, 24 Feb 2026 15:47:05 +0000 (UTC)
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
	by smtp.subspace.kernel.org (Postfix) with ESMTP id DFDC83A4F5D;
	Tue, 24 Feb 2026 15:47:04 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
	dkim=pass (2048-bit key) header.d=rowland.harvard.edu header.i=@rowla2100→2101)
2026-03-06T21:10:38.747Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2101→2102)
2026-03-06T21:10:39.747Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2102→2103)
2026-03-06T21:10:40.747Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2103→2104)
2026-03-06T21:10:41.747Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2104→2105)
2026-03-06T21:10:42.747Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2105→2106)
2026-03-06T21:10:43.747Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2106→2107)
2026-03-06T21:10:44.747Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2107→2108)
2026-03-06T21:10:45.750Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2108→2109)
2026-03-06T21:10:46.747Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2109→2110)
2026-03-06T21:10:47.748Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2110→2111)
2026-03-06T21:10:48.748Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2111→2112)
2026-03-06T21:10:49.747Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2112→2113)
2026-03-06T21:10:50.748Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2113→2114)
2026-03-06T21:10:51.749Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2114→2115)
2026-03-06T21:10:52.749Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2115→2116)
2026-03-06T21:10:53.750Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2116→2117)
2026-03-06T21:10:54.749Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2117→2118)
2026-03-06T21:10:55.749Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2118→2119)
2026-03-06T21:10:56.749Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2119→2120)
2026-03-06T21:10:57.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2120→2121)
2026-03-06T21:10:58.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2121→2122)
2026-03-06T21:10:59.754Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2122→2123)
2026-03-06T21:11:00.752Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2123→2124)
2026-03-06T21:11:01.754Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2124→2125)
2026-03-06T21:11:02.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2125→2126)
2026-03-06T21:11:03.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2126→2127)
2026-03-06T21:11:04.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2127→2128)
2026-03-06T21:11:05.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2128→2129)
2026-03-06T21:11:06.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2129→2130)
2026-03-06T21:11:07.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2130→2131)
2026-03-06T21:11:08.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2131→2132)
2026-03-06T21:11:09.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2132→2133)
2026-03-06T21:11:10.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2133→2134)
2026-03-06T21:11:11.754Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2134→2135)
2026-03-06T21:11:12.754Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2135→2136)
2026-03-06T21:11:13.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2136→2137)
2026-03-06T21:11:14.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2137→2138)
2026-03-06T21:11:15.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2138→2139)
2026-03-06T21:11:16.753Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2139→2140)
2026-03-06T21:11:17.755Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2140→2141)
2026-03-06T21:11:18.758Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2141→2142)
2026-03-06T21:11:19.758Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2142→2143)
2026-03-06T21:11:20.758Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2143→2144)
2026-03-06T21:11:21.758Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2144→2145)
2026-03-06T21:11:22.758Z [DEBUG] [useDeferredValue] Messages deferred by 1 (2145→2146)
2026-03-06T21:11:23.758Z [DEBUG] [useDeferredValue] Messages deferred by 1 (21