Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Make build-config magic use memfd by default.
  • Loading branch information
cfallin committed Feb 1, 2022
commit 0ff8f6ab2020c721b0d8065cd503422e4d0dbf10
3 changes: 0 additions & 3 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,6 @@ jobs:
- run: cargo check -p wasmtime --no-default-features --features async
- run: cargo check -p wasmtime --no-default-features --features uffd
- run: cargo check -p wasmtime --no-default-features --features pooling-allocator
- run: cargo check -p wasmtime --no-default-features --features memfd-allocator
- run: cargo check -p wasmtime --no-default-features --features cranelift
- run: cargo check -p wasmtime --no-default-features --features cranelift,wat,async,cache

Expand Down Expand Up @@ -316,8 +315,6 @@ jobs:
cargo test --features uffd -p wasmtime-runtime instance::allocator::pooling
cargo test --features uffd -p wasmtime-cli pooling_allocator
cargo test --features uffd -p wasmtime-cli wast::Cranelift
cargo test --features memfd-allocator -p wasmtime-cli pooling_allocator
cargo test --features memfd-allocator -p wasmtime-cli wast::Cranelift
if: matrix.os == 'ubuntu-latest' && matrix.target == ''
env:
RUST_BACKTRACE: 1
Expand Down
3 changes: 1 addition & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ path = "src/bin/wasmtime.rs"
doc = false

[dependencies]
wasmtime = { path = "crates/wasmtime", version = "0.33.0", default-features = false, features = ['cache', 'cranelift'] }
wasmtime = { path = "crates/wasmtime", version = "0.33.0", default-features = false, features = ['cache', 'cranelift', 'pooling-allocator', 'memfd'] }
wasmtime-cache = { path = "crates/cache", version = "=0.33.0" }
wasmtime-cranelift = { path = "crates/cranelift", version = "=0.33.0" }
wasmtime-environ = { path = "crates/environ", version = "=0.33.0" }
Expand Down Expand Up @@ -96,7 +96,6 @@ wasi-crypto = ["wasmtime-wasi-crypto"]
wasi-nn = ["wasmtime-wasi-nn"]
uffd = ["wasmtime/uffd"]
pooling-allocator = ["wasmtime/pooling-allocator"]
memfd-allocator = ["pooling-allocator", "wasmtime/memfd-allocator"]
all-arch = ["wasmtime/all-arch"]
posix-signals-on-macos = ["wasmtime/posix-signals-on-macos"]

Expand Down
4 changes: 1 addition & 3 deletions crates/runtime/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ backtrace = "0.3.61"
lazy_static = "1.3.0"
rand = "0.8.3"
anyhow = "1.0.38"
memfd = { version = "0.4.1", optional = true }

