From 8291876394c5718fd12b5a67dc4bb7b764604fff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Thei=C3=9Fen?= Date: Mon, 24 Jan 2022 21:20:47 +0100 Subject: [PATCH] Add benchmarks and add tiny performance improvements (#6) * Add some benchmarks * Replace extend -> extend_from_slice (1-2% performance improvement) * Add many_blocks benchmarks --- Cargo.toml | 9 ++++ benches/benches.rs | 51 +++++++++++++++++++++++ benches/fixtures/contract_terminate.wasm | Bin 0 -> 1310 bytes benches/fixtures/contract_transfer.wasm | Bin 0 -> 7984 bytes benches/fixtures/dns.wasm | Bin 0 -> 10475 bytes benches/fixtures/erc1155.wasm | Bin 0 -> 27503 bytes benches/fixtures/erc20.wasm | Bin 0 -> 10221 bytes benches/fixtures/erc721.wasm | Bin 0 -> 13704 bytes benches/fixtures/many_blocks.wasm | Bin 0 -> 1048575 bytes benches/fixtures/multisig.wasm | Bin 0 -> 28563 bytes benches/fixtures/proxy.wasm | Bin 0 -> 3811 bytes benches/fixtures/rand_extension.wasm | Bin 0 -> 5116 bytes benches/fixtures/trait_erc20.wasm | Bin 0 -> 10521 bytes src/stack_limiter/mod.rs | 2 +- src/stack_limiter/thunk.rs | 2 +- 15 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 benches/benches.rs create mode 100644 benches/fixtures/contract_terminate.wasm create mode 100644 benches/fixtures/contract_transfer.wasm create mode 100644 benches/fixtures/dns.wasm create mode 100644 benches/fixtures/erc1155.wasm create mode 100644 benches/fixtures/erc20.wasm create mode 100644 benches/fixtures/erc721.wasm create mode 100644 benches/fixtures/many_blocks.wasm create mode 100644 benches/fixtures/multisig.wasm create mode 100644 benches/fixtures/proxy.wasm create mode 100644 benches/fixtures/rand_extension.wasm create mode 100644 benches/fixtures/trait_erc20.wasm diff --git a/Cargo.toml b/Cargo.toml index 76de893..2dee9d0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,11 +11,20 @@ categories = ["wasm", "no-std"] repository = "https://github.com/paritytech/wasm-instrument" include = ["src/**/*", "LICENSE-*", "README.md"] +[[bench]] +name = "benches" +harness = false + +[profile.bench] +lto = "fat" +codegen-units = 1 + [dependencies] parity-wasm = { version = "0.42", default-features = false } [dev-dependencies] binaryen = "0.12" +criterion = "0.3" diff = "0.1" rand = "0.8" wabt = "0.10" diff --git a/benches/benches.rs b/benches/benches.rs new file mode 100644 index 0000000..be87e7d --- /dev/null +++ b/benches/benches.rs @@ -0,0 +1,51 @@ +use criterion::{ + criterion_group, criterion_main, measurement::Measurement, BenchmarkGroup, Criterion, + Throughput, +}; +use std::{ + fs::{read, read_dir}, + path::PathBuf, +}; +use wasm_instrument::{ + gas_metering, inject_stack_limiter, + parity_wasm::{deserialize_buffer, elements::Module}, +}; + +fn fixture_dir() -> PathBuf { + let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + path.push("benches"); + path.push("fixtures"); + path +} + +fn any_fixture(group: &mut BenchmarkGroup, f: F) +where + F: Fn(Module), + M: Measurement, +{ + for entry in read_dir(fixture_dir()).unwrap() { + let entry = entry.unwrap(); + let bytes = read(&entry.path()).unwrap(); + group.throughput(Throughput::Bytes(bytes.len().try_into().unwrap())); + group.bench_function(entry.file_name().to_str().unwrap(), |bench| { + bench.iter(|| f(deserialize_buffer(&bytes).unwrap())) + }); + } +} + +pub fn gas_metering(c: &mut Criterion) { + let mut group = c.benchmark_group("Gas Metering"); + any_fixture(&mut group, |module| { + gas_metering::inject(module, &gas_metering::ConstantCostRules::default(), "env").unwrap(); + }); +} + +pub fn stack_height_limiter(c: &mut Criterion) { + let mut group = c.benchmark_group("Stack Height Limiter"); + any_fixture(&mut group, |module| { + inject_stack_limiter(module, 128).unwrap(); + }); +} + +criterion_group!(benches, gas_metering, stack_height_limiter); +criterion_main!(benches); diff --git a/benches/fixtures/contract_terminate.wasm b/benches/fixtures/contract_terminate.wasm new file mode 100644 index 0000000000000000000000000000000000000000..00ca3c7c78b16eb977499b3573d1c11dea6d33be GIT binary patch literal 1310 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 literal 0 HcmV?d00001 diff --git a/benches/fixtures/erc1155.wasm b/benches/fixtures/erc1155.wasm new file mode 100644 index 0000000000000000000000000000000000000000..0fd8ebbd889c8d0fbf1b67184c945f4abdd699ce GIT binary patch literal 27503 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 literal 0 HcmV?d00001 diff --git a/benches/fixtures/erc20.wasm b/benches/fixtures/erc20.wasm new file mode 100644 index 0000000000000000000000000000000000000000..7e561c4a102fff2771d39c45c0cb8a0cb7f96177 GIT binary patch literal 10221 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 z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r 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 literal 0 HcmV?d00001 diff --git a/benches/fixtures/proxy.wasm b/benches/fixtures/proxy.wasm new file mode 100644 index 0000000000000000000000000000000000000000..01cd027f0e671c622f13e80da0b0475ff746940f GIT binary patch literal 3811 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 FzX74>J`n%_ literal 0 HcmV?d00001 diff --git a/benches/fixtures/trait_erc20.wasm b/benches/fixtures/trait_erc20.wasm new file mode 100644 index 0000000000000000000000000000000000000000..8b5b84432d96ab04f81daf2177e35ee3a5c7a99d GIT binary patch literal 10521 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 Result<(), ctx.stack_height_global_idx(), ctx.stack_limit() ); - new_instrs.extend(new_seq); + new_instrs.extend_from_slice(&new_seq); true } else { false diff --git a/src/stack_limiter/thunk.rs b/src/stack_limiter/thunk.rs index 18eb150..d28cd35 100644 --- a/src/stack_limiter/thunk.rs +++ b/src/stack_limiter/thunk.rs @@ -82,7 +82,7 @@ pub fn generate_thunks( for (arg_idx, _) in thunk.signature.params().iter().enumerate() { thunk_body.push(elements::Instruction::GetLocal(arg_idx as u32)); } - thunk_body.extend(instrumented_call.iter().cloned()); + thunk_body.extend_from_slice(&instrumented_call); thunk_body.push(elements::Instruction::End); // TODO: Don't generate a signature, but find an existing one.