@@ -755,9 +755,16 @@ pub fn run_fwd_maglevtest(net: &dyn Net, pkt_size: u16) -> Result<()> {
755
755
let mut fwd_sum: usize = 0 ;
756
756
757
757
println ! ( "======== Starting maglev test ==========" ) ;
758
+ let stats_start = net. get_stats ( ) . unwrap ( ) ?;
759
+
758
760
let start = rdtsc ( ) ;
759
761
let end = start + 30 * CPU_MHZ ;
760
762
763
+ let mut alloc_count = 0 ;
764
+ let mut alloc_elapsed = 0 ;
765
+
766
+ let mut mswap_elapsed = 0 ;
767
+
761
768
let mut tx_elapsed = 0 ;
762
769
let mut rx_elapsed = 0 ;
763
770
@@ -778,6 +785,7 @@ pub fn run_fwd_maglevtest(net: &dyn Net, pkt_size: u16) -> Result<()> {
778
785
779
786
//println!("rx: submitted {} collect {}", ret, tx_packets.len());
780
787
788
+ let ms_start = rdtsc ( ) ;
781
789
for pkt in tx_packets. iter_mut ( ) {
782
790
let backend = {
783
791
if let Some ( hash) = packettool:: get_flowhash ( & pkt) {
@@ -794,6 +802,7 @@ pub fn run_fwd_maglevtest(net: &dyn Net, pkt_size: u16) -> Result<()> {
794
802
}
795
803
//}
796
804
}
805
+ mswap_elapsed += rdtsc ( ) - ms_start;
797
806
798
807
submit_tx += tx_packets. len ( ) ;
799
808
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<()> {
806
815
807
816
if rx_packets. len ( ) == 0 && tx_packets. len ( ) < batch_sz * 4 {
808
817
//println!("-> Allocating new rx_ptx batch");
818
+ let alloc_rdstc_start = rdtsc ( ) ;
809
819
for i in 0 ..batch_sz {
810
820
rx_packets. push_front ( Vec :: with_capacity ( 2048 ) ) ;
811
821
}
822
+ alloc_elapsed += rdtsc ( ) - alloc_rdstc_start;
812
823
}
813
824
814
825
if rdtsc ( ) > end {
@@ -817,25 +828,49 @@ pub fn run_fwd_maglevtest(net: &dyn Net, pkt_size: u16) -> Result<()> {
817
828
}
818
829
819
830
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) ;
827
866
}
828
867
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
+
839
874
Ok ( ( ) )
840
875
}
841
876
@@ -1176,7 +1211,7 @@ pub fn run_maglev_fwd_udptest_rref(net: &dyn Net, pkt_len: usize) -> Result<()>
1176
1211
print_hist ! ( submit_tx_hist) ;
1177
1212
1178
1213
println ! ( "+++++++++++++++++++++++++++++++++++++++++++++++++" ) ;
1179
- maglev. dump_stats ( ) ;
1214
+ // maglev.dump_stats();
1180
1215
1181
1216
Ok ( ( ) )
1182
1217
}
0 commit comments