Skip to content

Commit 1dee71a

Browse files
committed
Add maglev test (no rref)
1 parent f531926 commit 1dee71a

File tree

2 files changed

+55
-20
lines changed

2 files changed

+55
-20
lines changed

sys/driver/membdev/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@ memcpy = false
4343

4444
[features]
4545
default = [
46-
# "default-memdisk"
46+
"default-memdisk"
4747
]
48-
default-memdisk = []
48+
default-memdisk = []

sys/lib/libbenchnet/src/lib.rs

Lines changed: 53 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)