alexcrichton opened PR #2757 from fast-call
to main
:
This commit implements a few optimizations, mainly inlining, that should
improve the performance of calling a WebAssembly function. This code
path can be quite hot depending on the embedding case and we hadn't
really put much effort into optimizing the nitty gritty.The predominant optimization here is adding
#[inline]
to trivial
functions so performance is improved without having to compile with LTO.
Another optimization is to calllazy_per_thread_init
when traps are
initialized per-thread (when aStore
is created) rather than each time
a function is called. The next optimization is to change the unwind
reason in theCallThreadState
toMaybeUninit
to avoid extra checks
in the default case about whether we need to drop its variants (since in
the happy path we never need to drop it). The final optimization is to
optimize out a few checks whenasync
support is disabled for a small
speed boost.In a small benchmark where wasmtime calls a simple wasm function my
macOS computer dropped from 110ns to 86ns overhead, a 20% decrease. The
macOS overhead is still largely dominated by the global lock acquisition
and hash table management for traps right now, but I suspect the Linux
overhead is much better (should be on the order of ~30 or so ns).We still have a long way to go to compete with SpiderMonkey which, in
testing, seem to have ~6ns overhead in calling the same wasm function on
my computer.<!--
Please ensure that the following steps are all taken care of before submitting
the PR.
[ ] This has been discussed in issue #..., or if not, please tell us why
here.[ ] A short description of what this does, why it is needed; if the
description becomes long, the matter should probably be discussed in an issue
first.[ ] This PR contains test cases, if meaningful.
- [ ] A reviewer from the core maintainer team has been assigned for this PR.
If you don't know who could review this, please indicate so. The list of
suggested reviewers on the right can help you.Please ensure all communication adheres to the code of conduct.
-->
fitzgen submitted PR Review.
alexcrichton updated PR #2757 from fast-call
to main
.
alexcrichton merged PR #2757.
Last updated: Nov 22 2024 at 16:03 UTC