pub struct FlashTimings {
pub channels: u32,
pub dies_per_channel: u32,
pub planes_per_die: u32,
pub pages_per_block: u32,
pub zone_pages: u64,
pub t_r: u64,
pub t_prog: u64,
pub t_bers: u64,
pub data_cycles: u64,
pub suspend_window: u64,
pub ldpc_retry_worst: u64,
}Expand description
ZNS-TLC-class NAND timing + geometry, in CONTROLLER CLOCK CYCLES. Engineering-realistic ratios (read : program : erase ≈ 1 : 10 : 100); the table is DATA for the flash architect to correct, and every measurement re-derives from it.
Fields§
§channels: u32Independent data-bus channels.
dies_per_channel: u32Dies per channel — the parallelism that lets one die erase while others read.
planes_per_die: u32Planes per die (multi-plane program/erase; reads serialize on the die here).
pages_per_block: u32Pages per erase block.
zone_pages: u64Pages per zone (append-only unit; a zone reset erases its blocks).
t_r: u64Page read (sense) latency.
t_prog: u64Page program latency.
t_bers: u64Block erase latency (~10³× a read — the tail source we schedule away).
data_cycles: u64Channel cycles to move one page of data in/out.
suspend_window: u64Max cycles a program/erase may be SUSPENDED to let a read through (Tier-B budget).
ldpc_retry_worst: u64Bounded worst-case extra latency of a soft-LDPC read-retry (Tier-B envelope).
Implementations§
Source§impl FlashTimings
impl FlashTimings
Sourcepub fn zns_tlc() -> Self
pub fn zns_tlc() -> Self
A host-managed ZNS-TLC-class part: 8 channels × 8 dies (enough die depth to hide the sense latency behind the channel data-out), 100× erase.
Sourcepub fn pslc_fast() -> Self
pub fn pslc_fast() -> Self
A pSLC fast-path part: faster sense/program/erase, tighter suspend — the crown-tier medium where erases fit in per-die idle gaps with room to spare.
Sourcepub fn read_latency_bound(&self) -> u64
pub fn read_latency_bound(&self) -> u64
The worst-case read latency the tier promises: sense + data-out, plus (Tier B) a budgeted suspend and a bounded LDPC retry. A read never exceeds this.
Trait Implementations§
Source§impl Clone for FlashTimings
impl Clone for FlashTimings
Source§fn clone(&self) -> FlashTimings
fn clone(&self) -> FlashTimings
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for FlashTimings
impl RefUnwindSafe for FlashTimings
impl Send for FlashTimings
impl Sync for FlashTimings
impl Unpin for FlashTimings
impl UnsafeUnpin for FlashTimings
impl UnwindSafe for FlashTimings
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.