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::entry::Entry;
|
||||||
use crate::poh_recorder::WorkingBankEntries;
|
use crate::poh_recorder::WorkingBankEntries;
|
||||||
use crate::result::Result;
|
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_runtime::bank::Bank;
|
||||||
use solana_sdk::signature::Keypair;
|
use solana_sdk::signature::Keypair;
|
||||||
use std::sync::mpsc::Receiver;
|
use std::sync::mpsc::Receiver;
|
||||||
|
@ -88,9 +88,14 @@ pub(super) fn entries_to_shreds(
|
||||||
.for_each(|(i, entries_tuple)| {
|
.for_each(|(i, entries_tuple)| {
|
||||||
let (entries, _): (Vec<_>, Vec<_>) = entries_tuple.into_iter().unzip();
|
let (entries, _): (Vec<_>, Vec<_>) = entries_tuple.into_iter().unzip();
|
||||||
//entries
|
//entries
|
||||||
let mut shredder =
|
let mut shredder = Shredder::new(
|
||||||
Shredder::new(slot, parent_slot, 1.0, keypair, latest_shred_index as u32)
|
slot,
|
||||||
.expect("Expected to create a new shredder");
|
parent_slot,
|
||||||
|
RECOMMENDED_FEC_RATE,
|
||||||
|
keypair,
|
||||||
|
latest_shred_index as u32,
|
||||||
|
)
|
||||||
|
.expect("Expected to create a new shredder");
|
||||||
|
|
||||||
bincode::serialize_into(&mut shredder, &entries)
|
bincode::serialize_into(&mut shredder, &entries)
|
||||||
.expect("Expect to write all entries to shreds");
|
.expect("Expect to write all entries to shreds");
|
||||||
|
|
|
@ -168,7 +168,9 @@ pub enum Shred {
|
||||||
|
|
||||||
/// This limit comes from reed solomon library, but unfortunately they don't have
|
/// This limit comes from reed solomon library, but unfortunately they don't have
|
||||||
/// a public constant defined for it.
|
/// 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 LAST_SHRED_IN_SLOT: u8 = 0b0000_0001;
|
||||||
const DATA_COMPLETE_SHRED: u8 = 0b0000_0010;
|
const DATA_COMPLETE_SHRED: u8 = 0b0000_0010;
|
||||||
|
@ -624,7 +626,8 @@ impl Shredder {
|
||||||
fn generate_coding_shreds(&mut self) {
|
fn generate_coding_shreds(&mut self) {
|
||||||
if self.fec_rate != 0.0 {
|
if self.fec_rate != 0.0 {
|
||||||
let num_data = (self.index - self.fec_set_index) as usize;
|
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 =
|
let session =
|
||||||
Session::new(num_data, num_coding).expect("Failed to create erasure session");
|
Session::new(num_data, num_coding).expect("Failed to create erasure session");
|
||||||
let start_index = self.index - num_data as u32;
|
let start_index = self.index - num_data as u32;
|
||||||
|
|
Loading…
Reference in New Issue