bytecodealliance / wasmtime

A fast and secure runtime for WebAssembly
https://wasmtime.dev/
Apache License 2.0
15.43k stars 1.31k forks source link

Decrease default guard size from 2G to 32M #9606

Closed alexcrichton closed 6 days ago

alexcrichton commented 1 week ago

This commit follows in the footsteps of SpiderMonkey to reduce the size of the default guard region from 2GiB to 32MiB. SpiderMonkey performance an analysis of some wasm modules and found the largest static offset was 20MiB so 32 is the rounded up version of that.

This will reduce the size of the virtual memory reservation per linear-memory by default. Previously it was 8G due to guards being both before and after linear memory being 2G in size. Now it'll be 4G+64M with before/after guards taken into account. This should in theory make it easier to pack more instances in the pooling allocator for example and overall reduce the virtual memory footprint.

This is not expected to have any major impact on the performance of wasm modules as all bounds checks should still practically be elided. We've been fuzzing differently sized guard regions for quite a long time as well so there should be a low risk of this having any issues specifically connected to a smaller guard region.

alexcrichton commented 1 week ago

For reference this is from discussions with Ryan this week at WasmCon and the SpiderMonkey reference is here

github-actions[bot] commented 1 week ago

Label Messager: wasmtime:config

It looks like you are changing Wasmtime's configuration options. Make sure to complete this check list:


To modify this label's message, edit the .github/label-messager/wasmtime-config.md file. To add new label messages or remove existing label messages, edit the .github/label-messager.json configuration file. [Learn more.](https://github.com/bytecodealliance/label-messager-action)