pub struct ExperimentalOptions {Show 26 fields
    pub use_sched_fifo: Option<bool>,
    pub use_syscall_counters: Option<bool>,
    pub use_object_counters: Option<bool>,
    pub use_preload_libc: Option<bool>,
    pub use_preload_openssl_rng: Option<bool>,
    pub use_preload_openssl_crypto: Option<bool>,
    pub use_memory_manager: Option<bool>,
    pub use_cpu_pinning: Option<bool>,
    pub use_worker_spinning: Option<bool>,
    pub runahead: Option<NullableOption<Time<TimePrefix>>>,
    pub use_dynamic_runahead: Option<bool>,
    pub socket_send_buffer: Option<Bytes<SiPrefixUpper>>,
    pub socket_send_autotune: Option<bool>,
    pub socket_recv_buffer: Option<Bytes<SiPrefixUpper>>,
    pub socket_recv_autotune: Option<bool>,
    pub interface_qdisc: Option<QDiscMode>,
    pub strace_logging_mode: Option<StraceLoggingMode>,
    pub max_unapplied_cpu_latency: Option<Time<TimePrefix>>,
    pub unblocked_syscall_latency: Option<Time<TimePrefix>>,
    pub unblocked_vdso_latency: Option<Time<TimePrefix>>,
    pub scheduler: Option<Scheduler>,
    pub report_errors_to_stderr: Option<bool>,
    pub use_new_tcp: Option<bool>,
    pub native_preemption_enabled: Option<bool>,
    pub native_preemption_native_interval: Option<Time<TimePrefix>>,
    pub native_preemption_sim_interval: Option<Time<TimePrefix>>,
}Fields§
§use_sched_fifo: Option<bool>Use the SCHED_FIFO scheduler. Requires CAP_SYS_NICE. See sched(7), capabilities(7)
use_syscall_counters: Option<bool>Count the number of occurrences for individual syscalls
use_object_counters: Option<bool>Count object allocations and deallocations. If disabled, we will not be able to detect object memory leaks
use_preload_libc: Option<bool>Preload our libc library for all managed processes for fast syscall interposition when possible.
use_preload_openssl_rng: Option<bool>Preload our OpenSSL RNG library for all managed processes to mitigate non-deterministic use of OpenSSL.
use_preload_openssl_crypto: Option<bool>Preload our OpenSSL crypto library for all managed processes to skip some crypto operations (may speed up simulation if your CPU lacks AES-NI support, but can cause bugs so do not use unless you know what you’re doing).
use_memory_manager: Option<bool>Use the MemoryManager in memory-mapping mode. This can improve
performance, but disables support for dynamically spawning processes
inside the simulation (e.g. the fork syscall).
use_cpu_pinning: Option<bool>Pin each thread and any processes it executes to the same logical CPU Core to improve cache affinity
use_worker_spinning: Option<bool>Each worker thread will spin in a sched_yield loop while waiting for a new task. This is
ignored if not using the thread-per-core scheduler.
runahead: Option<NullableOption<Time<TimePrefix>>>If set, overrides the automatically calculated minimum time workers may run ahead when sending events between nodes
use_dynamic_runahead: Option<bool>Update the minimum runahead dynamically throughout the simulation.
socket_send_buffer: Option<Bytes<SiPrefixUpper>>Initial size of the socket’s send buffer
socket_send_autotune: Option<bool>Enable send window autotuning
socket_recv_buffer: Option<Bytes<SiPrefixUpper>>Initial size of the socket’s receive buffer
socket_recv_autotune: Option<bool>Enable receive window autotuning
interface_qdisc: Option<QDiscMode>The queueing discipline to use at the network interface
strace_logging_mode: Option<StraceLoggingMode>Log the syscalls for each process to individual “strace” files
max_unapplied_cpu_latency: Option<Time<TimePrefix>>Max amount of execution-time latency allowed to accumulate before the clock is moved forward. Moving the clock forward is a potentially expensive operation, so larger values reduce simulation overhead, at the cost of coarser time jumps. Note also that accumulated-but-unapplied latency is discarded when a thread is blocked on a syscall.
unblocked_syscall_latency: Option<Time<TimePrefix>>Simulated latency of an unblocked syscall. For efficiency Shadow only
actually adds this latency if and when max_unapplied_cpu_latency is
reached.
unblocked_vdso_latency: Option<Time<TimePrefix>>Simulated latency of a vdso “syscall”. For efficiency Shadow only
actually adds this latency if and when max_unapplied_cpu_latency is
reached.
scheduler: Option<Scheduler>The host scheduler implementation, which decides how to assign hosts to threads and threads to CPU cores
report_errors_to_stderr: Option<bool>When true, report error-level messages to stderr in addition to logging to stdout.
use_new_tcp: Option<bool>Use the rust TCP implementation
native_preemption_enabled: Option<bool>When true, and when managed code runs for an extended time without returning control to shadow (e.g. by making a syscall), shadow preempts the managed code and moves simulated time forward. This can be used to escape “pure-CPU busy-loops”, but isn’t usually needed, breaks simulation determinism, and significantly affects simulation performance.
native_preemption_native_interval: Option<Time<TimePrefix>>When native_preemption_enabled is true, amount of native CPU-time to
wait before preempting managed code that hasn’t returned control to
shadow. Only supports microsecond granularity, and values below 1 microsecond
are rejected.
native_preemption_sim_interval: Option<Time<TimePrefix>>When native_preemption_enabled is true, amount of simulated time to
consume after native_preemption_native_interval has elapsed without
returning control to shadow.
Implementations§
Source§impl ExperimentalOptions
 
