52 lines
1.6 KiB
ReStructuredText
52 lines
1.6 KiB
ReStructuredText
.. _module-pw_rpc-benchmark:
|
|
|
|
===================
|
|
pw_rpc Benchmarking
|
|
===================
|
|
pw_rpc provides tools for stress testing and benchmarking a Pigweed RPC
|
|
deployment and the transport it is running over. Two components are included:
|
|
|
|
* The pw.rpc.Benchmark service and its implementation.
|
|
* A Python module that runs tests using the Benchmark service.
|
|
|
|
------------------------
|
|
pw.rpc.Benchmark service
|
|
------------------------
|
|
The Benchmark service provides a low-level RPC service for sending data between
|
|
the client and server. The service is defined in ``pw_rpc/benchmark.proto``.
|
|
|
|
A raw RPC implementation of the benchmark service is provided. This
|
|
implementation is suitable for use in any system with pw_rpc. To access this
|
|
service, add a dependency on ``"$dir_pw_rpc:benchmark"`` in GN or
|
|
``pw_rpc.benchmark`` in CMake. Then, include the service
|
|
(``#include "pw_rpc/benchmark.h"``), instantiate it, and register it with your
|
|
RPC server, like any other RPC service.
|
|
|
|
The Benchmark service was designed with the Python-based benchmarking tools in
|
|
mind, but it may be used directly to test basic RPC functionality. The service
|
|
is well suited for use in automated integration tests or in an interactive
|
|
console.
|
|
|
|
Benchmark service
|
|
==================
|
|
.. literalinclude:: benchmark.proto
|
|
:language: protobuf
|
|
:lines: 14-
|
|
|
|
Example
|
|
=======
|
|
.. code-block:: c++
|
|
|
|
#include "pw_rpc/benchmark.h"
|
|
#include "pw_rpc/server.h"
|
|
|
|
constexpr pw::rpc::Channel kChannels[] = { /* ... */ };
|
|
static pw::rpc::Server server(kChannels);
|
|
|
|
static pw::rpc::BenchmarkService benchmark_service;
|
|
|
|
void RegisterServices() {
|
|
server.RegisterService(benchmark_service);
|
|
}
|
|
|