When a wasm function that takes and returns a list of u8 is called > 600k times we are running out of memory. I still need to setup a pure repro case of wasmtime outside of my engine.
I can't say for sure if this is in how we're using wasmtime or if there is a leak in wasmtime itself. When we compile against wasm32-unknown-unknown the leak doesn't happen. There's evidently some kind of interop problem with us when wasm32-wasi is in play.
Does anyone have a good tip for where to start investigating?
Wit:
step: function(me: s64, cell: list<u8>) -> list<u8>
Rust:
wit_bindgen_rust::export!("agent.wit");
struct Agent;
// use std::io::Cursor;
// use byteorder::{LittleEndian, ReadBytesExt};
impl agent::Agent for Agent {
fn step(_me: i64, cell: Vec<u8>) -> Vec<u8> {
// return first entity in cell
cell[..16].to_vec()
}
}
There was a similar use issue recently reported where it had to do with the linker-inserted command/reactor bits, although whether or not that's applicable here depends on the way you're compiling. Given though that it's wasi-specific it seems likely it's the same thing
Thank you that does look very, very similar. I'm glad I asked!
Last updated: Dec 23 2024 at 14:03 UTC