cosmos-proto icon indicating copy to clipboard operation
cosmos-proto copied to clipboard

feat: speed up ProtoMethods

Open elias-orijtech opened this issue 1 year ago • 2 comments

The ProtoMethods is called for every unmarshal, which in turn allocates an protoiface.Methods. The Methods object does not refer to a partucular message object, so the allocation can be saved by one-time initialization at startup.

Found by the the alecthomas/go_serialization_benchmarks suite:

go test -bench='Pulsar' -memprofile mem.out  -cpu 6  ./

Before: goos: darwin goarch: arm64 pkg: github.com/alecthomas/go_serialization_benchmarks Benchmark_Pulsar_Marshal-6 7480744 154.1 ns/op 51.57 B/serial 96 B/op 2 allocs/op Benchmark_Pulsar_Unmarshal-6 5057922 236.9 ns/op 51.60 B/serial 256 B/op 7 allocs/op

After: Benchmark_Pulsar_Marshal-6 7251019 153.9 ns/op 51.57 B/serial 96 B/op 2 allocs/op Benchmark_Pulsar_Unmarshal-6 6409070 187.2 ns/op 51.63 B/serial 160 B/op 5 allocs/op

CC @tac0turtle @odeke-em

elias-orijtech avatar Mar 20 '23 05:03 elias-orijtech

Added another optimization. Let me know if they belong in separate PRs.

eliasnaur avatar Mar 22 '23 00:03 eliasnaur

I believe the remaining allocations are intrinsic to the serialization process, and thus cannot be reduced further.

eliasnaur avatar Mar 22 '23 00:03 eliasnaur