如何最大化grpc吞吐量?

Gon*_*Bao 3 throughput grpc

在 100Gb 网络上,我创建了一个服务器来监听 4 个端口,grpc 客户端可以达到 3GB+/s 的吞吐量。但是,当服务器监听一个端口时,grpc 客户端的吞吐量仅为 1GB/s,即使我设置

args.SetInt(GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES, 1024*1024*1024); args.SetInt(GRPC_ARG_MAX_CONCURRENT_STREAMS, 10);

好像 grpc 客户端只能同时使用一个连接到一个端口服务。我对吗?

正确的做法是什么?

我的代码在这里:

客户端:https : //github.com/gongweibao/tests/blob/develop/grpc_test/client.cc
服务器:https : //github.com/gongweibao/tests/blob/develop/grpc_test/server.cc

Noa*_*sen 5

如果没有更多数据(如火焰图等),很难准确说出您的程序在哪里遇到瓶颈。

看到当您将 gRPC 服务器更改为在一个端口上侦听时会发生这种情况,我可以猜测减速的位置。看起来您在继续循环 ( 1 )的顶部请求服务器端调用。我建议采用不同的模式;请求一些固定数量的调用(以 100 秒为单位),然后在处理程序循环结束时重新请求调用,以便服务器始终“武装”以接收许多传入的 RPC。

这种模式的示例可以在我们的 QPS 驱动程序代码(微调、高度优化的基准测试应用程序)( 2 ) 中找到。

TF 也是这样做的(3)。

另外,当我阅读您的代码时,只需进行一些小的抽查。有些地方您可能会考虑调整以获得更好的数字。例如,您可能只想在此处分配一次 ( 4 ),以避免对每个 RPC 的重复 malloc 调用进行基准测试。另外,为什么要在此处(5)对 bytebuffer 进行自定义序列化?这可能会错过 proto 特定的优化。