performance report - codavel€¦ · bolina https (curl) performance report [email protected] | on...
TRANSCRIPT
Performance Report
[email protected] | WWW.CODAVEL.COM
Packet Loss Ratio: 0%
Packet Loss Ratio: 0.1%
Packet Loss Ratio: 0.5%
BolinaHTTPS (cURL)
Performance Report
[email protected] | WWW.CODAVEL.COM
On the client side, a docker compose with a single Dockerfile is used to act as the client. The client docker loops
through all the test parameters (packet loss rate, latency and file size). Packet loss and latency are induced via a
call to the network emulator API to apply the new rules. For each trial, transfer time is measured from the call to
the client until the client returns (exit). On the server side, a docker compose orchestrates three dockers:
the content server, the network emulator and the bolina server.
All the traffic that is destined to the content server goes through the network emulator, where latency and packet
loss rules are applied. HTTP clients communicate via network emulator with the content server. Bolina clients
communicate via network emulator with the bolina server, which then communicates to the content server
(co-located in the same docker environment).
Client dockers and servers dockers are deployed in separate cloud server instances (Digital Ocean droplets -
with 2 CPUs, 4GB of RAM and a 25GB SSD disk). All client and server instances are deployed in the same region.
The latency between the instances in ~0.5ms and bandwidth around 2Gbps.
The Network Emulator used is a c++ library developed by Codavel that relies on Linux's netem* module and its
command line tool tc to apply the intended network rules. The Rules are applied by creating a Hierarchical
Token Bucket (HTB) root handle for the interface and by adding a htb class for the rate limiting and using netem
for the latency and packet loss. Given that netem by default only applies rules to outgoing traffic, and since that
when using the emulator on a docker we don’t have access to the Intermediate Functional Block (IFB) module,
the emulator container is composed by two network interfaces, one that handles the traffic from the outside and
other that handles the traffic to the other containers (bolina and content server).
* https://wiki.linuxfoundation.org/networking/netem
Setup