Zero-copy doesn't work for component_container_mt
Hi team,
I found zero-copy doesn't work for component_container_mt.
Did I wrongly configure something? Or this is the design?
Please kindly advise. Many thanks
Here's my test result, with same topic pub and sub code, both using unique_ptr.
Test case 1: =====================================================================
Scenario:Single thread with "component_container"
Launch file:
container1 = ComposableNodeContainer(
node_name='my_container1',
node_namespace='',
package='rclcpp_components',
node_executable='component_container',
composable_node_descriptions=[
ComposableNode(
package='ros_lab',
node_plugin='ros_lab::TalkerComp',
node_name='Pub',
extra_arguments=[{'use_intra_process_comms': True}],
),
ComposableNode(
package='ros_lab',
node_plugin='ros_lab::ListenerComp',
node_name='Sub',
extra_arguments=[{'use_intra_process_comms': True}],
)
],
output='screen',
)
Result: Same msg data address. Zero-copy works.
[component_container-1] [INFO] [Pub]: Message: Hello World: 46; Address: 0x55E180AF1A20; Thread: 140681686245184; Process: 14806;
[component_container-1] [INFO] [Sub]: Message: Hello World: 46; Address: 0x55E180AF1A20; Thread: 140681686245184; Process: 14806;
[component_container-1] [INFO] [Pub]: Message: Hello World: 47; Address: 0x55E180AF1A20; Thread: 140681686245184; Process: 14806;
[component_container-1] [INFO] [Sub]: Message: Hello World: 47; Address: 0x55E180AF1A20; Thread: 140681686245184; Process: 14806;
Test case 2: =====================================================================
Scenarios:Multi-thread with "component_container_mt"
Launch file:
container1 = ComposableNodeContainer(
node_name='my_container1',
node_namespace='',
package='rclcpp_components',
node_executable='component_container_mt', # change
composable_node_descriptions=[
ComposableNode(
package='ros_lab',
node_plugin='ros_lab::TalkerComp',
node_name='Pub',
extra_arguments=[{'use_intra_process_comms': True}],
),
ComposableNode(
package='ros_lab',
node_plugin='ros_lab::ListenerComp',
node_name='Sub',
extra_arguments=[{'use_intra_process_comms': True}],
)
],
output='screen',
)
Result: Message data address changed, zero-copy doesn't happen.
[component_container_mt-1] [INFO] [Pub]: Message: Hello World: 33; Address: 0x7FD9F4000B60; Thread: 140575244265216; Process: 9239;
[component_container_mt-1] [INFO] [Sub]: Message: Hello World: 33; Address: 0x7FDA280034F0; Thread: 140575286228736; Process: 9239;
[component_container_mt-1] [INFO] [Pub]: Message: Hello World: 34; Address: 0x564798CF0E50; Thread: 140575759769408; Process: 9239;
[component_container_mt-1] [INFO] [Sub]: Message: Hello World: 34; Address: 0x7FD9EC0013E0; Thread: 140575510357760; Process: 9239;