-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add benchmarks for wasmi builtin metering #56
Conversation
@athei Thanks a lot for those benchmarks. Very exciting to see so massive speed-ups from the built-in fuel metering. 🚀 |
Yes great work there with your wasmi implementation! I just wanted to get a feel for it before putting into We should notice the gas usage improvements in our benchmarks we house in the ink! repo. |
Benchmark results: wasmi 0.30 vs wasmi 0.29wasmi 0.29Results on Intel(R) Xeon(R) CPU E3-1245 V2 @ 3.40GHz
wasmi 0.30tl;dr: performance improvement is being shown on all benchmarks except this one:
Results on Intel(R) Xeon(R) CPU E3-1245 V2 @ 3.40GHz
|
* Upgraded to newest wasmi * Refactored benchmarks * Two new benchmark strategies (`no_metering` and `wasmi_builtin`) We can now benchmark the execution of modules using our two instrumentation strategies in addition to no metering (as a baseline) and wasmi's builtin metering. We can learn from the following results (ran on my M1) that the builtin metering decisively outperforms the instrumentation on every single fixture. cc @Robbepop ``` coremark/no_metering [15.586 s 15.588 s 15.589 s] coremark/wasmi_builtin [16.403 s 16.414 s 16.434 s] coremark/host_function [18.245 s 18.248 s 18.252 s] coremark/mutable_global [20.476 s 20.486 s 20.505 s] recursive_ok/no_metering [111.32 µs 111.33 µs 111.34 µs] recursive_ok/wasmi_builtin [138.64 µs 138.65 µs 138.66 µs] recursive_ok/host_function [495.55 µs 495.64 µs 495.78 µs] recursive_ok/mutable_global [514.07 µs 514.09 µs 514.11 µs] fibonacci_recursive/no_metering [3.9098 µs 3.9102 µs 3.9108 µs] fibonacci_recursive/wasmi_builtin [4.3242 µs 4.3246 µs 4.3250 µs] fibonacci_recursive/host_function [12.913 µs 12.914 µs 12.915 µs] fibonacci_recursive/mutable_global [13.202 µs 13.208 µs 13.212 µs] factorial_recursive/no_metering [530.72 ns 530.84 ns 530.91 ns] factorial_recursive/wasmi_builtin [619.17 ns 619.30 ns 619.44 ns] factorial_recursive/host_function [1.7656 µs 1.7657 µs 1.7659 µs] factorial_recursive/mutable_global [1.8783 µs 1.8786 µs 1.8788 µs] count_until/no_metering [1.2422 ms 1.2423 ms 1.2424 ms] count_until/wasmi_builtin [1.3976 ms 1.3978 ms 1.3981 ms] count_until/host_function [4.8074 ms 4.8106 ms 4.8125 ms] count_until/mutable_global [5.9161 ms 5.9169 ms 5.9182 ms] memory_vec_add/no_metering [4.1630 ms 4.1638 ms 4.1648 ms] memory_vec_add/wasmi_builtin [4.3913 ms 4.3925 ms 4.3930 ms] memory_vec_add/host_function [8.2925 ms 8.2949 ms 8.2967 ms] memory_vec_add/mutable_global [9.1124 ms 9.1152 ms 9.1163 ms] wasm_kernel::tiny_keccak/no_metering [613.21 µs 613.42 µs 613.58 µs] wasm_kernel::tiny_keccak/wasmi_builtin [617.04 µs 617.46 µs 617.81 µs] wasm_kernel::tiny_keccak/host_function [817.24 µs 817.44 µs 817.89 µs] wasm_kernel::tiny_keccak/mutable_global [873.42 µs 873.90 µs 874.65 µs] global_bump/no_metering [1.4597 ms 1.4598 ms 1.4600 ms] global_bump/wasmi_builtin [1.6151 ms 1.6152 ms 1.6153 ms] global_bump/host_function [5.5393 ms 5.5418 ms 5.5435 ms] global_bump/mutable_global [6.9446 ms 6.9454 ms 6.9461 ms] ```
no_metering
andwasmi_builtin
)We can now benchmark the execution of modules using our two instrumentation strategies in addition to no metering (as a baseline) and wasmi's builtin metering.
We can learn from the following results (ran on my M1) that the builtin metering decisively outperforms the instrumentation on every single fixture.
cc @Robbepop