samples: zbus: add isolated pool to msg_sub sample

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 <rodrigopex@gmail.com>
This commit is contained in:
Rodrigo Peixoto 2024-06-06 18:18:07 -03:00 committed by Anas Nashif
parent 3b10caf96e
commit 6ec617340f
5 changed files with 248 additions and 4 deletions

View file

@ -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"

View file

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

View file

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

View file

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

View file

@ -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)
@ -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;