Skip to content

foebaz/cyclonedds

 
 

Repository files navigation

Eclipse Cyclone DDS

Eclipse Cyclone DDS is by far the most performant and robust DDS implementation available on the market.

Beside, Cyclone DDS is developed completely in the open and is undergoing the acceptance process to become part of Eclipse IoT (see eclipse-cyclone-dds).

Getting Started

Building Cyclone DDS

In order to build cyclone DDS you need to have installed on your host cmake v3.6.0 or higher, the Java 8 JDK or simply the Java 8 RE, and Apache Maven 3.5.x or higher.

Assuming that git is also available on your machine then, simply do:

$ git clone https://github.com/eclipse/cyclonedds.git 
$ cd cyclonedds
$ mkdir build
$ cd build
$ cmake ../src
$ make
$ make install

At this point you are ready to use cyclonedds for your next DDS project!

Performance

Median small message throughput measured using the Throughput example between two Intel(R) Xeon(R) CPU E3-1270 V2 @ 3.50GHz (that's 2012 hardware ...) running Linux 3.8.13-rt14.20.el6rt.x86_64, connected via a quiet GbE and when using gcc-6.2.0 for a RelWithDebInfo build is:

Throughput

This is with the subscriber in polling mode. Listener mode is marginally slower; using a waitset the message rate for minimal size messages drops to 600k sample/s in synchronous delivery mode and about 750k samples/s in asynchronous delivery mode. The configuration is an out-of-the-box configuration, tweaked only to increase the high-water mark for the reliability window on the writer side. For details, see the scripts in the performance directory and the data.

There is some data on roundtrip latency below.

Examples

Now that you have built and installed cyclonecdds it is time to experiment with some examples.

Building and Running the Roundtrip Example

The first example we will show you how to build and run, measures cyclonedds latency and will allow you to see with your eyes how fast it is!

Do as follows:

$ cd cyclonedds/src/examples/roundtrip
$ mkdir build
$ cd build
$ cmake ..
$ make

Now that you've build the roundtrip example it is time to run it.

On one terminal start the applications that will be responding to cyclonedds pings. $ ./RoundtripPong

On another terminal, start the application that will be sending the ping.

$ ./RoundtripPing 0 0 0 
# payloadSize: 0 | numSamples: 0 | timeOut: 0
# Waiting for startup jitter to stabilise
# Warm up complete.
# Round trip measurements (in us)
#             Round trip time [us]                           Write-access time [us]       Read-access time [us]
# Seconds     Count   median      min      99%      max      Count   median      min      Count   median      min
    1     28065       17       16       23       87      28065        8        6      28065        1        0
    2     28115       17       16       23       46      28115        8        6      28115        1        0
    3     28381       17       16       22       46      28381        8        6      28381        1        0
    4     27928       17       16       24      127      27928        8        6      27928        1        0
    5     28427       17       16       20       47      28427        8        6      28427        1        0
    6     27685       17       16       26       51      27685        8        6      27685        1        0
    7     28391       17       16       23       47      28391        8        6      28391        1        0
    8     27938       17       16       24       63      27938        8        6      27938        1        0
    9     28242       17       16       24      132      28242        8        6      28242        1        0
   10     28075       17       16       23       46      28075        8        6      28075        1        0

The number above were measure on Mac running a 4,2 GHz Intel Core i7 on December 12th 2018. From these number you can see how the roundtrip is incredibly stable and the minimal latency is now down to 17 micro-seconds (used to be 25 micro-seconds) on this HW.

Documentation

The Cyclone DDS documentation is available here.

About

Cyclonedds IoT project

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 84.7%
  • Java 10.7%
  • CMake 2.4%
  • GAP 0.6%
  • C++ 0.6%
  • ANTLR 0.4%
  • Other 0.6%