pub struct StorageConfiguration {Show 18 fields
pub iops: u64,
pub bandwidth: u64,
pub read_latency: LatencyDistribution,
pub write_latency: LatencyDistribution,
pub sync_latency: LatencyDistribution,
pub read_fault_probability: f64,
pub write_fault_probability: f64,
pub crash_fault_probability: f64,
pub misdirect_write_probability: f64,
pub misdirect_read_probability: f64,
pub phantom_write_probability: f64,
pub sync_failure_probability: f64,
pub disk_stall_probability: f64,
pub disk_stall_duration: Duration,
pub disk_throttle_probability: f64,
pub disk_throttle_duration: Duration,
pub disk_throttle_iops_multiplier: f64,
pub disk_throttle_bandwidth_multiplier: f64,
}Expand description
Configuration for storage simulation parameters.
This struct contains all settings related to storage simulation including performance characteristics and fault injection probabilities.
Fields§
§iops: u64I/O operations per second limit.
Typical values:
NVMeSSD: 100,000-500,000 IOPS- SATA SSD: 25,000-100,000 IOPS
- HDD: 100-200 IOPS
bandwidth: u64Maximum bandwidth in bytes per second.
Typical values:
NVMeSSD: 3,000-7,000 MB/s- SATA SSD: 500-600 MB/s
- HDD: 100-200 MB/s
read_latency: LatencyDistributionLatency distribution for read operations.
Typical values:
NVMeSSD: 20-100µs- SATA SSD: 50-200µs
- HDD: 2-10ms
write_latency: LatencyDistributionLatency distribution for write operations.
Typical values:
NVMeSSD: 20-100µs- SATA SSD: 100-500µs
- HDD: 2-10ms
sync_latency: LatencyDistributionLatency distribution for sync/flush operations.
Sync operations ensure data durability and typically take longer than regular read/write operations.
read_fault_probability: f64Probability of read operation failing (0.0 - 1.0).
§Real-World Scenario
Simulates disk read errors, ECC failures, or media degradation.
write_fault_probability: f64Probability of write operation failing (0.0 - 1.0).
§Real-World Scenario
Simulates write failures due to disk full, bad sectors, or media errors.
crash_fault_probability: f64Probability of crash fault during operation (0.0 - 1.0).
§Real-World Scenario
Simulates sudden power loss or system crash during I/O. Tests crash consistency and recovery logic.
misdirect_write_probability: f64Probability of write landing at wrong location (0.0 - 1.0).
§Real-World Scenario
Simulates misdirected writes where data is written to a different
block than intended. Tests checksum validation and corruption detection.
TigerBeetle ref: storage fault injection
misdirect_read_probability: f64Probability of read returning data from wrong location (0.0 - 1.0).
§Real-World Scenario
Simulates misdirected reads where data is read from a different
block than intended. Tests checksum validation.
TigerBeetle ref: storage fault injection
phantom_write_probability: f64Probability of write appearing to succeed but not persisting (0.0 - 1.0).
§Real-World Scenario
Simulates phantom writes where the write reports success but data is lost before reaching stable storage. Tests durability guarantees.
sync_failure_probability: f64Probability of sync/flush operation failing (0.0 - 1.0).
§Real-World Scenario
Simulates fsync failures which can indicate serious storage issues. Tests error handling in durability-critical code paths.
disk_stall_probability: f64Per-operation probability of entering a stall episode (0.0 - 1.0).
During a stall the disk is frozen until the episode expires; any I/O scheduled in that window waits out the remaining time before completing.
disk_stall_duration: DurationHow long a stall episode freezes the disk once entered.
disk_throttle_probability: f64Per-operation probability of entering a throttle episode (0.0 - 1.0).
During a throttle the effective IOPS/bandwidth are divided by the configured multipliers for the duration of the episode.
disk_throttle_duration: DurationHow long a throttle episode reduces throughput once entered.
disk_throttle_iops_multiplier: f64Divisor applied to effective IOPS during a throttle episode (>= 1.0).
E.g. 10.0 makes the disk handle one tenth its normal IOPS.
disk_throttle_bandwidth_multiplier: f64Divisor applied to effective bandwidth during a throttle episode (>= 1.0).
Implementations§
Source§impl StorageConfiguration
impl StorageConfiguration
Sourcepub fn random_for_seed() -> Self
pub fn random_for_seed() -> Self
Create a randomized storage configuration for chaos testing.
Uses deterministic random values based on the simulation seed to create varied configurations across test runs.
Sourcepub fn swarm_for_seed() -> Self
pub fn swarm_for_seed() -> Self
Create a swarm-testing storage configuration for seed-based testing.
Starts from random_for_seed, then disables each
fault family with ~50% probability (drawn from the independent CONFIG_RNG
stream). This implements swarm testing (Groce et al., ISSTA 2012): each
seed exercises a random subset of storage fault families — including the
all-off subset — instead of every family being slightly on at once (which
lets families crowd each other out, the passive-suppression anti-pattern).
Sourcepub fn apply_buggify_knobs(&mut self)
pub fn apply_buggify_knobs(&mut self)
Spike selected disk knob magnitudes under buggify (FDB’s
if (randomize && BUGGIFY) KNOB = random(lo, hi)).
Composes on top of random_for_seed /
swarm_for_seed: each knob keeps its sampled value
unless its own buggify_knob! call site fires for the
seed. Demonstrates both throttling down (IOPS/bandwidth → extreme-slow
disk) and spiking a fault rate up. A representative subset — extend by
adding more buggify_knob! lines.
Sourcepub fn fast_local() -> Self
pub fn fast_local() -> Self
Create a configuration optimized for fast local testing.
Minimal latencies and no fault injection for predictable, fast test execution.
Trait Implementations§
Source§impl Clone for StorageConfiguration
impl Clone for StorageConfiguration
Source§fn clone(&self) -> StorageConfiguration
fn clone(&self) -> StorageConfiguration
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more