|
|
|
@ -50,10 +50,6 @@ def _get_server_status(start_time: float, end_time: float, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _create_server(config: control_pb2.ServerConfig) -> Tuple[aio.Server, int]: |
|
|
|
|
if config.async_server_threads != 1: |
|
|
|
|
_LOGGER.warning('config.async_server_threads [%d] != 1', |
|
|
|
|
config.async_server_threads) |
|
|
|
|
|
|
|
|
|
server = aio.server() |
|
|
|
|
if config.server_type == control_pb2.ASYNC_SERVER: |
|
|
|
|
servicer = benchmark_servicer.BenchmarkServicer() |
|
|
|
@ -154,10 +150,19 @@ class WorkerServicer(worker_service_pb2_grpc.WorkerServiceServicer): |
|
|
|
|
self._loop = asyncio.get_event_loop() |
|
|
|
|
self._quit_event = asyncio.Event() |
|
|
|
|
|
|
|
|
|
# async def _run_single_server(self, config, request_iterator, context): |
|
|
|
|
# server, port = _create_server(config) |
|
|
|
|
# await server.start() |
|
|
|
|
|
|
|
|
|
async def RunServer(self, request_iterator, context): |
|
|
|
|
config = (await context.read()).setup |
|
|
|
|
_LOGGER.info('Received ServerConfig: %s', config) |
|
|
|
|
|
|
|
|
|
if config.async_server_threads <= 0: |
|
|
|
|
_LOGGER.info('async_server_threads can\'t be [%d]', config.async_server_threads) |
|
|
|
|
_LOGGER.info('Using async_server_threads == [%d]', _NUM_CORES) |
|
|
|
|
config.async_server_threads = _NUM_CORES |
|
|
|
|
|
|
|
|
|
server, port = _create_server(config) |
|
|
|
|
await server.start() |
|
|
|
|
_LOGGER.info('Server started at port [%d]', port) |
|
|
|
@ -208,13 +213,17 @@ class WorkerServicer(worker_service_pb2_grpc.WorkerServiceServicer): |
|
|
|
|
_LOGGER.info('Received ClientConfig: %s', config) |
|
|
|
|
|
|
|
|
|
if config.async_client_threads <= 0: |
|
|
|
|
raise ValueError('async_client_threads can\'t be [%d]' % config.async_client_threads) |
|
|
|
|
elif config.async_client_threads == 1: |
|
|
|
|
_LOGGER.info('async_client_threads can\'t be [%d]', config.async_client_threads) |
|
|
|
|
_LOGGER.info('Using async_client_threads == [%d]', _NUM_CORES) |
|
|
|
|
config.async_client_threads = _NUM_CORES |
|
|
|
|
|
|
|
|
|
if config.async_client_threads == 1: |
|
|
|
|
await self._run_single_client(config, request_iterator, context) |
|
|
|
|
else: |
|
|
|
|
sub_workers = [] |
|
|
|
|
for _ in range(config.async_client_threads): |
|
|
|
|
sub_workers.append(await _create_sub_worker()) |
|
|
|
|
sub_workers = await asyncio.gather(*( |
|
|
|
|
_create_sub_worker() |
|
|
|
|
for _ in range(config.async_client_threads) |
|
|
|
|
)) |
|
|
|
|
|
|
|
|
|
calls = [worker.stub.RunClient() for worker in sub_workers] |
|
|
|
|
|
|
|
|
@ -259,7 +268,8 @@ class WorkerServicer(worker_service_pb2_grpc.WorkerServiceServicer): |
|
|
|
|
await worker.process.wait() |
|
|
|
|
_LOGGER.info('Sub worker [%s] quit', worker) |
|
|
|
|
|
|
|
|
|
async def CoreCount(self, unused_request, unused_context): |
|
|
|
|
@staticmethod |
|
|
|
|
async def CoreCount(unused_request, unused_context): |
|
|
|
|
return control_pb2.CoreResponse(cores=_NUM_CORES) |
|
|
|
|
|
|
|
|
|
async def QuitWorker(self, unused_request, unused_context): |
|
|
|
|