Shred entries in parallel (#6180)
* Make shredding more parallel * Fix erasure tests * Fix replicator test * Remove UnfinishedSlotInfo
This commit is contained in:
@ -2,7 +2,12 @@
|
||||
|
||||
extern crate test;
|
||||
|
||||
use solana_core::shred::{Shredder, RECOMMENDED_FEC_RATE};
|
||||
use solana_core::entry::create_ticks;
|
||||
use solana_core::shred::{
|
||||
max_ticks_per_shred, Shredder, RECOMMENDED_FEC_RATE, SIZE_OF_DATA_SHRED_HEADER,
|
||||
};
|
||||
use solana_sdk::hash::Hash;
|
||||
use solana_sdk::packet::PACKET_DATA_SIZE;
|
||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||
use std::sync::Arc;
|
||||
use test::Bencher;
|
||||
@ -10,24 +15,29 @@ use test::Bencher;
|
||||
#[bench]
|
||||
fn bench_shredder(bencher: &mut Bencher) {
|
||||
let kp = Arc::new(Keypair::new());
|
||||
// 1Mb
|
||||
let data = vec![0u8; 1000 * 1000];
|
||||
let shred_size = PACKET_DATA_SIZE - *SIZE_OF_DATA_SHRED_HEADER;
|
||||
let num_shreds = ((1000 * 1000) + (shred_size - 1)) / shred_size;
|
||||
// ~1Mb
|
||||
let num_ticks = max_ticks_per_shred() * num_shreds as u64;
|
||||
let entries = create_ticks(num_ticks, Hash::default());
|
||||
bencher.iter(|| {
|
||||
let mut shredder = Shredder::new(1, 0, RECOMMENDED_FEC_RATE, &kp, 0).unwrap();
|
||||
bincode::serialize_into(&mut shredder, &data).unwrap();
|
||||
let shredder = Shredder::new(1, 0, RECOMMENDED_FEC_RATE, kp.clone()).unwrap();
|
||||
shredder.entries_to_shreds(&entries, true, 0);
|
||||
})
|
||||
}
|
||||
|
||||
#[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 shred_size = PACKET_DATA_SIZE - *SIZE_OF_DATA_SHRED_HEADER;
|
||||
// ~10Mb
|
||||
let num_shreds = ((10000 * 1000) + (shred_size - 1)) / shred_size;
|
||||
let num_ticks = max_ticks_per_shred() * num_shreds as u64;
|
||||
let entries = create_ticks(num_ticks, Hash::default());
|
||||
let shredder = Shredder::new(1, 0, RECOMMENDED_FEC_RATE, kp).unwrap();
|
||||
let data_shreds = shredder.entries_to_shreds(&entries, true, 0).0;
|
||||
bencher.iter(|| {
|
||||
let raw = &mut Shredder::deshred(&shredded.shreds).unwrap();
|
||||
let raw = &mut Shredder::deshred(&data_shreds).unwrap();
|
||||
assert_ne!(raw.len(), 0);
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user