babylon

[English]

Use arena for brpc

brpc在调用用户的service前,需要在内部先完成Request和Response的实例构建,并在service前后执行对应的正反序列化。默认采用动态堆内存分配模式创建,对于比较复杂的结构,内存分配释放和Message结构的构建和析构可能也会带来可见的开销。

Protobuf在3.x之后增加了Arena分配功能,针对复杂结构提供了聚集分配和释放能力。较新版本的brpc也提供了Protobuf arena组件进行支持。在这些基础上,通过应用arenastirng可以针对string成员实现进一步加速。

除了使用原生的Arena,也可以使用babylon::SwissMemoryResource实现内存池加速。babylon::SwissMemoryResource通过可定制的定长分页重用机制,可以进一步提升灵活性。

性能演示

CPU: AMD EPYC 7W83 64-Core Processor, taskset 0-3 core

QPS: 800