impl ExperimentalOptions
Sourcepub fn with_defaults(self, default: Self) -> Self
 
pub fn with_defaults(self, default: Self) -> Self
Replace unset (None) values of base with values from default.
Trait Implementations§
Source§impl Args for ExperimentalOptions
 
impl Args for ExperimentalOptions
Source§fn augment_args<'b>(__clap_app: Command) -> Command
 
fn augment_args<'b>(__clap_app: Command) -> Command
Source§fn augment_args_for_update<'b>(__clap_app: Command) -> Command
 
fn augment_args_for_update<'b>(__clap_app: Command) -> Command
Command so it can instantiate self via
FromArgMatches::update_from_arg_matches_mut Read moreSource§impl Clone for ExperimentalOptions
 
impl Clone for ExperimentalOptions
Source§fn clone(&self) -> ExperimentalOptions
 
fn clone(&self) -> ExperimentalOptions
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
 
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl CommandFactory for ExperimentalOptions
 
impl CommandFactory for ExperimentalOptions
Source§impl Debug for ExperimentalOptions
 
impl Debug for ExperimentalOptions
Source§impl Default for ExperimentalOptions
 
impl Default for ExperimentalOptions
Source§impl<'de> Deserialize<'de> for ExperimentalOptionswhere
    ExperimentalOptions: Default,
 
impl<'de> Deserialize<'de> for ExperimentalOptionswhere
    ExperimentalOptions: Default,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
    __D: Deserializer<'de>,
 
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
    __D: Deserializer<'de>,
Source§impl FromArgMatches for ExperimentalOptions
 
impl FromArgMatches for ExperimentalOptions
Source§fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
 
fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
Source§fn from_arg_matches_mut(
    __clap_arg_matches: &mut ArgMatches,
) -> Result<Self, Error>
 
fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches, ) -> Result<Self, Error>
Source§fn update_from_arg_matches(
    &mut self,
    __clap_arg_matches: &ArgMatches,
) -> Result<(), Error>
 
fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches, ) -> Result<(), Error>
ArgMatches to self.Source§fn update_from_arg_matches_mut(
    &mut self,
    __clap_arg_matches: &mut ArgMatches,
) -> Result<(), Error>
 
fn update_from_arg_matches_mut( &mut self, __clap_arg_matches: &mut ArgMatches, ) -> Result<(), Error>
ArgMatches to self.Source§impl JsonSchema for ExperimentalOptions
 
impl JsonSchema for ExperimentalOptions
Source§fn schema_id() -> Cow<'static, str>
 
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
 
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
 
fn inline_schema() -> bool
$ref keyword. Read moreSource§impl Merge for ExperimentalOptions
 
impl Merge for ExperimentalOptions
Source§impl Parser for ExperimentalOptions
 
impl Parser for ExperimentalOptions
Source§fn parse_from<I, T>(itr: I) -> Self
 
fn parse_from<I, T>(itr: I) -> Self
Source§fn try_parse_from<I, T>(itr: I) -> Result<Self, Error>
 
fn try_parse_from<I, T>(itr: I) -> Result<Self, Error>
Source§fn update_from<I, T>(&mut self, itr: I)
 
fn update_from<I, T>(&mut self, itr: I)
Auto Trait Implementations§
impl Freeze for ExperimentalOptions
impl RefUnwindSafe for ExperimentalOptions
impl Send for ExperimentalOptions
impl Sync for ExperimentalOptions
impl Unpin for ExperimentalOptions
impl UnwindSafe for ExperimentalOptions
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,
Source§impl<T> IntoEither for T
 
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
 
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
 
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more