Skip to main content

Crate simulacra

Crate simulacra 

Source
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.
EventQueue
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.
SimulationStats
Statistics about a completed simulation run.
Time
A point in simulated time, represented as nanoseconds from simulation start.