: 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: 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: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id MKylHnfJnWmDexwAYBR5ng (envelope-from ) for ; Tue, 24 Feb 2026 15:53:27 +0000 Return-path: 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 ) 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 ; 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