pub struct ExperimentalOptions {Show 23 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>,
}
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
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_name() -> String
fn schema_name() -> String
source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
source§fn json_schema(gen: &mut SchemaGenerator) -> Schema
fn json_schema(gen: &mut SchemaGenerator) -> Schema
source§fn is_referenceable() -> bool
fn is_referenceable() -> 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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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