mirror of
https://github.com/fluencelabs/wasmer
synced 2025-03-16 00:00:49 +00:00
The feed_event() function is called for every wasm binary instruction. Let's optimize it by storing FunctionEnvironment object in CraneliftFunctionCodeGenerator, rather than constructing it for every feed_event() invocation. This change reduces the time to run "ngix compile" benchmark by 68%: Before: nginx compile time: [1.4152 s 1.4186 s 1.4222 s] Found 1 outliers among 10 measurements (10.00%) 1 (10.00%) high mild After: nginx compile time: [447.76 ms 448.32 ms 448.80 ms] change: [-68.542% -68.440% -68.352%] (p = 0.00 < 0.05) Performance has improved. I assume some of the clone() calls are very expensive (Vec::clone(), likely). I did see libc malloc()/free() high up in "perf top" profiles, which are eliminted by this change. I also looked into eliminating FunctionBuilder construction from feed_event(). That turns out to be painful on lifetime rules because it borrows bunch of other objects, so I am leaving it for someone who knows the code better than I do.
Wasmer Cranelift backend
Wasmer is a standalone JIT WebAssembly runtime, aiming to be fully compatible with Emscripten, Rust and Go. Learn more.
This crate represents the Cranelift backend integration for Wasmer.
Usage
Usage in Wasmer Standalone
If you are using the wasmer
CLI, you can specify the backend with:
wasmer run program.wasm --backend=cranelift
Usage in Wasmer Embedded
If you are using Wasmer Embedded, you can specify
the Cranelift backend to the compile_with
function:
use wasmer_clif_backend::CraneliftCompiler;
// ...
let module = wasmer_runtime_core::compile_with(&wasm_binary[..], &CraneliftCompiler::new());