[target.'cfg(target_os = "macos")'.dependencies]
mach = "0.3.2"
Expand All @@ -37,7 +38,6 @@ winapi = { version = "0.3.7", features = ["winbase", "memoryapi", "errhandlingap

[target.'cfg(target_os = "linux")'.dependencies]
userfaultfd = { version = "0.4.1", optional = true }
memfd = { version = "0.4.1", optional = true }

[build-dependencies]
cc = "1.0"
Expand All @@ -60,5 +60,3 @@ uffd = ["userfaultfd", "pooling-allocator"]
# It is useful for applications that do not bind their own exception ports and
# need portable signal handling.
posix-signals-on-macos = []

memfd-allocator = ["pooling-allocator", "memfd"]
11 changes: 11 additions & 0 deletions crates/runtime/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,15 @@ fn main() {
)
.file("src/helpers.c")
.compile("wasmtime-helpers");

// Check to see if we are on Linux and the `memfd` feature is
// active. If so, enable the `memfd` rustc cfg so `#[cfg(memfd)]`
// will work.
let os = env::var("CARGO_CFG_TARGET_OS").unwrap();
let is_memfd = env::var("CARGO_FEATURE_MEMFD").is_ok();
let is_pooling = env::var("CARGO_FEATURE_POOLING_ALLOCATOR").is_ok();
let is_uffd = env::var("CARGO_FEATURE_UFFD").is_ok();
if &os == "linux" && is_memfd && is_pooling && !is_uffd {
println!("cargo:rustc-cfg=memfd");
}
}
2 changes: 1 addition & 1 deletion crates/runtime/src/instance/allocator/pooling.rs
Original file line number Diff line number Diff line change
Expand Up @@ -703,7 +703,7 @@ impl MemoryPool {
let mapping = Mmap::accessible_reserved(0, allocation_size)
.context("failed to create memory pool mapping")?;

let num_memfd_slots = if cfg!(feature = "memfd-allocator") {
let num_memfd_slots = if cfg!(memfd) {
max_instances * max_memories
} else {
0
Expand Down
10 changes: 5 additions & 5 deletions crates/runtime/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
clippy::use_self
)
)]
#![cfg_attr(feature = "memfd-allocator", allow(dead_code))]
#![cfg_attr(memfd, allow(dead_code))]

use std::sync::atomic::AtomicU64;

Expand Down Expand Up @@ -67,14 +67,14 @@ pub use crate::vmcontext::{
mod module_id;
pub use module_id::{CompiledModuleId, CompiledModuleIdAllocator};

#[cfg(feature = "memfd-allocator")]
#[cfg(memfd)]
mod memfd;
#[cfg(feature = "memfd-allocator")]
#[cfg(memfd)]
pub use crate::memfd::{MemFdSlot, MemoryMemFd, ModuleMemFds};

#[cfg(not(feature = "memfd-allocator"))]
#[cfg(not(memfd))]
mod memfd_disabled;
#[cfg(not(feature = "memfd-allocator"))]
#[cfg(not(memfd))]
pub use crate::memfd_disabled::{MemFdSlot, MemoryMemFd, ModuleMemFds};

/// Version number of this crate.
Expand Down
2 changes: 0 additions & 2 deletions crates/runtime/src/memfd_disabled.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,9 @@ impl ModuleMemFds {
/// To allow MemFdSlot to be unconditionally passed around in various
/// places (e.g. a `Memory`), we define a zero-sized type when memfd is
/// not included in the build.
#[cfg(not(feature = "memfd-allocator"))]
#[derive(Debug)]
pub struct MemFdSlot;

#[cfg(not(feature = "memfd-allocator"))]
#[allow(dead_code)]
impl MemFdSlot {
pub(crate) fn create(_: *mut libc::c_void, _: usize) -> Self {
Expand Down
9 changes: 1 addition & 8 deletions crates/runtime/src/traphandlers/unix.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,7 @@ pub unsafe fn platform_init() {
// Sometimes we need to handle SIGBUS too:
// - On ARM, handle Unaligned Accesses.
// - On Darwin, guard page accesses are raised as SIGBUS.
// - With the MemFD allocator, heap growth is controlled by
// ftruncate'ing an mmap'd file, and so out-of-bounds accesses
// are raised as SIGBUS.
if cfg!(target_arch = "arm")
|| cfg!(target_os = "macos")
|| cfg!(target_os = "freebsd")
|| cfg!(feature = "memfd-allocator")
{
if cfg!(target_arch = "arm") || cfg!(target_os = "macos") || cfg!(target_os = "freebsd") {
register(&mut PREV_SIGBUS, libc::SIGBUS);
}
}
Expand Down
4 changes: 2 additions & 2 deletions crates/wasmtime/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ wasi-cap-std-sync = { path = "../wasi-common/cap-std-sync" }
maintenance = { status = "actively-developed" }

[features]
default = ['async', 'cache', 'wat', 'jitdump', 'parallel-compilation', 'cranelift', 'pooling-allocator']
default = ['async', 'cache', 'wat', 'jitdump', 'parallel-compilation', 'cranelift', 'pooling-allocator', 'memfd']

# An on-by-default feature enabling runtime compilation of WebAssembly modules
# with the Cranelift compiler. Cranelift is the default compilation backend of
Expand Down Expand Up @@ -90,4 +90,4 @@ all-arch = ["wasmtime-cranelift/all-arch"]
# need portable signal handling.
posix-signals-on-macos = ["wasmtime-runtime/posix-signals-on-macos"]

memfd-allocator = ["wasmtime-runtime/memfd-allocator", "pooling-allocator"]
memfd = ["wasmtime-runtime/memfd", "pooling-allocator"]