apache / brpc

brpc is an Industrial-grade RPC framework using C++ Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation etc. "brpc" means "better RPC".
https://brpc.apache.org
Apache License 2.0
16.19k stars 3.93k forks source link

单个rpcserver的多连接带宽上限如何突破 #2119

Open zc08291161 opened 1 year ago

zc08291161 commented 1 year ago

问题描述 在一台linux服务器上部署一个依赖brpc的进程A,压测发现进程A最大的入口带宽为2.5GB/s左右,无论如何更改A进程的内部线程模型或者brpc的各种参数,都无法继续增长;但是硬件指标都没有跑满,这时再部署相同的进程B,发现带宽又可以继续增加到4.5GB/s左右,以此类推,增加进程的个数,可以将硬件打满

疑惑点 根据brpc的项目描述,也确实曾经描述过单个server的带宽上限约为2.3GB/s每秒,但这个限制到底源于什么呢?为什么增加brpc server可以解决,但是通过扩充单个server的调度线程或worker线程,就无法解决呢?这实在让人疑惑

Versions (各种版本) OS: CentOS Linux release 7.6.1810 (Core) Compiler: gcc 4.8.5

wwbmmm commented 1 year ago

增加event_dispatcher_num试试

zc08291161 commented 1 year ago

增加event_dispatcher_num试试

多谢提醒,这个已经增加过了,也是没有用

chenzhangyi commented 1 year ago

@zc08291161 最大吞吐的server数量和numa node数量一致么?

Tuvie commented 1 year ago

你使用的server本身带宽多少呢?2.5GB/s基本上接近25G带宽了。

zc08291161 commented 1 year ago

你使用的server本身带宽多少呢?2.5GB/s基本上接近25G带宽了。

我是双25GE网卡bond4绑定,实测可以达到6GB/s

Tuvie commented 1 year ago

2.5GB/s是单连接还是多连接?connection_type设置为pooled看看呢?

zc08291161 commented 1 year ago

numa node

没有太理解您的问题,我就是单台server,多个client进行压测,server只有一台,就这台server的最大入口带宽就是2.5GB/s

zc08291161 commented 1 year ago

2.5GB/s是单连接还是多连接?connection_type设置为pooled看看呢? 是有多个client,所以总的链接个数肯定是多个,不过每个链接都是single类型的,这种和pooled应该是类似的吧。无论增加多少个client,最大带宽都不会上升了。

zc08291161 commented 1 year ago

2.5GB/s是单连接还是多连接?connection_type设置为pooled看看呢?

实测还发现一个现象,我们利用sofa-rpc进行测试,最大带宽可以打到5GB/s左右,我现在怀疑是brpc的dispatch调度机制的问题,就是总是把自己让出来去接收消息,再由空闲的worker去调度dispatch线程,而sofa则是始终有一个dispatch线程工作。会不会是brpc的dipatch线程工作不充分导致的。(增加dipstach线程个数也试过,也没用)

Tuvie commented 1 year ago

如果任何一个cpu都没有100%,那应该不是dispatch的问题。

zc08291161 commented 1 year ago

如果任何一个cpu都没有100%,那应该不是dispatch的问题。

那请问还是否了解为何brpc单个server有带宽瓶颈么?

Tuvie commented 1 year ago

你说的这个带宽瓶颈我这里测试没有发现