|
|
|
@ -69,6 +69,10 @@ DEEP=100 |
|
|
|
|
# wide is the number of client channels in multi-channel tests (1 otherwise) |
|
|
|
|
WIDE=64 |
|
|
|
|
|
|
|
|
|
# For most synchronous clients, DEEP*WIDE threads will be created. |
|
|
|
|
SYNC_DEEP=10 |
|
|
|
|
SYNC_WIDE=8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _get_secargs(is_secure): |
|
|
|
|
if is_secure: |
|
|
|
@ -81,6 +85,7 @@ def remove_nonproto_fields(scenario): |
|
|
|
|
"""Remove special-purpose that contains some extra info about the scenario |
|
|
|
|
but don't belong to the ScenarioConfig protobuf message""" |
|
|
|
|
scenario.pop('CATEGORIES', None) |
|
|
|
|
scenario.pop('CLIENT_LANGUAGE', None) |
|
|
|
|
scenario.pop('SERVER_LANGUAGE', None) |
|
|
|
|
return scenario |
|
|
|
|
|
|
|
|
@ -89,7 +94,8 @@ def _ping_pong_scenario(name, rpc_type, |
|
|
|
|
client_type, server_type, |
|
|
|
|
secure=True, |
|
|
|
|
use_generic_payload=False, |
|
|
|
|
use_unconstrained_client=False, |
|
|
|
|
unconstrained_client=None, |
|
|
|
|
client_language=None, |
|
|
|
|
server_language=None, |
|
|
|
|
server_core_limit=0, |
|
|
|
|
async_server_threads=0, |
|
|
|
@ -130,18 +136,28 @@ def _ping_pong_scenario(name, rpc_type, |
|
|
|
|
# For proto payload, only the client should get the config. |
|
|
|
|
scenario['client_config']['payload_config'] = EMPTY_PROTO_PAYLOAD |
|
|
|
|
|
|
|
|
|
if use_unconstrained_client: |
|
|
|
|
if unconstrained_client: |
|
|
|
|
if unconstrained_client == 'async': |
|
|
|
|
deep = DEEP |
|
|
|
|
wide = WIDE |
|
|
|
|
elif unconstrained_client == 'sync': |
|
|
|
|
deep = SYNC_DEEP |
|
|
|
|
wide = SYNC_WIDE |
|
|
|
|
else: |
|
|
|
|
raise Exception('Illegal value of unconstrained_client option.') |
|
|
|
|
|
|
|
|
|
scenario['num_clients'] = 0 # use as many client as available. |
|
|
|
|
# TODO(jtattermusch): for SYNC_CLIENT, this will create 100*64 threads |
|
|
|
|
# and that's probably too much (at least for wrapped languages). |
|
|
|
|
scenario['client_config']['outstanding_rpcs_per_channel'] = DEEP |
|
|
|
|
scenario['client_config']['client_channels'] = WIDE |
|
|
|
|
scenario['client_config']['outstanding_rpcs_per_channel'] = deep |
|
|
|
|
scenario['client_config']['client_channels'] = wide |
|
|
|
|
scenario['client_config']['async_client_threads'] = 0 |
|
|
|
|
else: |
|
|
|
|
scenario['client_config']['outstanding_rpcs_per_channel'] = 1 |
|
|
|
|
scenario['client_config']['client_channels'] = 1 |
|
|
|
|
scenario['client_config']['async_client_threads'] = 1 |
|
|
|
|
|
|
|
|
|
if client_language: |
|
|
|
|
# the CLIENT_LANGUAGE field is recognized by run_performance_tests.py |
|
|
|
|
scenario['CLIENT_LANGUAGE'] = client_language |
|
|
|
|
if server_language: |
|
|
|
|
# the SERVER_LANGUAGE field is recognized by run_performance_tests.py |
|
|
|
|
scenario['SERVER_LANGUAGE'] = server_language |
|
|
|
@ -196,27 +212,27 @@ class CXXLanguage: |
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'cpp_protobuf_async_unary_qps_unconstrained_%s' % secstr, rpc_type='UNARY', |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', |
|
|
|
|
use_unconstrained_client=True, |
|
|
|
|
unconstrained_client='async', |
|
|
|
|
secure=secure, |
|
|
|
|
categories=smoketest_categories) |
|
|
|
|
|
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'cpp_protobuf_async_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', |
|
|
|
|
use_unconstrained_client=True, |
|
|
|
|
unconstrained_client='async', |
|
|
|
|
secure=secure) |
|
|
|
|
|
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'cpp_generic_async_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', |
|
|
|
|
use_unconstrained_client=True, use_generic_payload=True, |
|
|
|
|
unconstrained_client='async', use_generic_payload=True, |
|
|
|
|
secure=secure, |
|
|
|
|
categories=smoketest_categories) |
|
|
|
|
|
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'cpp_generic_async_streaming_qps_one_server_core_%s' % secstr, rpc_type='STREAMING', |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', |
|
|
|
|
use_unconstrained_client=True, use_generic_payload=True, |
|
|
|
|
unconstrained_client='async', use_generic_payload=True, |
|
|
|
|
server_core_limit=1, async_server_threads=1, |
|
|
|
|
secure=secure) |
|
|
|
|
|
|
|
|
@ -258,13 +274,13 @@ class CSharpLanguage: |
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'csharp_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', |
|
|
|
|
use_unconstrained_client=True, |
|
|
|
|
unconstrained_client='async', |
|
|
|
|
categories=[SMOKETEST]) |
|
|
|
|
|
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'csharp_protobuf_async_streaming_qps_unconstrained', rpc_type='STREAMING', |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', |
|
|
|
|
use_unconstrained_client=True) |
|
|
|
|
unconstrained_client='async') |
|
|
|
|
|
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'csharp_to_cpp_protobuf_sync_unary_ping_pong', rpc_type='UNARY', |
|
|
|
@ -277,6 +293,22 @@ class CSharpLanguage: |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', |
|
|
|
|
server_language='c++', server_core_limit=1, async_server_threads=1) |
|
|
|
|
|
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'csharp_to_cpp_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', |
|
|
|
|
unconstrained_client='async', server_language='c++') |
|
|
|
|
|
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'csharp_to_cpp_protobuf_sync_to_async_unary_qps_unconstrained', rpc_type='UNARY', |
|
|
|
|
client_type='SYNC_CLIENT', server_type='ASYNC_SERVER', |
|
|
|
|
unconstrained_client='sync', server_language='c++') |
|
|
|
|
|
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'cpp_to_csharp_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', |
|
|
|
|
unconstrained_client='async', client_language='c++') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __str__(self): |
|
|
|
|
return 'csharp' |
|
|
|
|
|
|
|
|
@ -313,14 +345,14 @@ class NodeLanguage: |
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'node_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', |
|
|
|
|
use_unconstrained_client=True, |
|
|
|
|
unconstrained_client='async', |
|
|
|
|
categories=[SMOKETEST]) |
|
|
|
|
|
|
|
|
|
# TODO(jtattermusch): make this scenario work |
|
|
|
|
#yield _ping_pong_scenario( |
|
|
|
|
# 'node_protobuf_async_streaming_qps_unconstrained', rpc_type='STREAMING', |
|
|
|
|
# client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', |
|
|
|
|
# use_unconstrained_client=True) |
|
|
|
|
# unconstrained_client='async') |
|
|
|
|
|
|
|
|
|
# TODO(jtattermusch): make this scenario work |
|
|
|
|
#yield _ping_pong_scenario( |
|
|
|
@ -369,19 +401,15 @@ class PythonLanguage: |
|
|
|
|
client_type='SYNC_CLIENT', server_type='SYNC_SERVER', |
|
|
|
|
categories=[SMOKETEST]) |
|
|
|
|
|
|
|
|
|
# TODO(jtattermusch): |
|
|
|
|
# The qps_worker server gets thread starved with ~6400 threads, the GIL |
|
|
|
|
# enforces that a single thread runs at a time, with no way to set thread |
|
|
|
|
# priority. Re-evaluate after changing DEEP and WIDE. |
|
|
|
|
#yield _ping_pong_scenario( |
|
|
|
|
# 'python_protobuf_sync_unary_qps_unconstrained', rpc_type='UNARY', |
|
|
|
|
# client_type='SYNC_CLIENT', server_type='SYNC_SERVER', |
|
|
|
|
# use_unconstrained_client=True) |
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'python_protobuf_sync_unary_qps_unconstrained', rpc_type='UNARY', |
|
|
|
|
client_type='SYNC_CLIENT', server_type='SYNC_SERVER', |
|
|
|
|
unconstrained_client='sync') |
|
|
|
|
|
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'python_protobuf_async_streaming_qps_unconstrained', rpc_type='STREAMING', |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='SYNC_SERVER', |
|
|
|
|
use_unconstrained_client=True) |
|
|
|
|
unconstrained_client='async') |
|
|
|
|
|
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'python_to_cpp_protobuf_sync_unary_ping_pong', rpc_type='UNARY', |
|
|
|
@ -420,17 +448,15 @@ class RubyLanguage: |
|
|
|
|
client_type='SYNC_CLIENT', server_type='SYNC_SERVER', |
|
|
|
|
categories=[SMOKETEST]) |
|
|
|
|
|
|
|
|
|
# TODO: scenario reports QPS of 0.0 |
|
|
|
|
#yield _ping_pong_scenario( |
|
|
|
|
# 'ruby_protobuf_sync_unary_qps_unconstrained', rpc_type='UNARY', |
|
|
|
|
# client_type='SYNC_CLIENT', server_type='SYNC_SERVER', |
|
|
|
|
# use_unconstrained_client=True) |
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'ruby_protobuf_sync_unary_qps_unconstrained', rpc_type='UNARY', |
|
|
|
|
client_type='SYNC_CLIENT', server_type='SYNC_SERVER', |
|
|
|
|
unconstrained_client='sync') |
|
|
|
|
|
|
|
|
|
# TODO: scenario reports QPS of 0.0 |
|
|
|
|
#yield _ping_pong_scenario( |
|
|
|
|
# 'ruby_protobuf_sync_streaming_qps_unconstrained', rpc_type='STREAMING', |
|
|
|
|
# client_type='SYNC_CLIENT', server_type='SYNC_SERVER', |
|
|
|
|
# use_unconstrained_client=True) |
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'ruby_protobuf_sync_streaming_qps_unconstrained', rpc_type='STREAMING', |
|
|
|
|
client_type='SYNC_CLIENT', server_type='SYNC_SERVER', |
|
|
|
|
unconstrained_client='sync') |
|
|
|
|
|
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'ruby_to_cpp_protobuf_sync_unary_ping_pong', rpc_type='UNARY', |
|
|
|
@ -492,26 +518,26 @@ class JavaLanguage: |
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'java_protobuf_async_unary_qps_unconstrained_%s' % secstr, rpc_type='UNARY', |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', |
|
|
|
|
use_unconstrained_client=True, |
|
|
|
|
unconstrained_client='async', |
|
|
|
|
secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS, |
|
|
|
|
categories=smoketest_categories) |
|
|
|
|
|
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'java_protobuf_async_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', |
|
|
|
|
use_unconstrained_client=True, |
|
|
|
|
unconstrained_client='async', |
|
|
|
|
secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS) |
|
|
|
|
|
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'java_generic_async_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', |
|
|
|
|
use_unconstrained_client=True, use_generic_payload=True, |
|
|
|
|
unconstrained_client='async', use_generic_payload=True, |
|
|
|
|
secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS) |
|
|
|
|
|
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'java_generic_async_streaming_qps_one_server_core_%s' % secstr, rpc_type='STREAMING', |
|
|
|
|
client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', |
|
|
|
|
use_unconstrained_client=True, use_generic_payload=True, |
|
|
|
|
unconstrained_client='async', use_generic_payload=True, |
|
|
|
|
async_server_threads=1, |
|
|
|
|
secure=secure, warmup_seconds=JAVA_WARMUP_SECONDS) |
|
|
|
|
|
|
|
|
@ -560,25 +586,28 @@ class GoLanguage: |
|
|
|
|
secure=secure, |
|
|
|
|
categories=smoketest_categories) |
|
|
|
|
|
|
|
|
|
# unconstrained_client='async' is intended (client uses goroutines) |
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'go_protobuf_sync_unary_qps_unconstrained_%s' % secstr, rpc_type='UNARY', |
|
|
|
|
client_type='SYNC_CLIENT', server_type='SYNC_SERVER', |
|
|
|
|
use_unconstrained_client=True, |
|
|
|
|
unconstrained_client='async', |
|
|
|
|
secure=secure, |
|
|
|
|
categories=smoketest_categories) |
|
|
|
|
|
|
|
|
|
# unconstrained_client='async' is intended (client uses goroutines) |
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'go_protobuf_sync_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', |
|
|
|
|
client_type='SYNC_CLIENT', server_type='SYNC_SERVER', |
|
|
|
|
use_unconstrained_client=True, |
|
|
|
|
unconstrained_client='async', |
|
|
|
|
secure=secure) |
|
|
|
|
|
|
|
|
|
# unconstrained_client='async' is intended (client uses goroutines) |
|
|
|
|
# ASYNC_GENERIC_SERVER for Go actually uses a sync streaming server, |
|
|
|
|
# but that's mostly because of lack of better name of the enum value. |
|
|
|
|
yield _ping_pong_scenario( |
|
|
|
|
'go_generic_sync_streaming_qps_unconstrained_%s' % secstr, rpc_type='STREAMING', |
|
|
|
|
client_type='SYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', |
|
|
|
|
use_unconstrained_client=True, use_generic_payload=True, |
|
|
|
|
unconstrained_client='async', use_generic_payload=True, |
|
|
|
|
secure=secure) |
|
|
|
|
|
|
|
|
|
# TODO(jtattermusch): add scenarios go vs C++ |
|
|
|
|