From a890d8d4cd783d2ea4b0eb3a0f5145160ba33b19 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 28 Feb 2022 07:57:16 -0800 Subject: [PATCH] Decrease default wasm stack to 512k from 1M This commit aims to achieve the goal of being able to run the test suite on Windows with `--test-threads 1`, or more notably allowing Wasmtime's defaults to work better with the main thread on Windows which appears to have a smaller stack by default than Linux by comparison. In decreasing the default wasm stack size a test is also update to probe for less stack to work on Windows' main thread by default, ideally allowing the full test suite to work with `--test-threads 1` (although this isn't added to CI as it's not really critical). Closes #3857 --- crates/wasmtime/src/config.rs | 12 ++++++++++-- tests/all/stack_overflow.rs | 4 ++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/crates/wasmtime/src/config.rs b/crates/wasmtime/src/config.rs index 29edbbbeac05..4acfaac4cd57 100644 --- a/crates/wasmtime/src/config.rs +++ b/crates/wasmtime/src/config.rs @@ -115,7 +115,15 @@ impl Config { profiler: Arc::new(NullProfilerAgent), mem_creator: None, allocation_strategy: InstanceAllocationStrategy::OnDemand, - max_wasm_stack: 1 << 20, + // 512k of stack -- note that this is chosen currently to not be too + // big, not be too small, and be a good default for most platforms. + // One platform of particular note is Windows where the stack size + // of the main thread seems to, by default, be smaller than that of + // Linux and macOS. This 512k value at least lets our current test + // suite pass on the main thread of Windows (using `--test-threads + // 1` forces this), or at least it passed when this change was + // committed. + max_wasm_stack: 512 * 1024, wasm_backtrace_details_env_used: false, features: WasmFeatures::default(), #[cfg(feature = "async")] @@ -444,7 +452,7 @@ impl Config { /// on stack overflow, a host function that overflows the stack will /// abort the process. /// - /// By default this option is 1 MiB. + /// By default this option is 512 KiB. pub fn max_wasm_stack(&mut self, size: usize) -> Result<&mut Self> { #[cfg(feature = "async")] if size > self.async_stack_size { diff --git a/tests/all/stack_overflow.rs b/tests/all/stack_overflow.rs index 01dcd0170560..52ff8e238162 100644 --- a/tests/all/stack_overflow.rs +++ b/tests/all/stack_overflow.rs @@ -4,8 +4,8 @@ use wasmtime::*; #[test] fn host_always_has_some_stack() -> anyhow::Result<()> { static HITS: AtomicUsize = AtomicUsize::new(0); - // assume hosts always have at least 512k of stack - const HOST_STACK: usize = 512 * 1024; + // assume hosts always have at least 128k of stack + const HOST_STACK: usize = 128 * 1024; let mut store = Store::<()>::default();