From 6ec617340f7058bbf3dcd612505b70a5157d449d Mon Sep 17 00:00:00 2001 From: Rodrigo Peixoto Date: Thu, 6 Jun 2024 18:18:07 -0300 Subject: [PATCH] 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 --- samples/subsys/zbus/msg_subscriber/Kconfig | 5 + samples/subsys/zbus/msg_subscriber/README.rst | 5 +- samples/subsys/zbus/msg_subscriber/prj.conf | 2 +- .../subsys/zbus/msg_subscriber/sample.yaml | 222 ++++++++++++++++++ samples/subsys/zbus/msg_subscriber/src/main.c | 18 +- 5 files changed, 248 insertions(+), 4 deletions(-) diff --git a/samples/subsys/zbus/msg_subscriber/Kconfig b/samples/subsys/zbus/msg_subscriber/Kconfig index 3d9e72ce843a4f..69bfd23b3a6589 100644 --- a/samples/subsys/zbus/msg_subscriber/Kconfig +++ b/samples/subsys/zbus/msg_subscriber/Kconfig @@ -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" diff --git a/samples/subsys/zbus/msg_subscriber/README.rst b/samples/subsys/zbus/msg_subscriber/README.rst index 79d52e006f0755..12268e63edf1c7 100644 --- a/samples/subsys/zbus/msg_subscriber/README.rst +++ b/samples/subsys/zbus/msg_subscriber/README.rst @@ -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 ******************** diff --git a/samples/subsys/zbus/msg_subscriber/prj.conf b/samples/subsys/zbus/msg_subscriber/prj.conf index 3e786a6d7ed731..f24e55664ed77f 100644 --- a/samples/subsys/zbus/msg_subscriber/prj.conf +++ b/samples/subsys/zbus/msg_subscriber/prj.conf @@ -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 diff --git a/samples/subsys/zbus/msg_subscriber/sample.yaml b/samples/subsys/zbus/msg_subscriber/sample.yaml index 716ffd9b829e41..1664f93931deda 100644 --- a/samples/subsys/zbus/msg_subscriber/sample.yaml +++ b/samples/subsys/zbus/msg_subscriber/sample.yaml @@ -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 diff --git a/samples/subsys/zbus/msg_subscriber/src/main.c b/samples/subsys/zbus/msg_subscriber/src/main.c index aa5bb42c4f1a36..3c384a7815a8dd 100644 --- a/samples/subsys/zbus/msg_subscriber/src/main.c +++ b/samples/subsys/zbus/msg_subscriber/src/main.c @@ -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 + +#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;