diff --git a/core/benches/shredder.rs b/core/benches/shredder.rs new file mode 100644 index 0000000000..10b1e82047 --- /dev/null +++ b/core/benches/shredder.rs @@ -0,0 +1,34 @@ +#![feature(test)] + +extern crate test; + +use solana_core::shred::{Shredder, RECOMMENDED_FEC_RATE}; +use solana_sdk::signature::{Keypair, KeypairUtil}; +use std::sync::Arc; +use test::Bencher; + +#[bench] +fn bench_shredder(bencher: &mut Bencher) { + let kp = Arc::new(Keypair::new()); + // 1Mb + let data = vec![0u8; 1000 * 1000]; + bencher.iter(|| { + let mut shredder = Shredder::new(1, 0, RECOMMENDED_FEC_RATE, &kp, 0).unwrap(); + bincode::serialize_into(&mut shredder, &data).unwrap(); + }) +} + +#[bench] +fn bench_deshredder(bencher: &mut Bencher) { + let kp = Arc::new(Keypair::new()); + // 10MB + let data = vec![0u8; 10000 * 1000]; + let mut shredded = Shredder::new(1, 0, 0.0, &kp, 0).unwrap(); + let _ = bincode::serialize_into(&mut shredded, &data); + shredded.finalize_data(); + let (_, shreds): (Vec<_>, Vec<_>) = shredded.shred_tuples.into_iter().unzip(); + bencher.iter(|| { + let raw = &mut Shredder::deshred(&shreds).unwrap(); + assert_ne!(raw.len(), 0); + }) +} diff --git a/core/src/shred.rs b/core/src/shred.rs index 472a704b26..57abbc773f 100644 --- a/core/src/shred.rs +++ b/core/src/shred.rs @@ -648,9 +648,8 @@ impl Shredder { /// Finalize a data shred. Update the shred index for the next shred fn finalize_data_shred(&mut self) { - let mut data = vec![0; PACKET_DATA_SIZE]; - let mut wr = io::Cursor::new(&mut data[..]); - bincode::serialize_into(&mut wr, &self.active_shred).expect("Failed to serialize shred"); + let mut data = Vec::with_capacity(PACKET_DATA_SIZE); + bincode::serialize_into(&mut data, &self.active_shred).expect("Failed to serialize shred"); self.active_offset = 0; self.index += 1;