Skip to content
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

Lazily populate a store's trampoline map #3742

Merged

Commits on Jan 28, 2022

  1. Lazily populate a store's trampoline map

    This commit is another installment of "how fast can we make
    instantiation". Currently when instantiating a module with many function
    imports each function, typically from the host, is inserted into the
    store. This insertion process stores the `VMTrampoline` for the host
    function in a side table so it can be looked up later if the host
    function is called through the `Func` interface. This insertion process,
    however, involves a hash map insertion which can be relatively expensive
    at the scale of the rest of the instantiation process.
    
    The optimization implemented in this commit is to avoid inserting
    trampolines into the store at `Func`-insertion-time (aka instantiation
    time) and instead only lazily populate the map of trampolines when
    needed. The theory behind this is that almost all `Func` instances that
    are called indirectly from the host are actually wasm functions, not
    host-defined functions. This means that they already don't need to go
    through the map of host trampolines and can instead be looked up from
    the module they're defined in. With the assumed rarity of host functions
    making `lookup_trampoline` a bit slower seems ok.
    
    The `lookup_trampoline` function will now, on a miss from the wasm
    modules and `host_trampolines` map, lazily iterate over the functions
    within the store and insert trampolines into the `host_trampolines` map.
    This process will eventually reach something which matches the function
    provided because it should at least hit the same host function. The
    relevant `lookup_trampoline` now sports a new documentation block
    explaining all this as well for future readers.
    
    Concretely this commit speeds up instantiation of an empty module with
    100 imports and ~80 unique signatures from 10.6us to 6.4us, a 40%
    improvement.
    alexcrichton committed Jan 28, 2022
    Configuration menu
    Copy the full SHA
    3a5c9e6 View commit details
    Browse the repository at this point in the history

Commits on Feb 1, 2022

  1. Review comments

    alexcrichton committed Feb 1, 2022
    Configuration menu
    Copy the full SHA
    bf03035 View commit details
    Browse the repository at this point in the history

Commits on Feb 2, 2022

  1. Remove debug assert

    alexcrichton committed Feb 2, 2022
    Configuration menu
    Copy the full SHA
    6510445 View commit details
    Browse the repository at this point in the history