3 Commits

Author SHA1 Message Date
Alex Crichton 8f03b22e07 Remove wasm-c-api submodule (#8170)
* Remove wasm-c-api submodule

This submodule hasn't been updated in ~3 years at this point and we
additionally don't need most of the submodule. Instead add a script to
copy the files we need and verify in CI that the files are up-to-date.

This also makes using the C API a bit nicer where you don't have to have
two `include` directories with a Wasmtime source tree, just one
suffices.

* Don't format wasm.h{,h} vendored files
2024-03-18 18:58:11 +00:00
Tyler Rockwood 85c0a2df54 Switch to simpler fuel APIs (#7298)
In an effort to simplify the many fuel related APIs, simplify the
interface here to a single counter with get and set methods.
Additionally the async yield is reduced to an interval of the total fuel
instead of injecting fuel, so it's easy to still reason about how much
fuel is left even with yielding turned on.

Internally this works by keeping two counters - one the VM uses to
increment towards 0 for fuel, the other to track how much is in
"reserve". Then when we're out of gas, we pull from the reserve to
refuel and continue. We use the reserve in two cases: one for overflow
of the fuel (which is an i64 and the API expresses fuel as u64) and the
other for async yieling, which then the yield interval acts as a cap to
how much we can refuel with.

This also means that `get_fuel` can return the full range of `u64`
before this change it could only return up to `i64::MAX`. This is
important because this PR is removing the functionality to track fuel
consumption, and this makes the API less error prone for embedders to
track consumption themselves.

Careful to note that the VM counter that is stored as `i64` can be
positive if an instruction "costs" multiple units of fuel when the fuel
ran out.

prtest:full

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>
2023-10-23 19:50:23 +00:00
Tyler Rockwood 37cf8e1e75 Async support in the C API (#7106)
* c-api: Add a feature for async

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Add support for async config

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Add support for calling async functions

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Add ability to yield execution of Wasm in a store

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Introduce wasmtime_linker_instantiate_async

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Support defining async host functions

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* gitignore: ignore cmake cache for examples

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* examples: Add example of async API in C

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Consolidate async functionality into a single place

Put all the async stuff in it's own header and own rust source file

Also remove the wasmtime_async_continuation_new function, users can just
allocate it directly.

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Make async function safe

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Remove wasmtime_call_future_get_results

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Simplify CHostCallFuture

Move the result translation and hostcall_val_storage usage into an async
function

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Simplify C continuation implementation

Remove the caller, which means that we don't need another struct for the
future implementation.

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Improve async.h documentation

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Cleanup from previous changes

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* examples: Fix example

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Simplify continuation callback

This gives more duality with calling an async function and also means
that the implementation can pretty much mirror the sync version.

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Fix async.h documentation

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Fix documentation for async.h

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: Review feedback

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* examples: Downgrade async.cpp example to C++11

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* c-api: initialize continuation with a panic callback

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* prtest:full

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

---------

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>
2023-10-03 13:42:56 +00:00