From 19d019629177aa48f13a75293263aabbf7dc5f06 Mon Sep 17 00:00:00 2001 From: wuxinyue Date: Tue, 2 Dec 2025 11:45:32 +0800 Subject: [PATCH] virtio-devices: block: Reduce latency in completion handling Signal the guest before processing queue submissions to enable earlier guest side completion event handling, reducing end-to-end latency for block device operations. FIO benchmarks show up to 7.4% bandwidth improvement at 16 iodepth and 4k block size with NVMe devices. Signed-off-by: wuxinyue --- virtio-devices/src/block.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/virtio-devices/src/block.rs b/virtio-devices/src/block.rs index 9bb97d31c..bf7d9123c 100644 --- a/virtio-devices/src/block.rs +++ b/virtio-devices/src/block.rs @@ -607,17 +607,14 @@ impl EpollHelperHandler for BlockEpollHandler { )) })?; + self.try_signal_used_queue()?; + let rate_limit_reached = self.rate_limiter.as_ref().is_some_and(|r| r.is_blocked()); // Process the queue only when the rate limit is not reached if !rate_limit_reached { - self.process_queue_submit().map_err(|e| { - EpollHelperError::HandleEvent(anyhow!( - "Failed to process queue (submit): {e:?}" - )) - })?; + self.process_queue_submit_and_signal()?; } - self.try_signal_used_queue()?; } RATE_LIMITER_EVENT => { if let Some(rate_limiter) = &mut self.rate_limiter {