Skip to content

Commit

Permalink
samples: zbus: add isolated pool to msg_sub sample
Browse files Browse the repository at this point in the history
Add isolated pool (static and dynamic) to the sample illustrating how to
use that and performing some testing in different scenarios.

Signed-off-by: Rodrigo Peixoto <[email protected]>
  • Loading branch information
rodrigopex authored and nashif committed Jun 18, 2024
1 parent 3b10caf commit 6ec6173
Show file tree
Hide file tree
Showing 5 changed files with 248 additions and 4 deletions.
5 changes: 5 additions & 0 deletions samples/subsys/zbus/msg_subscriber/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,9 @@ config ZBUS_MSG_SUBSCRIBER_SAMPLE
select SYS_HEAP_LISTENER
select SYS_HEAP_RUNTIME_STATS

config ZBUS_MSG_SUBSCRIBER_SAMPLE_ISOLATED_BUF_POOL_SIZE
int "Set size of the isolated pool"
default 32
depends on ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION

source "Kconfig.zephyr"
5 changes: 3 additions & 2 deletions samples/subsys/zbus/msg_subscriber/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@

Overview
********
This sample illustrates how to use a message subscriber in different
ways in conjunction with other types of observers.
This sample illustrates how to use a message subscriber in different ways with other types of
observers. It is possible to explore the pool isolation feature by setting the pool size and if it
is static or dynamic by setting the proper :kconfig:option:`CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC`.

Building and Running
********************
Expand Down
2 changes: 1 addition & 1 deletion samples/subsys/zbus/msg_subscriber/prj.conf
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ CONFIG_LOG=y
CONFIG_LOG_MODE_MINIMAL=y
CONFIG_ASSERT=y
CONFIG_BOOT_BANNER=n
CONFIG_MAIN_THREAD_PRIORITY=5
CONFIG_MAIN_THREAD_PRIORITY=3
CONFIG_ZBUS=y
CONFIG_ZBUS_LOG_LEVEL_INF=y
CONFIG_ZBUS_CHANNEL_NAME=y
Expand Down
222 changes: 222 additions & 0 deletions samples/subsys/zbus/msg_subscriber/sample.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -181,3 +181,225 @@ tests:
tags: zbus
integration_platforms:
- qemu_x86

