mirror of
https://github.com/fluencelabs/wasmer
synced 2024-12-04 18:10:18 +00:00
add instance creation benchmark
This commit is contained in:
parent
13c5f5e71b
commit
01491fd986
11
examples/no_abi_simple_plugin.rs
Normal file
11
examples/no_abi_simple_plugin.rs
Normal file
@ -0,0 +1,11 @@
|
||||
extern "C" {
|
||||
fn it_works() -> i32;
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub fn plugin_entrypoint(n: i32) -> i32 {
|
||||
let result = unsafe { it_works() };
|
||||
result + n
|
||||
}
|
||||
|
||||
fn main() {}
|
BIN
examples/no_abi_simple_plugin.wasm
Executable file
BIN
examples/no_abi_simple_plugin.wasm
Executable file
Binary file not shown.
@ -42,3 +42,7 @@ singlepass = ["wasmer-singlepass-backend"]
|
||||
[[bench]]
|
||||
name = "nginx"
|
||||
harness = false
|
||||
|
||||
[[bench]]
|
||||
name = "many_instances"
|
||||
harness = false
|
||||
|
84
lib/runtime/benches/many_instances.rs
Normal file
84
lib/runtime/benches/many_instances.rs
Normal file
@ -0,0 +1,84 @@
|
||||
#[macro_use]
|
||||
extern crate criterion;
|
||||
use criterion::Criterion;
|
||||
use tempfile::tempdir;
|
||||
use wasmer_runtime::{
|
||||
cache::{Cache, FileSystemCache, WasmHash},
|
||||
compile, func, imports, instantiate, validate, ImportObject,
|
||||
};
|
||||
use wasmer_runtime_core::vm::Ctx;
|
||||
|
||||
fn it_works(_ctx: &mut Ctx) -> i32 {
|
||||
5
|
||||
}
|
||||
|
||||
static SIMPLE_WASM: &[u8] = include_bytes!(concat!(
|
||||
env!("CARGO_MANIFEST_DIR"),
|
||||
"/../../examples/no_abi_simple_plugin.wasm"
|
||||
));
|
||||
|
||||
fn hashing_benchmark(c: &mut Criterion) {
|
||||
c.bench_function("HASH", |b| b.iter(|| WasmHash::generate(SIMPLE_WASM)));
|
||||
}
|
||||
|
||||
fn validate_benchmark(c: &mut Criterion) {
|
||||
c.bench_function("validate", |b| b.iter(|| validate(SIMPLE_WASM)));
|
||||
}
|
||||
|
||||
fn compile_benchmark(c: &mut Criterion) {
|
||||
c.bench_function("compile", |b| b.iter(|| compile(SIMPLE_WASM)));
|
||||
}
|
||||
|
||||
fn create_instance_benchmark(c: &mut Criterion) {
|
||||
let imports = imports!(
|
||||
"env" => {
|
||||
"it_works" => func!(it_works),
|
||||
},
|
||||
);
|
||||
c.bench_function("instantiate", move |b| {
|
||||
b.iter(|| instantiate(&SIMPLE_WASM[..], &imports).unwrap())
|
||||
});
|
||||
}
|
||||
|
||||
fn create_instance_from_cache_benchmark(c: &mut Criterion) {
|
||||
let imports = imports!(
|
||||
"env" => {
|
||||
"it_works" => func!(it_works),
|
||||
},
|
||||
);
|
||||
let tempdir = tempdir().unwrap();
|
||||
let mut cache = unsafe {
|
||||
FileSystemCache::new(tempdir.path()).expect("unable to create file system cache")
|
||||
};
|
||||
let module = compile(SIMPLE_WASM).unwrap();
|
||||
let hash = WasmHash::generate(SIMPLE_WASM);
|
||||
cache
|
||||
.store(hash, module)
|
||||
.expect("unable to store into cache");
|
||||
c.bench_function("instantiate from cache", move |b| {
|
||||
b.iter(|| {
|
||||
let module = cache.load(hash).unwrap();
|
||||
module.instantiate(&imports).unwrap();
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
fn calling_fn_benchmark(c: &mut Criterion) {
|
||||
let imports = imports!(
|
||||
"env" => {
|
||||
"it_works" => func!(it_works),
|
||||
},
|
||||
);
|
||||
let instance = instantiate(SIMPLE_WASM, &imports).unwrap();
|
||||
c.bench_function("calling fn", move |b| {
|
||||
let entry_point = instance.func::<(i32), i32>("plugin_entrypoint").unwrap();
|
||||
b.iter(|| entry_point.call(2).unwrap())
|
||||
});
|
||||
}
|
||||
|
||||
criterion_group! {
|
||||
name = instance_bench;
|
||||
config = Criterion::default().sample_size(20);
|
||||
targets = compile_benchmark, validate_benchmark, hashing_benchmark, create_instance_from_cache_benchmark, calling_fn_benchmark, create_instance_benchmark,
|
||||
}
|
||||
criterion_main!(instance_bench);
|
Loading…
Reference in New Issue
Block a user