Как максимизировать пропускную способность GRPC? - PullRequest
0 голосов
/ 12 мая 2018

В сети 100 ГБ я создаю сервер для прослушивания на 4 портах, и клиент grpc может достигать пропускной способности 3 ГБ + / с.Однако, когда сервер прослушивает один порт, клиент grpc достигает пропускной способности всего 1 ГБ / с, даже если я установил

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

1 Ответ

0 голосов
/ 14 мая 2018

Трудно сказать точно, где ваша программа становится узким местом без дополнительных данных (например, флеймографов и т. Д.).

Видя, как это происходит, когда вы переключаете сервер gRPC на прослушивание одного порта, я могу сделать некоторые предположения относительно того, где происходит замедление. Похоже, вы запрашиваете вызов на стороне сервера в верхней части цикла продолжения ( 1 ). Я бы посоветовал для другого шаблона; запросите некоторое фиксированное количество вызовов (в сотнях), затем в конце цикла обработчика повторно запросите вызов, чтобы сервер всегда был «подготовлен» для получения множества входящих RPC.

И пример этого шаблона можно найти в нашем коде драйвера QPS (точно настроенное, высоко оптимизированное приложение для тестирования производительности) ( 2 ).

TF также делает это таким образом ( 3 ).

Кроме того, просто несколько небольших выборочных проверок, когда я читаю ваш код. Есть некоторые места, которые вы могли бы подумать о настройке, чтобы получить лучшие номера. Например, вам может потребоваться выделить только один раз ( 4 ), чтобы избежать сравнительного анализа повторных вызовов malloc для каждого RPC. Кроме того, почему вы делаете пользовательскую сериализацию для байтового буфера здесь ( 5 )? Это может упустить специфичные для прото-оптимизации.

...