-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
Refactor and simplify component trampolines #6751
Refactor and simplify component trampolines #6751
Conversation
Subscribe to Label Actioncc @fitzgen, @peterhuene
This issue or pull request has been labeled: "fuzzing", "wasmtime:api"
Thus the following users have been cc'd because of the following labels:
To subscribe or unsubscribe from this label, edit the |
In poking at bytecodealliance#6696 I felt that the amount of boilerplate for defining new kinds of trampolines in the component model was getting a bit excessive. There was already 6 different types and I was adding two more and I had to touch just a few too many places to get this done. In the end I decided to refactor how trampolines are handled in the component model to make it much easier to add new kinds of trampolines. To that end the type-specific counts/lists/etc are all gone now in favor of a single concept of a trampoline. This means components now track trampolines in-bulk rather than individually by type. For example compiling trampolines is now a loop over "compile this list of trampolines" where previously it was N loops for the N types of trampolines. The `Trampoline` definition is where the enum and dispatch happens where that contains all possible trampolines that a component could require. This ended up being a large refactor to the Cranelift component integration, but there is not intended to be any functional change from this refactoring. Additionally all trampolines are now removed from the global initializers list since there's nothing preventing them from being initialized earlier on during the instantiation process. Overall this should drastically reduce the number of locations that need to have trampoline-specific knowledge to translation, the dataflow graph, and compilation. Nearly everything else can operate over everything in bulk and forward between these systems.
667004b
to
0df191a
Compare
Ok this should be good to go now that #6691 has landed |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice!
cc @pchickey on that last failure, it may be a spurious failure?
|
This fills out support in FACT in Wasmtime to support component-to-component calls that use resources. This ended up being relatively simple as it's "just" a matter of moving resources between tables which at this time bottoms out in calls to the host. These new trampolines are are relatively easy to add after bytecodealliance#6751 which helps keep this change contained. Closes bytecodealliance#6696
* Implement component-to-component calls with resources This fills out support in FACT in Wasmtime to support component-to-component calls that use resources. This ended up being relatively simple as it's "just" a matter of moving resources between tables which at this time bottoms out in calls to the host. These new trampolines are are relatively easy to add after #6751 which helps keep this change contained. Closes #6696 * Review comments
* main: (47 commits) Add core dump support to the runtime (bytecodealliance#6513) Resource table tracks child relationships (bytecodealliance#6779) Wasmtime: Move `OnDemandInstanceAllocator` to its own module (bytecodealliance#6790) wasi: Test the stdio streams implementation (bytecodealliance#6764) Don't generate same-named imports in fact modules (bytecodealliance#6783) Wasmtime: Add support for Wasm tail calls (bytecodealliance#6774) Cranelift: Fix `ABIMachineSpec::gen_add_imm` for riscv64 (bytecodealliance#6780) Update the wasm-tools family of crates, disallow empty component types (bytecodealliance#6777) Fix broken link to WASI API documentation (bytecodealliance#6775) A bunch of cleanups for cranelift-codegen-meta (bytecodealliance#6772) Implement component-to-component calls with resources (bytecodealliance#6769) Ignore async_stack_size if async_support is disabled (bytecodealliance#6771) A bunch of minor cleanups (bytecodealliance#6767) Fix flaky tests in preview2 streams (bytecodealliance#6763) Refactor and simplify component trampolines (bytecodealliance#6751) Cranelift: Implement tail calls on riscv64 (bytecodealliance#6749) WASI Preview 2: rewrite streams and pollable implementation (bytecodealliance#6556) cranelift-wasm: Add support for translating Wasm tail calls to CLIF (bytecodealliance#6760) Cranelift: Get tail calls working on aarch64 (bytecodealliance#6723) Implement component model resources in Wasmtime (bytecodealliance#6691) ...
In poking at #6696 I felt that the amount of boilerplate for defining
new kinds of trampolines in the component model was getting a bit
excessive. There was already 6 different types and I was adding two more
and I had to touch just a few too many places to get this done. In the
end I decided to refactor how trampolines are handled in the component
model to make it much easier to add new kinds of trampolines.
To that end the type-specific counts/lists/etc are all gone now in favor
of a single concept of a trampoline. This means components now track
trampolines in-bulk rather than individually by type. For example
compiling trampolines is now a loop over "compile this list of
trampolines" where previously it was N loops for the N types of
trampolines. The
Trampoline
definition is where the enum and dispatchhappens where that contains all possible trampolines that a component
could require.
This ended up being a large refactor to the Cranelift component
integration, but there is not intended to be any functional change from
this refactoring. Additionally all trampolines are now removed from the
global initializers list since there's nothing preventing them from
being initialized earlier on during the instantiation process.
Overall this should drastically reduce the number of locations that need
to have trampoline-specific knowledge to translation, the dataflow
graph, and compilation. Nearly everything else can operate over
everything in bulk and forward between these systems.