The latest development version of this page may be more current than this released 4.0.0 version.

Benchmarking

Browse source code on GitHub

This sample implements an application to measure the time for sending 256KB from the producer to the consumers.

Building and Running

# From the root of the zephyr repository
west build -b qemu_cortex_m3 samples/subsys/zbus/dyn_channel -- -DCONFIG_BM_MESSAGE_SIZE=512 -DCONFIG_BM_ONE_TO=1 -DCONFIG_BM_LISTENERS=y
west build -t 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:

*** 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 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:

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:

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

See also

Zbus APIs