【笔记】直接使用protocol buffers的底层库,对特定场景的PB编解码进行处理,编码性能提升2.4倍,解码性能提升4.8倍
接上一篇文章:【笔记】golang中使用protocol buffers的底层库直接解码二进制数据
最近计划优化prometheus的remote write协议,因为业务需要,实现了一个remote write的代理。
通过profile发现,15%的CPU时间花在了prompb协议的解码上,11%的CPU花在了协议编码上,这部分资源能不能更少呢?
于是通过直接裸写pb encode/decode的方法,性能提升了不少:
goos: windows
goarch: amd64
cpu: Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
- | pb(次数/s) | gogoproto(次数/s) | 裸写(次数/s) |
---|---|---|---|
encode | 106839 (2.8倍) | 109888(2.8倍) | 302802 |
decode | 20895 (3.3倍) | 35101(2.0倍) | 69256 |
后续准备把这个代码贡献给prometheus团队。