sample.zbus.msg_subscriber_dynamic_isolated:
harness: console
extra_configs:
- CONFIG_ZBUS_LOG_LEVEL_DBG=y
- CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION=y
harness_config:
type: multi_line
ordered: false
regex:
- "^.*?I: ----> Publishing to acc_data_chan channel"
- "^.*?I: AL Memory allocated \\d{1,3} bytes. Total allocated \\d{1,3} bytes$"
- "^.*?I: FR Memory freed \\d{1,3} bytes. Total allocated 0 bytes$"
- "^.*?D: 0 -> bar_sub1"
- "^.*?D: 1 -> bar_msg_sub1"
- "^.*?D: 2 -> bar_msg_sub2"
- "^.*?D: 3 -> bar_msg_sub3"
- "^.*?D: 4 -> bar_msg_sub4"
- "^.*?D: 5 -> bar_msg_sub5"
- "^.*?D: 6 -> bar_msg_sub6"
- "^.*?D: 7 -> bar_msg_sub7"
- "^.*?D: 8 -> bar_msg_sub8"
- "^.*?D: 9 -> bar_msg_sub9"
- "^.*?D: 10 -> foo_lis"
- "^.*?D: 11 -> bar_msg_sub10"
- "^.*?D: 12 -> bar_msg_sub11"
- "^.*?D: 13 -> bar_msg_sub12"
- "^.*?D: 14 -> bar_msg_sub13"
- "^.*?D: 15 -> bar_msg_sub14"
- "^.*?D: 16 -> bar_msg_sub15"
- "^.*?D: 17 -> bar_msg_sub16"
- "^.*?D: 18 -> bar_sub2"
- "^.*?I: From listener foo_lis -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub1 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub2 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub3 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub4 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub5 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub6 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub7 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub8 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub9 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub10 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub11 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub12 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub13 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub14 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub15 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub16 -> Acc x=1, y=10, z=100"
- "^.*?I: From subscriber bar_sub1 -> Acc x=1, y=10, z=100"
- "^.*?I: From subscriber bar_sub2 -> Acc x=1, y=10, z=100"
- "^.*?I: From listener foo_lis -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub1 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub2 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub3 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub4 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub5 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub6 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub7 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub8 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub9 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub10 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub11 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub12 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub13 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub14 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub15 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub16 -> Acc x=2, y=20, z=200"
- "^.*?I: From subscriber bar_sub1 -> Acc x=2, y=20, z=200"
- "^.*?I: From subscriber bar_sub2 -> Acc x=2, y=20, z=200"
- "^.*?I: From listener foo_lis -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub1 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub2 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub3 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub4 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub5 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub6 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub7 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub8 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub9 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub10 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub11 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub12 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub13 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub14 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub15 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub16 -> Acc x=3, y=30, z=300"
- "^.*?I: From subscriber bar_sub1 -> Acc x=3, y=30, z=300"
- "^.*?I: From subscriber bar_sub2 -> Acc x=3, y=30, z=300"
tags: zbus
integration_platforms:
- qemu_x86
sample.zbus.msg_subscriber_dynamic_isolated_too_small:
harness: console
extra_configs:
- CONFIG_ZBUS_LOG_LEVEL_DBG=y
- CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION=y
- CONFIG_ZBUS_MSG_SUBSCRIBER_SAMPLE_ISOLATED_BUF_POOL_SIZE=2
harness_config:
type: multi_line
ordered: false
regex:
- "^.*?I: ----> Publishing to acc_data_chan channel"
- "^.*?I: AL Memory allocated \\d{1,3} bytes. Total allocated \\d{1,3} bytes$"
- "^.*?I: FR Memory freed \\d{1,3} bytes. Total allocated 0 bytes$"
- "^.*?D: 0 -> bar_sub1"
- "^.*?D: 1 -> bar_msg_sub1"
- "^.*?E: could not deliver notification to observer bar_msg_sub2. Error code -12"
tags: zbus
integration_platforms:
- qemu_x86
sample.zbus.msg_subscriber_static_isolated:
harness: console
extra_configs:
- CONFIG_ZBUS_LOG_LEVEL_DBG=y
- CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_STATIC=y
- CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_STATIC_DATA_SIZE=16
- CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION=y
- CONFIG_ZBUS_MSG_SUBSCRIBER_SAMPLE_ISOLATED_BUF_POOL_SIZE=32
harness_config:
type: multi_line
ordered: false
regex:
- "^.*?I: ----> Publishing to acc_data_chan channel"
- "^.*?D: 0 -> bar_sub1"
- "^.*?D: 1 -> bar_msg_sub1"
- "^.*?D: 2 -> bar_msg_sub2"
- "^.*?D: 3 -> bar_msg_sub3"
- "^.*?D: 4 -> bar_msg_sub4"
- "^.*?D: 5 -> bar_msg_sub5"
- "^.*?D: 6 -> bar_msg_sub6"
- "^.*?D: 7 -> bar_msg_sub7"
- "^.*?D: 8 -> bar_msg_sub8"
- "^.*?D: 9 -> bar_msg_sub9"
- "^.*?D: 10 -> foo_lis"
- "^.*?D: 11 -> bar_msg_sub10"
- "^.*?D: 12 -> bar_msg_sub11"
- "^.*?D: 13 -> bar_msg_sub12"
- "^.*?D: 14 -> bar_msg_sub13"
- "^.*?D: 15 -> bar_msg_sub14"
- "^.*?D: 16 -> bar_msg_sub15"
- "^.*?D: 17 -> bar_msg_sub16"
- "^.*?D: 18 -> bar_sub2"
- "^.*?I: From listener foo_lis -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub1 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub2 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub3 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub4 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub5 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub6 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub7 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub8 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub9 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub10 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub11 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub12 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub13 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub14 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub15 -> Acc x=1, y=10, z=100"
- "^.*?I: From msg subscriber bar_msg_sub16 -> Acc x=1, y=10, z=100"
- "^.*?I: From subscriber bar_sub1 -> Acc x=1, y=10, z=100"
- "^.*?I: From subscriber bar_sub2 -> Acc x=1, y=10, z=100"
- "^.*?I: From listener foo_lis -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub1 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub2 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub3 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub4 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub5 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub6 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub7 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub8 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub9 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub10 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub11 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub12 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub13 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub14 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub15 -> Acc x=2, y=20, z=200"
- "^.*?I: From msg subscriber bar_msg_sub16 -> Acc x=2, y=20, z=200"
- "^.*?I: From subscriber bar_sub1 -> Acc x=2, y=20, z=200"
- "^.*?I: From subscriber bar_sub2 -> Acc x=2, y=20, z=200"
- "^.*?I: From listener foo_lis -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub1 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub2 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub3 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub4 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub5 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub6 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub7 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub8 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub9 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub10 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub11 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub12 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub13 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub14 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub15 -> Acc x=3, y=30, z=300"
- "^.*?I: From msg subscriber bar_msg_sub16 -> Acc x=3, y=30, z=300"
- "^.*?I: From subscriber bar_sub1 -> Acc x=3, y=30, z=300"
- "^.*?I: From subscriber bar_sub2 -> Acc x=3, y=30, z=300"
tags: zbus
integration_platforms:
- qemu_x86
sample.zbus.msg_subscriber_static_isolated_too_small:
harness: console
extra_configs:
- CONFIG_ZBUS_LOG_LEVEL_DBG=y
- CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_STATIC=y
- CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_STATIC_DATA_SIZE=16
- CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION=y
- CONFIG_ZBUS_MSG_SUBSCRIBER_SAMPLE_ISOLATED_BUF_POOL_SIZE=2
harness_config:
type: multi_line
ordered: false
regex:
- "^.*?I: ----> Publishing to acc_data_chan channel"
- "^.*?D: 0 -> bar_sub1"
- "^.*?D: 1 -> bar_msg_sub1"
- "^.*?E: could not deliver notification to observer bar_msg_sub2. Error code -12"
tags: zbus
integration_platforms:
- qemu_x86
18 changes: 17 additions & 1 deletion samples/subsys/zbus/msg_subscriber/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,10 +169,26 @@ ZBUS_CHAN_ADD_OBS(acc_data_chan, bar_msg_sub16, 3);

