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.38k stars 3.96k forks source link

云存储场景下的 RDMA 优化 #2344

Open alogfans opened 1 year ago

alogfans commented 1 year ago

Is your feature request related to a problem? (你需要的功能是否与某个问题有关?) 在云存储场景中,随着 RDMA 的广泛使用,现有开源 brpc 的性能出现了明显的瓶颈:1)采用 completion channel + epoll 接收消息,不仅引入中断开销,还产生更多内核态切换;2)brpc 采用的 bthread 线程模型也具有较高的开销。 我们注意到你们在 ApacheCon 的技术报告,报告中所述的设计方案符合我们的需求。希望能将这些功能汇入主线,提高 brpc 的适用性。 https://apachecon.com/acasia2022/zh/sessions/rpc-1184.html

Describe the solution you'd like (描述你期望的解决方法) 拿掉目前基于 epoll 的处理逻辑,改用 busy polling (DPDK 或 RDMA)。正如你们在技术报告中所述,修改主要包含三个方面:

Describe alternatives you've considered (描述你想到的折衷方案) N/A

Additional context/screenshots (更多上下文/截图) N/A

zhoumo02 commented 1 year ago

你好! 目前brpc在百度公司内部,使用polling模型、用户态协议栈、DPDK等技术已经发布了相关的版本,并在一些产品上取得了不错的性能收益,并且有计划在未来合适的时间开源出来

谢谢!

yanglimingcn commented 1 year ago

请问去掉了bthread,polling模型下,用户的代码还能做到顺序执行吗?还是得实现callback这样的异步代码?

zhoumo02 commented 1 year ago

你好!

目前在百度公司内部正在使用的版本,用户程序在发送rpc的时候只支持异步,这样可以做到不阻塞polling 线程,这个是一个比较容易想到的常规的考虑,但是缺点是对于已经上线多年的业务代码可能需要比较大的改造;我们也考虑到了有些业务程序需要支持同步rpc,因此在我们目前正在迭代的版本中,已经考虑了对同步rpc的支持,该版本正在研发设计当中

谢谢!

yanglimingcn commented 1 year ago

如果不想阻塞polling的线程,那看起来还是要走到协程这条路上来?有比bthread性能更好的方案吗?

zhoumo02 commented 1 year ago

你好!

改成全异步的是一个方案;如果不想改成全异步的,可以考虑发送rpc的线程在polling 线程的外部,发送rpc的线程是单独的,发送rpc的时候,brpc内部可以考虑将rpc的发送过程封装成一个任务注入到polling 线程中去执行,这样发送rpc的线程因为在外部,所以不会阻塞polling线程,这个方案是我们内部一些业务采纳的方案,效果也是不错的;或者就是用bthread,在polling线程中增加同步的支持,这个我们内部正在设计研发

rpbear88 commented 9 months ago

@zhoumo02 有最新的关于这块的开源计划进展吗?我们这边有新的项目开发计划,但是现在公开的rpc框架都没有这方面的支持,非常急切想看到brpc的功能合入。