【问题标题】:How to maximize grpc throughput?如何最大化grpc吞吐量?
【发布时间】:2018-05-12 00:06:29
【问题描述】:

在 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

【问题讨论】:

    标签: grpc throughput


    【解决方案1】:

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

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

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

    TF 也是这样做的 (3)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多