Zero-copy doesn't work for component_container_mt

asked 2021-01-15 01:31:56 -0500

xingjl6280 gravatar image

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;
edit retag flag offensive close merge delete