@@ -755,9 +755,16 @@ pub fn run_fwd_maglevtest(net: &dyn Net, pkt_size: u16) -> Result<()> {
755755 let mut fwd_sum: usize = 0 ;
756756
757757 println ! ( "======== Starting maglev test ==========" ) ;
758+ let stats_start = net. get_stats ( ) . unwrap ( ) ?;
759+
758760 let start = rdtsc ( ) ;
759761 let end = start + 30 * CPU_MHZ ;
760762
763+ let mut alloc_count = 0 ;
764+ let mut alloc_elapsed = 0 ;
765+
766+ let mut mswap_elapsed = 0 ;
767+
761768 let mut tx_elapsed = 0 ;
762769 let mut rx_elapsed = 0 ;
763770
@@ -778,6 +785,7 @@ pub fn run_fwd_maglevtest(net: &dyn Net, pkt_size: u16) -> Result<()> {
778785
779786 //println!("rx: submitted {} collect {}", ret, tx_packets.len());
780787
788+ let ms_start = rdtsc ( ) ;
781789 for pkt in tx_packets. iter_mut ( ) {
782790 let backend = {
783791 if let Some ( hash) = packettool:: get_flowhash ( & pkt) {
@@ -794,6 +802,7 @@ pub fn run_fwd_maglevtest(net: &dyn Net, pkt_size: u16) -> Result<()> {
794802 }
795803 //}
796804 }
805+ mswap_elapsed += rdtsc ( ) - ms_start;
797806
798807 submit_tx += tx_packets. len ( ) ;
799808 submit_tx_hist. record ( tx_packets. len ( ) as u64 ) ;
@@ -806,9 +815,11 @@ pub fn run_fwd_maglevtest(net: &dyn Net, pkt_size: u16) -> Result<()> {
806815
807816 if rx_packets. len ( ) == 0 && tx_packets. len ( ) < batch_sz * 4 {
808817 //println!("-> Allocating new rx_ptx batch");
818+ let alloc_rdstc_start = rdtsc ( ) ;
809819 for i in 0 ..batch_sz {
810820 rx_packets. push_front ( Vec :: with_capacity ( 2048 ) ) ;
811821 }
822+ alloc_elapsed += rdtsc ( ) - alloc_rdstc_start;
812823 }
813824
814825 if rdtsc ( ) > end {
@@ -817,25 +828,49 @@ pub fn run_fwd_maglevtest(net: &dyn Net, pkt_size: u16) -> Result<()> {
817828 }
818829
819830 let elapsed = rdtsc ( ) - start;
820- for hist in alloc:: vec![ submit_rx_hist, submit_tx_hist] {
821- println ! ( "hist:" ) ;
822- // Iterate buckets that have observations
823- for bucket in hist. iter ( ) . filter ( |b| b. count > 0 ) {
824- print ! ( "({:5}, {:5}): {}" , bucket. start, bucket. end, bucket. count) ;
825- print ! ( "\n " ) ;
826- }
831+
832+ let mut stats_end = net. get_stats ( ) . unwrap ( ) ?;
833+
834+ stats_end. stats_diff ( stats_start) ;
835+
836+ let adj_runtime = elapsed as f64 / CPU_MHZ as f64 ;
837+
838+ if sum > 0 && fwd_sum > 0 {
839+ println ! ( "runtime: {:.2} seconds" , adj_runtime) ;
840+
841+ println ! ( "Received packets: {} forwarded packets: {}" , sum, fwd_sum) ;
842+
843+ println ! ( "Rx: {} packets took {} cycles (avg = {})" , sum, rx_elapsed, rx_elapsed as f64 / sum as f64 ) ;
844+
845+ println ! ( "mac_swap: {} packets took {} cycles (avg = {})" , sum, mswap_elapsed, mswap_elapsed as f64 / sum as f64 ) ;
846+
847+ println ! ( "Tx: {} packets took {} cycles (avg = {})" , fwd_sum, tx_elapsed, tx_elapsed as f64 / fwd_sum as f64 ) ;
848+
849+ println ! ( "magleve_fwd : Forwarding {} packets took {} cycles (avg = {})" , fwd_sum, elapsed,
850+ elapsed as f64 / fwd_sum as f64 ) ;
851+
852+ let done_rx = net. poll ( & mut rx_packets, false ) . unwrap ( ) ?;
853+ let done_tx = net. poll ( & mut tx_packets, true ) . unwrap ( ) ?;
854+
855+ println ! ( "Reaped rx {} packets tx {} packets" , done_rx, done_tx) ;
856+
857+ println ! ( "Device Stats\n {}" , stats_end) ;
858+
859+ println ! ( "Tx Pkts/s {:.2}" , stats_end. tx_dma_ok as f64 / adj_runtime as f64 ) ;
860+ println ! ( "Rx Pkts/s {:.2}" , stats_end. rx_dma_ok as f64 / adj_runtime as f64 ) ;
861+
862+ println ! ( "Number of new allocations {}, took {} cycles (avg = {})" , alloc_count * batch_sz, alloc_elapsed,
863+ alloc_elapsed as f64 / ( alloc_count * batch_sz) as f64 ) ;
864+ } else {
865+ println ! ( "Test failed! No packets Forwarded! Rxed {}, Txed {}" , sum, fwd_sum) ;
827866 }
828867
829- println ! ( "Received {} forwarded {}" , sum, fwd_sum) ;
830- println ! ( " ==> submit_rx {} (avg {}) submit_tx {} (avg {}) loop_count {}" ,
831- submit_rx, submit_rx / loop_count, submit_tx, submit_tx / loop_count, loop_count) ;
832- println ! ( " ==> rx batching {}B: {} packets took {} cycles (avg = {})" ,
833- pkt_size, sum, rx_elapsed, rx_elapsed / core:: cmp:: max( sum as u64 , 1 ) ) ;
834- println ! ( " ==> tx batching {}B: {} packets took {} cycles (avg = {})" ,
835- pkt_size, fwd_sum, tx_elapsed, tx_elapsed / core:: cmp:: max( fwd_sum as u64 , 1 ) ) ;
836- println ! ( "==> maglev fwd batch {}B: {} iterations took {} cycles (avg = {})" , pkt_size, fwd_sum, elapsed, elapsed / core:: cmp:: max( fwd_sum as u64 , 1 ) ) ;
837- // dev.dump_stats();
838- //dev.dump_tx_descs();
868+ print_hist ! ( submit_rx_hist) ;
869+
870+ print_hist ! ( submit_tx_hist) ;
871+
872+ println ! ( "+++++++++++++++++++++++++++++++++++++++++++++++++" ) ;
873+
839874 Ok ( ( ) )
840875}
841876
@@ -1176,7 +1211,7 @@ pub fn run_maglev_fwd_udptest_rref(net: &dyn Net, pkt_len: usize) -> Result<()>
11761211 print_hist ! ( submit_tx_hist) ;
11771212
11781213 println ! ( "+++++++++++++++++++++++++++++++++++++++++++++++++" ) ;
1179- maglev. dump_stats ( ) ;
1214+ // maglev.dump_stats();
11801215
11811216 Ok ( ( ) )
11821217}
0 commit comments