From 8267acfcba7bfa8584fb837f3aeddbd839da1731 Mon Sep 17 00:00:00 2001 From: Astro Date: Wed, 24 Jun 2020 02:08:37 +0200 Subject: [PATCH] eth: latter tuning --- experiments/src/main.rs | 6 +++--- libboard_zynq/src/eth/rx.rs | 12 +++++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/experiments/src/main.rs b/experiments/src/main.rs index 8e685f0..17a0d25 100644 --- a/experiments/src/main.rs +++ b/experiments/src/main.rs @@ -184,10 +184,10 @@ if false { let eth = zynq::eth::Eth::default(HWADDR.clone()); println!("Eth on"); - const RX_LEN: usize = 4096; + const RX_LEN: usize = 8192; // Number of transmission buffers (minimum is two because with // one, duplicate packet transmission occurs) - const TX_LEN: usize = 4096; + const TX_LEN: usize = 8192; let eth = eth.start_rx(RX_LEN); let mut eth = eth.start_tx(TX_LEN); @@ -217,7 +217,7 @@ if false { while let Ok(stream) = TcpStream::accept(TCP_PORT, 0x10_0000, 0x10_0000).await { let stats_tx = stats_tx.clone(); task::spawn(async move { - let tx_data = (0..=255).take(65536).collect::>(); + let tx_data = (0..=255).take(8192).collect::>(); loop { // const CHUNK_SIZE: usize = 65536; // match stream.send((0..=255).cycle().take(CHUNK_SIZE)).await { diff --git a/libboard_zynq/src/eth/rx.rs b/libboard_zynq/src/eth/rx.rs index 4fb8ac5..e2d9396 100644 --- a/libboard_zynq/src/eth/rx.rs +++ b/libboard_zynq/src/eth/rx.rs @@ -83,6 +83,8 @@ impl DescList { entry.word1.write( DescWord1::zeroed() ); + l2cache().invalidate_slice(&mut buffer[..]); + dcci_slice(&buffer[..]); } DescList { @@ -108,9 +110,9 @@ impl DescList { let word1 = entry.word1.read(); let len = word1.frame_length_lsbs().into(); let buffer = &mut self.buffers[self.next][0..len]; - // Invalidate caches for packet buffer - l2cache().invalidate_slice(&mut buffer[..]); - dcci_slice(&buffer[..]); + // // Invalidate caches for packet buffer + // l2cache().invalidate_slice(&mut buffer[..]); + // dcci_slice(&buffer[..]); self.next += 1; if self.next >= list_len { @@ -139,6 +141,10 @@ pub struct PktRef<'a> { impl<'a> Drop for PktRef<'a> { fn drop(&mut self) { + // Flush buffer from cache, to be filled by the peripheral + // before next read + l2cache().invalidate_slice(self.buffer); + dcci_slice(self.buffer); self.entry.word0.modify(|_, w| w.used(false)); dmb();