blob: f42bf7ca7e585c733ee28da609c2b9a7c67ec10f [file] [log] [blame]
.. _zbus-benchmark-sample:
Benchmark sample
################
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=1 -DCONFIG_BM_ONE_TO=1 -DCONFIG_BM_ASYNC=y
:goals: build run
Notice we have the following parameters:
* **CONFIG_BM_MESSAGE_SIZE** the size of the message to be transferred (1, 2, 4, 8, 16, 32, 64, 128, or 256);
* **CONFIG_BM_ONE_TO** number of consumers to send (1, 2, 4, or 8);
* **CONFIG_BM_ASYNC** if the execution must be asynchronous or synchronous. Use y to async and n to sync;
Sample Output
=============
The result would be something like:
.. code-block:: console
*** Booting Zephyr OS build zephyr-v3.3.0 ***
I: Benchmark 1 to 1: Dynamic memory, SYNC transmission and message size 1
I: Bytes sent = 262144, received = 262144
I: Average data rate: 0.6MB/s
I: Duration: 4.72020167s
@4072020167
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:
+------------+---------------------+--------------------------+---------------+-------------+-------------+
| Style | Number of consumers | Message size (bytes) | Duration (ns) | RAM (bytes) | ROM (bytes) |
+============+=====================+==========================+===============+=============+=============+
| SYNC/ASYNC | 1,2,4,8 | 1,2,4,8,16,32,64,128,256 | float | int | int |
+------------+---------------------+--------------------------+---------------+-------------+-------------+
The complete benchmark command using Robot framework is:
.. code-block:: console
robot --variable serial_port:/dev/ttyACM0 --variable board:nrf52833dk_nrf52833 -d /tmp/benchmark_out benchmark_256KB.robot
An example of execution using the ``nrf52833dk_nrf52833`` board would generate a file like this:
.. code-block::
SYNC,1,1,2312815348.3333335,7286,23752
SYNC,1,2,1172444661.3333333,7287,23760
SYNC,1,4,602284749.6666666,7289,23768
SYNC,1,8,323750814.0,7293,23772
SYNC,1,16,175120035.66666666,7301,23776
SYNC,1,32,103942871.33333333,7317,23776
SYNC,1,64,68318685.0,7349,23776
SYNC,1,128,50567627.333333336,7477,23776
SYNC,1,256,41656494.0,7733,23776
SYNC,2,1,1277842204.3333333,7298,23768
SYNC,2,2,647094726.6666666,7299,23776
SYNC,2,4,329559326.3333333,7301,23784
SYNC,2,8,170979817.66666666,7305,23796
SYNC,2,16,95174153.66666667,7313,23792
SYNC,2,32,55786133.0,7329,23792
SYNC,2,64,36173502.333333336,7361,23792
SYNC,2,128,26326497.666666668,7489,23792
SYNC,2,256,21280924.333333332,7745,23792
SYNC,4,1,745513916.0,7322,23800
SYNC,4,2,374755859.6666667,7323,23808
SYNC,4,4,191497802.66666666,7325,23816
SYNC,4,8,101399739.66666667,7329,23820
SYNC,4,16,54026286.0,7337,23824
SYNC,4,32,31097412.0,7353,23824
SYNC,4,64,19643148.333333332,7385,23824
SYNC,4,128,13936360.333333334,7513,23824
SYNC,4,256,11047363.333333334,7769,23824
SYNC,8,1,477518717.3333333,7370,23864
SYNC,8,2,240773518.66666666,7371,23872
SYNC,8,4,121897379.33333333,7373,23880
SYNC,8,8,64015706.333333336,7377,23884
SYNC,8,16,33681234.0,7385,23888
SYNC,8,32,18880208.333333332,7401,23888
SYNC,8,64,11505127.0,7433,23888
SYNC,8,128,7781982.333333333,7561,23888
SYNC,8,256,5940755.333333333,7817,23888
ASYNC,1,1,9422749837.333334,7962,24108
ASYNC,1,2,4728759765.333333,7963,24116
ASYNC,1,4,2380554199.3333335,7965,24124
ASYNC,1,8,1225118001.6666667,7969,24128
ASYNC,1,16,618764241.6666666,7977,24132
ASYNC,1,32,326253255.3333333,7993,24132
ASYNC,1,64,179473876.66666666,8025,24132
ASYNC,1,128,106170654.33333333,8217,24132
ASYNC,1,256,69386800.33333333,8601,24136
ASYNC,2,1,8347330729.0,8650,24288
ASYNC,2,2,4186747233.3333335,8651,24296
ASYNC,2,4,2092895507.3333333,8653,24304
ASYNC,2,8,1049245198.6666666,8657,24316
ASYNC,2,16,541544596.6666666,8665,24312
ASYNC,2,32,281127929.6666667,8681,24312
ASYNC,2,64,150746663.66666666,8713,24312
ASYNC,2,128,85662842.0,8969,24312
ASYNC,2,256,48909505.0,9481,24320
ASYNC,4,1,7854085286.666667,10026,24652
ASYNC,4,2,3935852050.3333335,10027,24660
ASYNC,4,4,1972869873.0,10029,24668
ASYNC,4,8,979451497.6666666,10033,24672
ASYNC,4,16,499348958.0,10041,24676
ASYNC,4,32,253712972.0,10057,24676
ASYNC,4,64,131022135.33333333,10089,24676
ASYNC,4,128,69610595.66666667,10473,24676
ASYNC,4,256,38706461.666666664,11241,24692
ASYNC,8,1,7590311686.666667,12778,25220
ASYNC,8,2,3800333658.6666665,12779,25228
ASYNC,8,4,1900014241.6666667,12781,25236
ASYNC,8,8,940419515.0,12785,25240
ASYNC,8,16,478739420.6666667,12793,25244
ASYNC,8,32,241465250.66666666,12809,25244
ASYNC,8,64,122701009.0,12841,25244
ASYNC,8,128,63405355.0,13481,25244
ASYNC,8,256,33752441.666666664,14761,25244