zephyr/samples/subsys/zbus/benchmark
Anas Nashif 0064b6e8b6 tests: samples: cleanup test tags, add integration_platforms
Use integration platforms and sanitize tags.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2023-06-02 04:47:06 -04:00
..
src samples: zbus: fix variable sizes and simplify benchmark sample 2023-04-14 12:14:29 -05:00
benchmark_256KB.robot
CMakeLists.txt
Kconfig
prj.conf samples: zbus: fix variable sizes and simplify benchmark sample 2023-04-14 12:14:29 -05:00
README.rst samples: zbus: fix variable sizes and simplify benchmark sample 2023-04-14 12:14:29 -05:00
sample.yaml tests: samples: cleanup test tags, add integration_platforms 2023-06-02 04:47:06 -04:00

.. _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