Expand description
Simulacra: A deterministic discrete-event simulation engine.
Simulacra is designed for modeling message flow across large computer networks with pluggable latency, jitter, and failure models.
§Core Concepts
- Time: Simulated time advances by events, not wall clock time
- Events: The atomic units of causality, ordered by time and sequence
- Determinism: Given the same seed and inputs, simulations produce identical results
§Example
use simulacra::{Simulation, Time, Duration};
// Define your event type
#[derive(Debug)]
enum Event {
Tick(u32),
}
// Create and run a simulation
let mut sim = Simulation::new();
sim.schedule(Time::from_millis(100), Event::Tick(1));
sim.schedule(Time::from_millis(200), Event::Tick(2));
let stats = sim.run(|sim, event| {
println!("At {}: {:?}", sim.now(), event);
});
println!("Processed {} events", stats.events_processed);§Deterministic Random Numbers
use simulacra::SimRng;
let mut rng = SimRng::new(42);
// Same seed produces identical sequences
let mut rng2 = SimRng::new(42);
assert_eq!(rng.u64(100), rng2.u64(100));Re-exports§
pub use scenario::Scenario;pub use trace::TraceLoadError;pub use trace::ReplayError;pub use trace::TRACE_SCHEMA_VERSION;pub use trace::Trace;pub use trace::TraceEvent;pub use trace::TraceMismatch;pub use trace::TraceRecorder;pub use net::DropPolicy;pub use net::DropReason;pub use net::FixedLatency;pub use net::LatencyModel;pub use net::Message;pub use net::MessageId;pub use net::NetConfig;pub use net::NetEvent;pub use net::NetTraceDropReason;pub use net::NetTraceEvent;pub use net::Network;pub use net::NetworkStats;pub use net::NodeId;pub use net::OverheadPlusJitter;pub use net::PercentageJitter;pub use net::Route;pub use net::RunContext;pub use net::SpikyLatency;pub use net::Topology;pub use net::TopologyBuilder;pub use net::TracedNetwork;pub use net::UniformJitter;pub use task::CancellationToken;pub use task::Either;pub use task::Envelope;pub use task::NodeContext;pub use task::Recv;pub use task::RecvTimeout;pub use task::Select2;pub use task::SendFut;pub use task::Sleep;pub use task::TaskId;pub use task::TaskSim;pub use task::TaskSimBuilder;pub use task::TaskSimStats;pub use task::select2;
Modules§
- net
- Network simulation module.
- parallel
- Parallel execution of independent simulation runs.
- scenario
- Fluent scenario builder for the async task facade.
- task
- Async task facade for node-based simulations.
- trace
- Event tracing and replay for simulation observability.
Structs§
- Duration
- A duration of simulated time.
- Event
Queue - A priority queue of scheduled events.
- Scheduled
- A scheduled event with deterministic ordering.
- SimRng
- A deterministic random number generator for simulations.
- Simulation
- The core simulation engine.
- Simulation
Stats - Statistics about a completed simulation run.
- Time
- A point in simulated time, represented as nanoseconds from simulation start.