static struct acc_msg acc = {.x = 1, .y = 10, .z = 100};

#if defined(CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION)
#include <zephyr/net/buf.h>

#if defined(CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_DYNAMIC)
NET_BUF_POOL_HEAP_DEFINE(isolated_pool, (CONFIG_ZBUS_MSG_SUBSCRIBER_SAMPLE_ISOLATED_BUF_POOL_SIZE),
(sizeof(struct zbus_channel *)), NULL);
#else
NET_BUF_POOL_FIXED_DEFINE(isolated_pool, (CONFIG_ZBUS_MSG_SUBSCRIBER_SAMPLE_ISOLATED_BUF_POOL_SIZE),
(CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_STATIC_DATA_SIZE),
sizeof(struct zbus_channel *), NULL);
#endif
#endif

int main(void)
{

total_allocated = 0;
#if defined(CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION)
zbus_chan_set_msg_sub_pool(&acc_data_chan, &isolated_pool);
#endif

#if defined(CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_DYNAMIC)

Expand All @@ -183,7 +199,7 @@ int main(void)

while (1) {
LOG_INF("----> Publishing to %s channel", zbus_chan_name(&acc_data_chan));
zbus_chan_pub(&acc_data_chan, &acc, K_SECONDS(1));
zbus_chan_pub(&acc_data_chan, &acc, K_NO_WAIT);
acc.x += 1;
acc.y += 10;
acc.z += 100;
Expand Down

0 comments on commit 6ec6173

Please sign in to comment.