prost icon indicating copy to clipboard operation
prost copied to clipboard

Optimization opportunity: `encoded_len` gets computed twice when encoding a message

Open ivoanjo opened this issue 6 months ago • 2 comments

Hey :wave:! I work at Datadog and we use prost in our libdatadog rust component.

While looking at some performance profiling of our protobuf encoding, I noticed that there's quite a bit of repeated work between encode and encode_raw since both need encoded_len, and it gets computed twice:

image

Specifically, Message::encode computes the encoded_len to check if the buffer has enough space, and then throws this info away, and then encode_raw gets the number again as it needs to record the field size in the pprof.

Computing encoded_len is around 5% of the time of this benchmark, so there would be a nice gain in encoding speed if it was computed only once.

We're happy users of prost so I decided to report this in the spirit of "see something, say something".

Thanks again for your amazing work so far :pray:

ivoanjo avatar Jul 30 '24 11:07 ivoanjo