Change erasure ratio to 0.25 and increase data shreds to 16 (#5931)
* Change erasure ratio to 0.25 and increase data shreds to 16 * Fix case where no coding shreds are requested
This commit is contained in:
parent
9e680112e7
commit
14cb6353c0
|
@ -1,7 +1,7 @@
|
|||
use crate::entry::Entry;
|
||||
use crate::poh_recorder::WorkingBankEntries;
|
||||
use crate::result::Result;
|
||||
use crate::shred::{Shred, ShredInfo, Shredder};
|
||||
use crate::shred::{Shred, ShredInfo, Shredder, RECOMMENDED_FEC_RATE};
|
||||
use solana_runtime::bank::Bank;
|
||||
use solana_sdk::signature::Keypair;
|
||||
use std::sync::mpsc::Receiver;
|
||||
|
@ -88,8 +88,13 @@ pub(super) fn entries_to_shreds(
|
|||
.for_each(|(i, entries_tuple)| {
|
||||
let (entries, _): (Vec<_>, Vec<_>) = entries_tuple.into_iter().unzip();
|
||||
//entries
|
||||
let mut shredder =
|
||||
Shredder::new(slot, parent_slot, 1.0, keypair, latest_shred_index as u32)
|
||||
let mut shredder = Shredder::new(
|
||||
slot,
|
||||
parent_slot,
|
||||
RECOMMENDED_FEC_RATE,
|
||||
keypair,
|
||||
latest_shred_index as u32,
|
||||
)
|
||||
.expect("Expected to create a new shredder");
|
||||
|
||||
bincode::serialize_into(&mut shredder, &entries)
|
||||
|
|
|
@ -168,7 +168,9 @@ pub enum Shred {
|
|||
|
||||
/// This limit comes from reed solomon library, but unfortunately they don't have
|
||||
/// a public constant defined for it.
|
||||
const MAX_DATA_SHREDS_PER_FEC_BLOCK: u32 = 4;
|
||||
const MAX_DATA_SHREDS_PER_FEC_BLOCK: u32 = 16;
|
||||
/// Based on rse benchmarks, the optimal erasure config uses 16 data shreds and 4 coding shreds
|
||||
pub const RECOMMENDED_FEC_RATE: f32 = 0.25;
|
||||
|
||||
const LAST_SHRED_IN_SLOT: u8 = 0b0000_0001;
|
||||
const DATA_COMPLETE_SHRED: u8 = 0b0000_0010;
|
||||
|
@ -624,7 +626,8 @@ impl Shredder {
|
|||
fn generate_coding_shreds(&mut self) {
|
||||
if self.fec_rate != 0.0 {
|
||||
let num_data = (self.index - self.fec_set_index) as usize;
|
||||
let num_coding = (self.fec_rate * num_data as f32) as usize;
|
||||
// always generate at least 1 coding shred even if the fec_rate doesn't allow it
|
||||
let num_coding = 1.max((self.fec_rate * num_data as f32) as usize);
|
||||
let session =
|
||||
Session::new(num_data, num_coding).expect("Failed to create erasure session");
|
||||
let start_index = self.index - num_data as u32;
|
||||
|
|
Loading…
Reference in New Issue