-
Notifications
You must be signed in to change notification settings - Fork 125
Optimize serialization of function calls #444
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # 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 <4257730+ludfjig@users.noreply.github.com>
…atures Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com>
…ight-guest Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com>
Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com>
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