-
Notifications
You must be signed in to change notification settings - Fork 126
Optimize serialization of function calls #444
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
base: main
Are you sure you want to change the base?
Conversation
8226520
to
df05f27
Compare
@@ -288,9 +223,40 @@ impl TryFrom<FunctionCall> for Vec<u8> { | |||
}, | |||
); | |||
builder.finish_size_prefixed(function_call, None); | |||
let res = builder.finished_data().to_vec(); |
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.
This to_vec
is the clone I was able to avoid, which is the most important part of this PR
…ssary allocations and copies Signed-off-by: Ludvig Liljenberg <[email protected]>
…atures Signed-off-by: Ludvig Liljenberg <[email protected]>
…ight-guest Signed-off-by: Ludvig Liljenberg <[email protected]>
Signed-off-by: Ludvig Liljenberg <[email protected]>
df05f27
to
9d05679
Compare
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.
LGTM. I left some small comments
"Tried to serialize a host function call as a guest function call" | ||
); | ||
} | ||
FunctionCallType::Guest => {} |
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.
Nit: maybe move the logic below on the Guest
match arm or use an if let FunctionCallType::Host
.
|
||
#[cfg_attr(feature = "tracing", instrument(err(Debug), skip_all, parent = Span::current(), level= "Trace"))] | ||
pub fn validate_host_function_call_buffer(function_call_buffer: &[u8]) -> Result<()> { |
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.
Maybe I missed it, but where was this function called?
If it wasn't used at all, I am curious how the compiler hasn't warned us.
to_vec
on the serialized flatbuffer slice. A downside of this is that we expose an implementation detail ("FlatBufferBuilder"), but I think this is acceptable forFunctionCall
, and not visible to users anyway.write_guest_function_call
take in aFunctionCall
rather than a raw slice.validate_host_function_call_buffer
guest_call_*
benchmarks shows rougly -6% execution speedup on my local machine, but will depend heavily on the types of function calls and parameters used