110 lines
4.6 KiB
ReStructuredText
110 lines
4.6 KiB
ReStructuredText
.. zephyr:code-sample:: zbus-benchmark
|
|
:name: Benchmarking
|
|
:relevant-api: zbus_apis
|
|
|
|
Measure the time for sending 256KB from a producer to N consumers.
|
|
|
|
This sample implements an application to measure the time for sending 256KB from the producer to the
|
|
consumers.
|
|
|
|
Building and Running
|
|
********************
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/subsys/zbus/dyn_channel
|
|
:host-os: unix
|
|
:board: qemu_cortex_m3
|
|
:gen-args: -DCONFIG_BM_MESSAGE_SIZE=512 -DCONFIG_BM_ONE_TO=1 -DCONFIG_BM_LISTENERS=y
|
|
:goals: build run
|
|
|
|
Notice we have the following parameters:
|
|
|
|
* **CONFIG_BM_MESSAGE_SIZE** the size of the message to be transferred (2 to 4096 bytes);
|
|
* **CONFIG_BM_ONE_TO** number of consumers to send (1 up to 8 consumers);
|
|
* **CONFIG_BM_LISTENERS** Use y to perform the benchmark listeners;
|
|
* **CONFIG_BM_SUBSCRIBERS** Use y to perform the benchmark subscribers;
|
|
* **CONFIG_BM_MSG_SUBSCRIBERS** Use y to perform the benchmark message subscribers.
|
|
|
|
Sample Output
|
|
=============
|
|
The result would be something like:
|
|
|
|
.. code-block:: console
|
|
|
|
*** Booting Zephyr OS build zephyr-vX.Y.Z ***
|
|
I: Benchmark 1 to 1 using LISTENERS to transmit with message size: 512 bytes
|
|
I: Bytes sent = 262144, received = 262144
|
|
I: Average data rate: 12.62MB/s
|
|
I: Duration: 0.019805908s
|
|
|
|
@19805
|
|
|
|
|
|
Running the benchmark automatically
|
|
===================================
|
|
|
|
There is a `Robot framework <https://robotframework.org/>`_ script called ``benchmark_256KB.robot`` which runs all the input combinations as the complete benchmark.
|
|
The resulting file, ``zbus_dyn_benchmark_256KB.csv`` is generated in the project root folder. It takes a long time to execute. In the CSV file, we have the following columns:
|
|
|
|
+-----------------+---------------------+--------------------------+---------------+-------------+-------------+
|
|
| Observer type | Number of consumers | Message size (bytes) | Duration (ns) | RAM (bytes) | ROM (bytes) |
|
|
+=================+=====================+==========================+===============+=============+=============+
|
|
| LIS/SUB/MSG_SUB | 1,4,8 | 2,8,32,128,512 | float | int | int |
|
|
+-----------------+---------------------+--------------------------+---------------+-------------+-------------+
|
|
|
|
The complete benchmark command using Robot framework is:
|
|
|
|
.. code-block:: console
|
|
|
|
robot --variable serial_port:/dev/ttyACM0 --variable board:nrf52dk/nrf52832 -d /tmp/benchmark_out benchmark_256KB.robot
|
|
|
|
An example of execution using the ``nrf52dk/nrf52832`` board would generate a file like this:
|
|
|
|
.. code-block::
|
|
|
|
LISTENERS,1,2,890787.3333333334,9247,23091
|
|
LISTENERS,1,8,237925.0,9253,23091
|
|
LISTENERS,1,32,74513.0,9277,23151
|
|
LISTENERS,1,128,33813.0,9565,23231
|
|
LISTENERS,1,512,35746.0,10717,23623
|
|
LISTENERS,4,2,314198.3333333333,9274,23142
|
|
LISTENERS,4,8,82244.33333333333,9280,23142
|
|
LISTENERS,4,32,24057.333333333332,9304,23202
|
|
LISTENERS,4,128,9816.0,9592,23282
|
|
LISTENERS,4,512,9277.0,10744,23674
|
|
LISTENERS,8,2,211465.66666666666,9310,23202
|
|
LISTENERS,8,8,56294.0,9316,23210
|
|
LISTENERS,8,32,15635.0,9340,23270
|
|
LISTENERS,8,128,5818.0,9628,23350
|
|
LISTENERS,8,512,4862.0,10780,23742
|
|
SUBSCRIBERS,1,2,7804351.333333333,9927,23463
|
|
SUBSCRIBERS,1,8,1978179.3333333333,9933,23463
|
|
SUBSCRIBERS,1,32,514139.3333333333,9957,23523
|
|
SUBSCRIBERS,1,128,146759.0,10309,23603
|
|
SUBSCRIBERS,1,512,55104.0,11845,23995
|
|
SUBSCRIBERS,4,2,5551961.0,11994,24134
|
|
SUBSCRIBERS,4,8,1395009.0,12000,24134
|
|
SUBSCRIBERS,4,32,354583.3333333333,12024,24194
|
|
SUBSCRIBERS,4,128,92976.66666666667,12568,24274
|
|
SUBSCRIBERS,4,512,28015.0,15256,24666
|
|
SUBSCRIBERS,8,2,5449839.0,14750,24858
|
|
SUBSCRIBERS,8,8,1321766.6666666667,14756,24866
|
|
SUBSCRIBERS,8,32,332804.0,14780,24926
|
|
SUBSCRIBERS,8,128,85489.33333333333,15580,25006
|
|
SUBSCRIBERS,8,512,23905.0,19804,25398
|
|
MSG_SUBSCRIBERS,1,2,8783538.333333334,10371,25615
|
|
MSG_SUBSCRIBERS,1,8,2249592.6666666665,10377,25615
|
|
MSG_SUBSCRIBERS,1,32,610168.0,10401,25675
|
|
MSG_SUBSCRIBERS,1,128,207295.0,10753,25755
|
|
MSG_SUBSCRIBERS,1,512,143584.66666666666,12289,26147
|
|
MSG_SUBSCRIBERS,4,2,5787699.0,12318,26126
|
|
MSG_SUBSCRIBERS,4,8,1473907.0,12324,26126
|
|
MSG_SUBSCRIBERS,4,32,396127.6666666667,12348,26186
|
|
MSG_SUBSCRIBERS,4,128,126362.66666666667,12892,26266
|
|
MSG_SUBSCRIBERS,4,512,59040.666666666664,15580,26658
|
|
MSG_SUBSCRIBERS,8,2,5453999.333333333,14914,26610
|
|
MSG_SUBSCRIBERS,8,8,1356312.3333333333,14920,26650
|
|
MSG_SUBSCRIBERS,8,32,361368.3333333333,14944,26710
|
|
MSG_SUBSCRIBERS,8,128,113148.66666666667,15744,26790
|
|
MSG_SUBSCRIBERS,8,512,51218.333333333336,19968,27182
|