Skip to content

Commit 5d20657

Browse files
committed
add more debug messages
1 parent ed87706 commit 5d20657

File tree

4 files changed

+64
-5
lines changed

4 files changed

+64
-5
lines changed

src/vmm/src/devices/virtio/block/virtio/device.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,11 @@ impl VirtioBlock {
475475
let active_state = self.device_state.active_state().unwrap();
476476
let queue = &mut self.queues[0];
477477
let mut processed = 0_u32;
478+
let pending_before = engine.pending_ops();
479+
debug!(
480+
"virtio-block '{}' starting async completion drain: pending_ops={}",
481+
self.id, pending_before
482+
);
478483

479484
loop {
480485
match engine.pop(&active_state.mem) {
@@ -520,8 +525,10 @@ impl VirtioBlock {
520525
});
521526
}
522527
debug!(
523-
"virtio-block '{}' processed {} io_uring completions",
524-
self.id, processed
528+
"virtio-block '{}' processed {} io_uring completions; pending_ops={} after drain",
529+
self.id,
530+
processed,
531+
engine.pending_ops()
525532
);
526533
}
527534

src/vmm/src/devices/virtio/block/virtio/io/async_io.rs

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ impl AsyncFileEngine {
131131
count: u32,
132132
req: PendingRequest,
133133
) -> Result<(), RequestError<AsyncIoError>> {
134+
let req_type = req.request_type();
135+
let desc_idx = req.desc_idx();
134136
let buf = match mem.get_slice(addr, count as usize) {
135137
Ok(slice) => slice.ptr_guard_mut().as_ptr(),
136138
Err(err) => {
@@ -154,7 +156,17 @@ impl AsyncFileEngine {
154156
.map_err(|(io_uring_error, data)| RequestError {
155157
req: data.req,
156158
error: AsyncIoError::IoUring(io_uring_error),
157-
})
159+
})?;
160+
161+
debug!(
162+
"AsyncFileEngine queued {:?} request desc_idx={} offset={} len={} pending_ops={}",
163+
req_type,
164+
desc_idx,
165+
offset,
166+
count,
167+
self.pending_ops()
168+
);
169+
Ok(())
158170
}
159171

160172
pub fn push_write(
@@ -165,6 +177,8 @@ impl AsyncFileEngine {
165177
count: u32,
166178
req: PendingRequest,
167179
) -> Result<(), RequestError<AsyncIoError>> {
180+
let req_type = req.request_type();
181+
let desc_idx = req.desc_idx();
168182
let buf = match mem.get_slice(addr, count as usize) {
169183
Ok(slice) => slice.ptr_guard_mut().as_ptr(),
170184
Err(err) => {
@@ -188,18 +202,38 @@ impl AsyncFileEngine {
188202
.map_err(|(io_uring_error, data)| RequestError {
189203
req: data.req,
190204
error: AsyncIoError::IoUring(io_uring_error),
191-
})
205+
})?;
206+
207+
debug!(
208+
"AsyncFileEngine queued {:?} request desc_idx={} offset={} len={} pending_ops={}",
209+
req_type,
210+
desc_idx,
211+
offset,
212+
count,
213+
self.pending_ops()
214+
);
215+
Ok(())
192216
}
193217

194218
pub fn push_flush(&mut self, req: PendingRequest) -> Result<(), RequestError<AsyncIoError>> {
219+
let req_type = req.request_type();
220+
let desc_idx = req.desc_idx();
195221
let wrapped_user_data = WrappedRequest::new(req);
196222

197223
self.ring
198224
.push(Operation::fsync(0, wrapped_user_data))
199225
.map_err(|(io_uring_error, data)| RequestError {
200226
req: data.req,
201227
error: AsyncIoError::IoUring(io_uring_error),
202-
})
228+
})?;
229+
230+
debug!(
231+
"AsyncFileEngine queued {:?} request desc_idx={} pending_ops={}",
232+
req_type,
233+
desc_idx,
234+
self.pending_ops()
235+
);
236+
Ok(())
203237
}
204238

205239
pub fn kick_submission_queue(&mut self) -> Result<(), AsyncIoError> {

src/vmm/src/devices/virtio/block/virtio/persist.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use crate::devices::virtio::device::{ActiveState, DeviceState};
1616
use crate::devices::virtio::generated::virtio_blk::VIRTIO_BLK_F_RO;
1717
use crate::devices::virtio::generated::virtio_ids::VIRTIO_ID_BLOCK;
1818
use crate::devices::virtio::persist::VirtioDeviceState;
19+
use crate::logger::debug;
1920
use crate::rate_limiter::RateLimiter;
2021
use crate::rate_limiter::persist::RateLimiterState;
2122
use crate::snapshot::Persist;
@@ -69,6 +70,11 @@ impl Persist<'_> for VirtioBlock {
6970
type Error = VirtioBlockError;
7071

7172
fn save(&self) -> Self::State {
73+
let pending_ops = self.disk.file_engine.pending_async_ops();
74+
debug!(
75+
"virtio-block '{}' save invoked with pending_async_ops={}",
76+
self.id, pending_ops
77+
);
7278
// Save device state.
7379
VirtioBlockState {
7480
id: self.id.clone(),

src/vmm/src/devices/virtio/block/virtio/request.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,18 @@ pub struct PendingRequest {
9898
}
9999

100100
impl PendingRequest {
101+
pub fn request_type(&self) -> RequestType {
102+
self.r#type
103+
}
104+
105+
pub fn desc_idx(&self) -> u16 {
106+
self.desc_idx
107+
}
108+
109+
pub fn data_len(&self) -> u32 {
110+
self.data_len
111+
}
112+
101113
fn write_status_and_finish(
102114
self,
103115
status: &Status,

0 commit comments

Comments
 (0)