This repository contains the example application we use to evaluate Celestial. Check out the main repository to learn more about Celestial!
There are three clients, a tracker, and a number of satellite (or cloud) servers.
The clients are based on Matthew Rahtz' ultra_ping utility, which we heavily modified for our use case.
It sends UDP packets based on the included workload.csv
WebRTC traces.
The tracker selects an optimal satellite server and instructs clients to send their data to that server.
The server forwards UDP packets to the three clients and duplicates incoming packets.
This is based on NFTables
.
We include several Jupyter notebooks in this repository to help you analyze and graph your results.
To try out the videoconferencing evaluation, you need:
- a Celestial testbed including a Coordinator with database features enabled
- the Celestial
rootfsbuilder
Docker image built - Docker
- go version >=1.16 installed and on your
PATH
make
- the ability to configure and build Linux kernels (see the Celestial's documentation for more information on this)
First, build the root filesystems for the three components.
Simply use make
to build everything.
You will end up with tracker.img
, alt-tracker.img
, server.img
, and
client.img
in this folder.
Use the client/client-kernel.config
and server/server-kernel.config
to
build client-linux.bin
and server-linux.bin
Linux kernels.
Note that using off-the-shelf kernels will not work in most situations since
the server needs support for NFTables
duplication and clients need to trust
the host's randomness pool.
However, you can use the default Celestial kernel
for clients.
Make sure that your Celestial hosts have all root filesystems and kernels in their
/celestial
directory.
Depending on your setup, you may need to adapt the included Celestial configuration
files.
There is videoconference-cloud.toml
for the cloud-based application and
videoconference-satellite.toml
for the satellite server based application.
Make sure that all host addresses and your Coordinator's address for the database
are set correctly.