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 UnsafeUnpin 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