DDS Qos Optimization helps set up FastDDS publishers and subscribers on multiple hosts.
-
FastDDS installed on all hosts (Physical Machines, VMs, Containers).
Install in the same directory on all hosts.
You can refer to Linux installation from binaries
- Set up host(Physical Machines, VMs, Containers) configurations
$ cd DDS-QoS-Optimization/source
$ cp inventory.yaml.Example inventory.yaml
- Fill in hosts IP, port, username, and path to ssh private key.
- Set up experiment case configurations
$ cd DDS-QoS-Optimization/source/config
$ mkdir case-[number]
$ cp configs.yaml.Example case-[number]/configs.yaml
- Edit configs.yaml (Details explained in Experiment Case Configuration)
- Run the experiment case
$ cd DDS-QoS-Optimization/source/script
$ bash run.sh [number] [number-of-trials] [sleep-time]
- Get number of messages sent/received and loss rate
$ cd DDS-QoS-Optimization/source/script
$ python3 statistics.py -t [number-of-trials] -c [number]
By executing playbook.yml
, you got several stages:
- Set up the experiment
- Set up publishers and subscribers on each hosts
- By
create.sh
generated by template in stage 1, here we specify name, topic, #messages, sending rate to create pubs and subs. - But as for now, all publishers aren't sending anything yet.
- By
- Make all publishers start sending messages
- Set
.flag
on all hosts to 1, so that all publishers start sending.
- Set
- Collect publisher/subscriber logs from hosts to controlNode
- Case number
- Publisher and Subscriber settings
repoUrl
: Git remote URL of DDS-QoS-OptimizationfastddsPath
: Absolute path to directory where FastDDS installedrepoPath
: Absolute path to where you want DDS-QoS-Optimization cloned on hosts byplaybook.yml
case_num
: Experiment Case numbertransport
: Currently not working, default transport in FastDDS is used.controlNodeBasePath
- controlNode: where you execute
playbook.yml
- Absolute path to DDS-QoS-Optimization on controlNode.
- controlNode: where you execute
wait_for_timeout
: Wait for publishers sent all messages in this Experiment CasetopicPrefix
: Set up a prefix for each topichost[number]
:[number]
depends on how many hosts you got- in each
host[number]
, you can append an entity (publisher or subscriber) - publisher
- in format:
p[number]:t[number]:[number-of-messages]:[sending-rate]
- e.g.,
p1:t1:10000:1000
- in format:
- subscirber
- in format:
s[number]:t[number]:[number-of-messages]
- e.g.,
s1:t1:10000
- in format:
- Make sure the number of messages received by subscriber matches that from publisher to the same topic.