use anyhow::{Error}; use futures::*; extern crate proxmox_backup; use proxmox_backup::backup::*; // Test Chunker with real data read from a file. // // To generate some test input use: // # dd if=/dev/urandom of=random-test.dat bs=1M count=1024 iflag=fullblock // // Note: I can currently get about 830MB/s fn main() { if let Err(err) = proxmox_backup::tools::runtime::main(run()) { panic!("ERROR: {}", err); } } async fn run() -> Result<(), Error> { let file = tokio::fs::File::open("random-test.dat").await?; let stream = tokio_util::codec::FramedRead::new(file, tokio_util::codec::BytesCodec::new()) .map_ok(|bytes| bytes.to_vec()) .map_err(Error::from); //let chunk_stream = FixedChunkStream::new(stream, 4*1024*1024); let mut chunk_stream = ChunkStream::new(stream, None); let start_time = std::time::Instant::now(); let mut repeat = 0; let mut stream_len = 0; while let Some(chunk) = chunk_stream.try_next().await? { if chunk.len() > 16*1024*1024 { panic!("Chunk too large {}", chunk.len()); } repeat += 1; stream_len += chunk.len(); println!("Got chunk {}", chunk.len()); } let speed = ((stream_len*1_000_000)/(1024*1024))/(start_time.elapsed().as_micros() as usize); println!("Uploaded {} chunks in {} seconds ({} MB/s).", repeat, start_time.elapsed().as_secs(), speed); println!("Average chunk size was {} bytes.", stream_len/repeat); println!("time per request: {} microseconds.", (start_time.elapsed().as_micros())/(repeat as u128)); Ok(()) }