@@ -327,7 +327,13 @@ impl Net {
327327 }
328328
329329 // Attempt frame delivery.
330+ // let t = std::time::Instant::now();
330331 let success = self . do_write_frame_to_guest ( ) . is_ok ( ) ;
332+ // warn!(
333+ // "do_write_frame_to_guest took: {}ns success: {}",
334+ // t.elapsed().as_nanos(),
335+ // success
336+ // );
331337
332338 // Undo the tokens consumption if guest delivery failed.
333339 if !success {
@@ -354,11 +360,14 @@ impl Net {
354360
355361 let mut num_descriptors_used: u16 = 0 ;
356362 while let Some ( descriptor) = & next_descriptor {
363+ // warn!("descriptor {num_descriptors_used} len: {}", descriptor.len);
364+ // warn!("current chunk len: {}", chunk.len());
357365 if !descriptor. is_write_only ( ) {
358366 return Err ( FrontendError :: ReadOnlyDescriptor ) ;
359367 }
360368
361369 let len = std:: cmp:: min ( chunk. len ( ) , descriptor. len as usize ) ;
370+ // warn!("writing chunk with len: {}", len);
362371 match mem. write_slice ( & chunk[ ..len] , descriptor. addr ) {
363372 Ok ( ( ) ) => {
364373 num_descriptors_used += 1 ;
@@ -373,6 +382,7 @@ impl Net {
373382 return Err ( FrontendError :: GuestMemory ( err) ) ;
374383 }
375384 }
385+ // warn!("remaining chunk len: {}", chunk.len());
376386
377387 // If chunk is empty we are done here.
378388 if chunk. is_empty ( ) {
@@ -395,8 +405,13 @@ impl Net {
395405
396406 let queue = & mut self . queues [ RX_INDEX ] ;
397407
408+ // let mut i = 0;
398409 let mut bytes = & self . rx_frame_buf [ self . rx_bytes_send ..self . rx_bytes_read ] ;
410+ warn ! ( "queue size: {}" , queue. len( mem) ) ;
411+ warn ! ( "do_write_frame_to_guest bytes len: {}" , bytes. len( ) ) ;
399412 loop {
413+ // i += 1;
414+ // warn!("do_write_frame_to_guest iteration: {i}");
400415 let head_descriptor = queue. pop_or_enable_notification ( mem) . ok_or_else ( || {
401416 self . metrics . no_rx_avail_buffer . inc ( ) ;
402417 FrontendError :: EmptyQueue
@@ -410,8 +425,15 @@ impl Net {
410425 self . rx_header_addr = Some ( head_descriptor. addr ) ;
411426 }
412427
428+ // warn!("do_write_frame_to_guest: head index: {}", head_index);
429+
413430 match Self :: write_to_descriptor_chain ( mem, bytes, head_descriptor, & self . metrics ) {
414431 Ok ( ( remainin_chunk, num_descriptors_used) ) => {
432+ // warn!(
433+ // "remainin_chunk len: {}, num_descriptors_used: {}",
434+ // remainin_chunk.len(),
435+ // num_descriptors_used
436+ // );
415437 self . rx_bytes_send += self . rx_bytes_read - remainin_chunk. len ( ) ;
416438 self . rx_descriptors_used += num_descriptors_used;
417439 let bytes_written =
@@ -442,6 +464,10 @@ impl Net {
442464 )
443465 } ;
444466 header. num_buffers = self . rx_descriptors_used ;
467+ // warn!(
468+ // "Updating header with num_buffers: {}",
469+ // self.rx_descriptors_used
470+ // );
445471
446472 self . rx_bytes_send = 0 ;
447473 self . rx_header_addr = None ;
@@ -553,7 +579,10 @@ impl Net {
553579 }
554580
555581 fn process_rx ( & mut self ) -> Result < ( ) , DeviceError > {
582+ // warn!("process_rx");
556583 // Read as many frames as possible.
584+
585+ let t = std:: time:: Instant :: now ( ) ;
557586 loop {
558587 match self . read_from_mmds_or_tap ( ) {
559588 Ok ( _) => {
@@ -581,6 +610,7 @@ impl Net {
581610 }
582611 }
583612 }
613+ warn ! ( "process_rx took: {}ns" , t. elapsed( ) . as_nanos( ) ) ;
584614
585615 // At this point we processed as many Rx frames as possible.
586616 // We have to wake the guest if at least one descriptor chain has been used.
@@ -589,6 +619,7 @@ impl Net {
589619
590620 // Process the deferred frame first, then continue reading from tap.
591621 fn handle_deferred_frame ( & mut self ) -> Result < ( ) , DeviceError > {
622+ warn ! ( "handle_deferred_frame" ) ;
592623 if self . rate_limited_rx_single_frame ( ) {
593624 self . rx_deferred_frame = false ;
594625 // process_rx() was interrupted possibly before consuming all
0 commit comments