Struct RuntimeConfig
pub struct RuntimeConfig {Show 16 fields
pub enabled: bool,
pub thread_name: String,
pub store: Option<Arc<dyn ArtifactStore>>,
pub tuning: RuntimeTuning,
pub dump_dir: Option<PathBuf>,
pub debug_assertions: bool,
pub single_error: bool,
pub no_dedup: bool,
pub no_dse: bool,
pub gas_params: Option<GasParams>,
pub host: HostConfig,
pub aot: bool,
pub jit_mode: JitMode,
pub jit_helper_path: Option<PathBuf>,
pub blocking: bool,
pub on_compilation: Option<Arc<dyn Fn(CompilationEvent) + Sync + Send>>,
}jit only.Expand description
Runtime configuration.
Fields§
§enabled: boolWhether compiled-code lookup is enabled.
Defaults to false (safe rollout default).
thread_name: StringName for the backend thread.
Defaults to "evm2-jit-backend".
store: Option<Arc<dyn ArtifactStore>>Artifact store for loading precompiled AOT artifacts.
None means no AOT preload—only JIT will populate the map (in later phases).
tuning: RuntimeTuningTuning knobs.
dump_dir: Option<PathBuf>Base directory for compiler debug dumps.
When set, the compiler dumps IR, assembly, and bytecode for each compiled contract
to {dump_dir}/{spec_id}/{code_hash}/.
Defaults to None (no dumps).
debug_assertions: boolEnable debug assertions in compiled code.
When true, the compiler inserts runtime checks (e.g. stack bounds)
that panic! on violation. Useful for diagnosing JIT correctness bugs.
Defaults to false.
single_error: boolCollapse every JIT failure path to a single
OutOfGas instruction result constant.
Failures (stack under/overflow, invalid jump, real OOG, invalid opcode, etc.) are
semantically interchangeable for callers that only branch on success vs failure, so
this lets LLVM DCE the per-failure-site materialization and the failure-block phi.
Successful exits (STOP/RETURN/REVERT) keep their original codes.
This is a deliberate trade-off: the compiled function reports OutOfGas where the
interpreter reports the real halt reason (for example, an invalid jump). Preserving the
reasons (false) makes the JIT 4.0% larger, compile 10.7% more instructions, and
execute 3.8% more instructions in total across the benchmarks (onchain_lm_v2 +4.3%).
Defaults to true.
no_dedup: boolDisable the block deduplication pass.
When true, the dedup pass that merges identical basic blocks is skipped.
Useful for isolating dedup-related JIT correctness bugs.
Defaults to false.
no_dse: boolDisable the dead store elimination pass.
When true, DSE is skipped. Useful for debugging JIT correctness issues
where DSE incorrectly eliminates live stack operations.
Defaults to false.
gas_params: Option<GasParams>Custom gas parameters for compile-time gas folding.
Overrides the default gas schedule derived from spec_id when compiling
bytecode. Useful for custom chains with non-standard gas costs (e.g.
modified SSTORE, CREATE, or EXP costs).
When None, the compiler uses the evm2 spec gas schedule.
Defaults to None.
host: HostConfigHost ABI used by in-process compiled code.
aot: boolAOT mode: observed misses are promoted to AOT compilation instead of JIT.
Requires store to be set, and is incompatible with
JitMode::OutOfProcess.
Defaults to false.
jit_mode: JitModeWhere JIT compilation work runs.
Defaults to JitMode::InProcess.
jit_helper_path: Option<PathBuf>Helper executable used when jit_mode
is JitMode::OutOfProcess.
When None, the runtime spawns the running executable and expects it
to call super::maybe_run_jit_helper during startup.
Defaults to None.
blocking: boolBlocking mode: every lookup synchronously JIT-compiles on miss.
When true, lookup() behaves like
lookup_blocking(): if the
compiled function is not already resident, the calling thread blocks
until JIT compilation completes. This implies enabled = true,
jit_hot_threshold = 0, and jit_max_bytecode_len = 0 (no size limit), so every
non-empty frame is compiled.
A frame still runs on the interpreter when compilation fails, times out
(sync_compile_timeout), is dropped because the pending-job cap or the worker pool is
full, or the program is evicted before use. Each such frame is counted in
interpreter_fallbacks.
Intended for debugging and testing only — not for production use.
Defaults to false.
on_compilation: Option<Arc<dyn Fn(CompilationEvent) + Sync + Send>>Callback invoked after each compilation completes (success or failure).
Defaults to None.
Implementations§
§impl RuntimeConfig
impl RuntimeConfig
pub fn with_env_overrides(self) -> Result<RuntimeConfig, Report>
pub fn with_env_overrides(self) -> Result<RuntimeConfig, Report>
Applies runtime environment overrides.
Recognized variables are EVM2_JIT_MODE, EVM2_JIT_HELPER_PATH,
EVM2_JIT_HELPER_MEMORY_LIMIT_BYTES, and EVM2_JIT_HELPER_CPU_COUNT.
Trait Implementations§
§impl Clone for RuntimeConfig
impl Clone for RuntimeConfig
§fn clone(&self) -> RuntimeConfig
fn clone(&self) -> RuntimeConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for RuntimeConfig
impl Debug for RuntimeConfig
§impl Default for RuntimeConfig
impl Default for RuntimeConfig
§fn default() -> RuntimeConfig
fn default() -> RuntimeConfig
Auto Trait Implementations§
impl !RefUnwindSafe for RuntimeConfig
impl !UnwindSafe for RuntimeConfig
impl Freeze for RuntimeConfig
impl Send for RuntimeConfig
impl Sync for RuntimeConfig
impl Unpin for RuntimeConfig
impl UnsafeUnpin for RuntimeConfig
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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 moreimpl<T> MaybeDebug for Twhere
T: Debug,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.§impl<T> TryConv for T
impl<T> TryConv for T
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
Source§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 712 bytes