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