diff --git a/polkadot/node/core/pvf/prepare-worker/src/memory_stats.rs b/polkadot/node/core/pvf/prepare-worker/src/memory_stats.rs
index 7904dfa9cb88..c70ff56fc84d 100644
--- a/polkadot/node/core/pvf/prepare-worker/src/memory_stats.rs
+++ b/polkadot/node/core/pvf/prepare-worker/src/memory_stats.rs
@@ -151,7 +151,7 @@ pub mod memory_tracker {
/// Module for dealing with the `ru_maxrss` (peak resident memory) stat from `getrusage`.
///
/// NOTE: `getrusage` with the `RUSAGE_THREAD` parameter is only supported on Linux. `RUSAGE_SELF`
-/// works on MacOS, but we need to get the max rss only for the preparation thread. Gettng it for
+/// works on MacOS, but we need to get the max rss only for the preparation thread. Getting it for
/// the current process would conflate the stats of previous jobs run by the process.
#[cfg(target_os = "linux")]
pub mod max_rss_stat {
diff --git a/substrate/client/cli/src/arg_enums.rs b/substrate/client/cli/src/arg_enums.rs
index 40d86fd97988..67acb82c2c30 100644
--- a/substrate/client/cli/src/arg_enums.rs
+++ b/substrate/client/cli/src/arg_enums.rs
@@ -38,12 +38,6 @@ pub enum WasmtimeInstantiationStrategy {
/// Recreate the instance from scratch on every instantiation. Very slow.
RecreateInstance,
-
- /// Legacy instance reuse mechanism. DEPRECATED. Will be removed in the future.
- ///
- /// Should only be used in case of encountering any issues with the new default
- /// instantiation strategy.
- LegacyInstanceReuse,
}
/// The default [`WasmtimeInstantiationStrategy`].
@@ -92,8 +86,6 @@ pub fn execution_method_from_cli(
sc_service::config::WasmtimeInstantiationStrategy::Pooling,
WasmtimeInstantiationStrategy::RecreateInstance =>
sc_service::config::WasmtimeInstantiationStrategy::RecreateInstance,
- WasmtimeInstantiationStrategy::LegacyInstanceReuse =>
- sc_service::config::WasmtimeInstantiationStrategy::LegacyInstanceReuse,
},
}
}
diff --git a/substrate/client/executor/benches/bench.rs b/substrate/client/executor/benches/bench.rs
index 66a82a175221..86c769f88811 100644
--- a/substrate/client/executor/benches/bench.rs
+++ b/substrate/client/executor/benches/bench.rs
@@ -150,13 +150,6 @@ fn bench_call_instance(c: &mut Criterion) {
let _ = env_logger::try_init();
let strategies = [
- (
- "legacy_instance_reuse",
- Method::Compiled {
- instantiation_strategy: InstantiationStrategy::LegacyInstanceReuse,
- precompile: false,
- },
- ),
(
"recreate_instance_vanilla",
Method::Compiled {
diff --git a/substrate/client/executor/common/src/runtime_blob/data_segments_snapshot.rs b/substrate/client/executor/common/src/runtime_blob/data_segments_snapshot.rs
deleted file mode 100644
index 3fd546ce4457..000000000000
--- a/substrate/client/executor/common/src/runtime_blob/data_segments_snapshot.rs
+++ /dev/null
@@ -1,87 +0,0 @@
-// This file is part of Substrate.
-
-// Copyright (C) Parity Technologies (UK) Ltd.
-// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see .
-
-use super::RuntimeBlob;
-use crate::error::{self, Error};
-use std::mem;
-use wasm_instrument::parity_wasm::elements::Instruction;
-
-/// This is a snapshot of data segments specialzied for a particular instantiation.
-///
-/// Note that this assumes that no mutable globals are used.
-#[derive(Clone)]
-pub struct DataSegmentsSnapshot {
- /// The list of data segments represented by (offset, contents).
- data_segments: Vec<(u32, Vec)>,
-}
-
-impl DataSegmentsSnapshot {
- /// Create a snapshot from the data segments from the module.
- pub fn take(module: &RuntimeBlob) -> error::Result {
- let data_segments = module
- .data_segments()
- .into_iter()
- .map(|mut segment| {
- // Just replace contents of the segment since the segments will be discarded later
- // anyway.
- let contents = mem::take(segment.value_mut());
-
- let init_expr = match segment.offset() {
- Some(offset) => offset.code(),
- // Return if the segment is passive
- None => return Err(Error::SharedMemUnsupported),
- };
-
- // [op, End]
- if init_expr.len() != 2 {
- return Err(Error::InitializerHasTooManyExpressions)
- }
- let offset = match &init_expr[0] {
- Instruction::I32Const(v) => *v as u32,
- Instruction::GetGlobal(_) => {
- // In a valid wasm file, initializer expressions can only refer imported
- // globals.
- //
- // At the moment of writing the Substrate Runtime Interface does not provide
- // any globals. There is nothing that prevents us from supporting this
- // if/when we gain those.
- return Err(Error::ImportedGlobalsUnsupported)
- },
- insn => return Err(Error::InvalidInitializerExpression(format!("{:?}", insn))),
- };
-
- Ok((offset, contents))
- })
- .collect::>>()?;
-
- Ok(Self { data_segments })
- }
-
- /// Apply the given snapshot to a linear memory.
- ///
- /// Linear memory interface is represented by a closure `memory_set`.
- pub fn apply(
- &self,
- mut memory_set: impl FnMut(u32, &[u8]) -> Result<(), E>,
- ) -> Result<(), E> {
- for (offset, contents) in &self.data_segments {
- memory_set(*offset, contents)?;
- }
- Ok(())
- }
-}
diff --git a/substrate/client/executor/common/src/runtime_blob/globals_snapshot.rs b/substrate/client/executor/common/src/runtime_blob/globals_snapshot.rs
deleted file mode 100644
index 9ba6fc55e49c..000000000000
--- a/substrate/client/executor/common/src/runtime_blob/globals_snapshot.rs
+++ /dev/null
@@ -1,112 +0,0 @@
-// This file is part of Substrate.
-
-// Copyright (C) Parity Technologies (UK) Ltd.
-// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see .
-
-use super::RuntimeBlob;
-
-/// Saved value of particular exported global.
-struct SavedValue {
- /// The handle of this global which can be used to refer to this global.
- handle: Global,
- /// The global value that was observed during the snapshot creation.
- value: sp_wasm_interface::Value,
-}
-
-/// An adapter for a wasm module instance that is focused on getting and setting globals.
-pub trait InstanceGlobals {
- /// A handle to a global which can be used to get or set a global variable. This is supposed to
- /// be a lightweight handle, like an index or an Rc-like smart-pointer, which is cheap to clone.
- type Global: Clone;
- /// Get a handle to a global by it's export name.
- ///
- /// The requested export is must exist in the exported list, and it should be a mutable global.
- fn get_global(&mut self, export_name: &str) -> Self::Global;
- /// Get the current value of the global.
- fn get_global_value(&mut self, global: &Self::Global) -> sp_wasm_interface::Value;
- /// Update the current value of the global.
- ///
- /// The global behind the handle is guaranteed to be mutable and the value to be the same type
- /// as the global.
- fn set_global_value(&mut self, global: &Self::Global, value: sp_wasm_interface::Value);
-}
-
-/// A set of exposed mutable globals.
-///
-/// This is set of globals required to create a [`GlobalsSnapshot`] and that are collected from
-/// a runtime blob that was instrumented by
-/// [`RuntimeBlob::expose_mutable_globals`](super::RuntimeBlob::expose_mutable_globals`).
-
-/// If the code wasn't instrumented then it would be empty and snapshot would do nothing.
-pub struct ExposedMutableGlobalsSet(Vec);
-
-impl ExposedMutableGlobalsSet {
- /// Collect the set from the given runtime blob. See the struct documentation for details.
- pub fn collect(runtime_blob: &RuntimeBlob) -> Self {
- let global_names =
- runtime_blob.exported_internal_global_names().map(ToOwned::to_owned).collect();
- Self(global_names)
- }
-}
-
-/// A snapshot of a global variables values. This snapshot can be later used for restoring the
-/// values to the preserved state.
-///
-/// Technically, a snapshot stores only values of mutable global variables. This is because
-/// immutable global variables always have the same values.
-///
-/// We take it from an instance rather from a module because the start function could potentially
-/// change any of the mutable global values.
-pub struct GlobalsSnapshot(Vec>);
-
-impl GlobalsSnapshot {
- /// Take a snapshot of global variables for a given instance.
- ///
- /// # Panics
- ///
- /// This function panics if the instance doesn't correspond to the module from which the
- /// [`ExposedMutableGlobalsSet`] was collected.
- pub fn take(
- mutable_globals: &ExposedMutableGlobalsSet,
- instance: &mut Instance,
- ) -> Self
- where
- Instance: InstanceGlobals,
- {
- let global_names = &mutable_globals.0;
- let mut saved_values = Vec::with_capacity(global_names.len());
-
- for global_name in global_names {
- let handle = instance.get_global(global_name);
- let value = instance.get_global_value(&handle);
- saved_values.push(SavedValue { handle, value });
- }
-
- Self(saved_values)
- }
-
- /// Apply the snapshot to the given instance.
- ///
- /// This instance must be the same that was used for creation of this snapshot.
- pub fn apply(&self, instance: &mut Instance)
- where
- Instance: InstanceGlobals,
- {
- for saved_value in &self.0 {
- instance.set_global_value(&saved_value.handle, saved_value.value);
- }
- }
-}
diff --git a/substrate/client/executor/common/src/runtime_blob/mod.rs b/substrate/client/executor/common/src/runtime_blob/mod.rs
index 07a0945cc2b6..8261d07eda5e 100644
--- a/substrate/client/executor/common/src/runtime_blob/mod.rs
+++ b/substrate/client/executor/common/src/runtime_blob/mod.rs
@@ -46,10 +46,6 @@
//! is free of any floating point operations, which is a useful step towards making instances
//! produced from such a module deterministic.
-mod data_segments_snapshot;
-mod globals_snapshot;
mod runtime_blob;
-pub use data_segments_snapshot::DataSegmentsSnapshot;
-pub use globals_snapshot::{ExposedMutableGlobalsSet, GlobalsSnapshot, InstanceGlobals};
pub use runtime_blob::RuntimeBlob;
diff --git a/substrate/client/executor/common/src/runtime_blob/runtime_blob.rs b/substrate/client/executor/common/src/runtime_blob/runtime_blob.rs
index 24dc7e393a4b..becf9e219b0b 100644
--- a/substrate/client/executor/common/src/runtime_blob/runtime_blob.rs
+++ b/substrate/client/executor/common/src/runtime_blob/runtime_blob.rs
@@ -20,8 +20,8 @@ use crate::{error::WasmError, wasm_runtime::HeapAllocStrategy};
use wasm_instrument::{
export_mutable_globals,
parity_wasm::elements::{
- deserialize_buffer, serialize, DataSegment, ExportEntry, External, Internal, MemorySection,
- MemoryType, Module, Section,
+ deserialize_buffer, serialize, ExportEntry, External, Internal, MemorySection, MemoryType,
+ Module, Section,
},
};
@@ -52,11 +52,6 @@ impl RuntimeBlob {
Ok(Self { raw_module })
}
- /// Extract the data segments from the given wasm code.
- pub(super) fn data_segments(&self) -> Vec {
- self.raw_module.data_section().map(|ds| ds.entries()).unwrap_or(&[]).to_vec()
- }
-
/// The number of globals defined in locally in this module.
pub fn declared_globals_count(&self) -> u32 {
self.raw_module
@@ -190,16 +185,6 @@ impl RuntimeBlob {
Ok(())
}
- /// Returns an iterator of all globals which were exported by [`expose_mutable_globals`].
- pub(super) fn exported_internal_global_names(&self) -> impl Iterator {
- let exports = self.raw_module.export_section().map(|es| es.entries()).unwrap_or(&[]);
- exports.iter().filter_map(|export| match export.internal() {
- Internal::Global(_) if export.field().starts_with("exported_internal_global") =>
- Some(export.field()),
- _ => None,
- })
- }
-
/// Scans the wasm blob for the first section with the name that matches the given. Returns the
/// contents of the custom section if found or `None` otherwise.
pub fn custom_section_contents(&self, section_name: &str) -> Option<&[u8]> {
diff --git a/substrate/client/executor/common/src/wasm_runtime.rs b/substrate/client/executor/common/src/wasm_runtime.rs
index 5dac77e59fa7..d8e142b9d559 100644
--- a/substrate/client/executor/common/src/wasm_runtime.rs
+++ b/substrate/client/executor/common/src/wasm_runtime.rs
@@ -115,16 +115,6 @@ pub trait WasmInstance: Send {
///
/// This method is only suitable for getting immutable globals.
fn get_global_const(&mut self, name: &str) -> Result