eclipse-cyclonedds / cyclonedds

Eclipse Cyclone DDS project
https://projects.eclipse.org/projects/iot.cyclonedds
Other
854 stars 352 forks source link

Does using Iceoryx integration still require fixed size data type? #1975

Open t0ny-peng opened 5 months ago

t0ny-peng commented 5 months ago

In the Limitation chapter of the doc(https://cyclonedds.io/docs/cyclonedds/latest/shared_memory/limitations.html), it is mentioned that "The data types to be exchanged need to have a fixed size".

However, the ThroughputPublisher IDL file does contain a unbounded sequence of octer(uint8_t) and it can be used with Iceoryx as the shared memory optimization.

May I ask if that limitation has been lifted? Thanks!🙏

Background: We have variable length data stored in a sequence<octet> buffer and would like to enable the Iceoryx optimization.

https://github.com/eclipse-cyclonedds/cyclonedds/blob/265d432101e0eab20220fc61b20d11d29676c3c8/examples/throughput/Throughput.idl#L7

t0ny-peng commented 5 months ago

From my test, CycloneDDS is compiled with Iceoryx (-DENABLE_ICEORYX=ON) and the XML config file enables Iceoryx (<PubSubMessageExchange name="iox" library="psmx_iox" config="LOG_LEVEL=DEBUG;"/>) , the throughput almost doubled than just using CycloneDDS along, which should indicate that Iceoryx is indeed being used.

The following is the output from iox-roudi

2024-04-11 14:45:09.232 [ Debug ]: Registered new application CycloneDDS-iox_psmx-5c0189fa3f81d5d8
2024-04-11 14:45:09.234 [ Debug ]: Created new ConditionVariable for application CycloneDDS-iox_psmx-5c0189fa3f81d5d8
2024-04-11 14:45:09.234 [ Debug ]: Created new SubscriberPort for application 'CycloneDDS-iox_psmx-5c0189fa3f81d5d8' with service description 'Service: ServiceDiscovery, Instance: RouDi_ID, Event: ServiceRegistry'
2024-04-11 14:45:09.235 [ Debug ]: Created new PublisherPort for application 'CycloneDDS-iox_psmx-5c0189fa3f81d5d8' with service description 'Service: CycloneDDS iox_psmx 3243198913, Instance: CycloneDDS-IOX-PSMX node_id discovery, Event: d8d5813ffa89015c0000000000000000'
2024-04-11 14:45:09.236 [ Debug ]: Registered new application CycloneDDS-iox_psmx-57aa1d5683be02d2
2024-04-11 14:45:09.238 [ Debug ]: capro::SUB/UNSUB, no matching publisher for subscriber from runtime 'CycloneDDS-iox_psmx-5c0189fa3f81d5d8' and with service description 'Service: CycloneDDS iox_psmx 3243198913, Instance: ThroughputModule::DataType, Event: Throughput example.Throughput'!
2024-04-11 14:45:09.238 [ Debug ]: Created new SubscriberPort for application 'CycloneDDS-iox_psmx-5c0189fa3f81d5d8' with service description 'Service: CycloneDDS iox_psmx 3243198913, Instance: ThroughputModule::DataType, Event: Throughput example.Throughput'
2024-04-11 14:45:09.238 [ Debug ]: Created new ConditionVariable for application CycloneDDS-iox_psmx-57aa1d5683be02d2
2024-04-11 14:45:09.238 [ Debug ]: Created new SubscriberPort for application 'CycloneDDS-iox_psmx-57aa1d5683be02d2' with service description 'Service: ServiceDiscovery, Instance: RouDi_ID, Event: ServiceRegistry'
2024-04-11 14:45:09.243 [ Debug ]: Created new PublisherPort for application 'CycloneDDS-iox_psmx-57aa1d5683be02d2' with service description 'Service: CycloneDDS iox_psmx 3243198913, Instance: ThroughputModule::DataType, Event: Throughput example.Throughput'
2024-04-11 14:45:09.331 [ Debug ]: Destroy subscriber port from runtime 'CycloneDDS-iox_psmx-5c0189fa3f81d5d8' and with service description 'Service: ServiceDiscovery, Instance: RouDi_ID, Event: ServiceRegistry'
2024-04-11 14:45:09.331 [ Debug ]: Destroy subscriber port from runtime 'CycloneDDS-iox_psmx-57aa1d5683be02d2' and with service description 'Service: ServiceDiscovery, Instance: RouDi_ID, Event: ServiceRegistry'
eboasson commented 5 months ago

Thank you for your attention to detail! Yes, that restriction has been lifted quite some time ago and now all data types are supported.

I'll leave the issue open for tracking the required documentation update.