/swan

Project Swan - a distributed experimentation framework

Primary LanguageJupyter NotebookApache License 2.0Apache-2.0

Project Swan

Swan diagram

Build Status Go Report Card

Overview

Swan is a distributed experimentation framework for automated experiments targeting performance isolation studies for schedulers. You can read more about the vision behind Swan here.

Swan uses Snap to collect, process and tag metrics and stores all experiment data in Cassandra. From here, we provide a Jupyter environment to explore and visualize experiment data.

Swan architecture

Quick Start

Swan's Sensitivity Profile Experiment can be quickly run using Vagrant.

Swan requires VirtualBox & Vagrant. It is recommended to have vagrant-vbguest plugin installed ($ vagrant plugin install vagrant-vbguest).

Run the Sensitivity Profile Experiment using Vagrant

Run Vagrant image supplied by Swan:

git clone https://github.com/intelsdi-x/swan
cd swan/vagrant
vagrant plugin install vagrant-vbguest
vagrant up
vagrant ssh

Inside guest OS, the Mutilate load generator needs to be build. To do so, please clone the https://github.com/leverich/mutilate repository and build it by using scons. After successful build, please copy mutilate binary to /bin.

git clone https://github.com/leverich/mutilate
cd mutilate
scons
sudo ln -sf `pwd`/mutilate /usr/bin/

To run experiment, invoke:

sudo -E memcached-sensitivity-profile -experiment_be_workloads=caffe -experiment_load_duration=5s -experiment_peak_load=10000 -experiment_repetitions=1 > uuid.txt

When experiment is running, please see how to explore experiment data to see results. Note that Experiment UUID that is necessary for obtaining experiment results will be available in uuid.txt file.

While the experiment can be run on developer setup from within a virtual machine or on a laptop, this particular experiment is targeted for distributed cluster environment. For more details, please see Memcached Sensitivity Profile Documentation.

Memcached Sensitivity Profile Experiment

The experiment allows experimenters to generate a so-called sensitivity profile, which describes the violation of Quality of Service under certain conditions, such as CPU cache or network bandwidth interference. An example of the sensitivity profile can be seen below.

Sensitivity profile

During the experiment memcached is colocated with several types of aggressors, which are low priority (best effort) jobs. Memcached response time is critical and needs to stay below a given value which is called Service Level Objective (SLO). SLO is memcached Quality of Service that needs to be maintained. The goal of the experiment is to learn which aggressors interferes the least and which the most with Memcached so that some of them can be safely colocated with it without violating memcached Quality of Service. Colocation of tasks increases machine utilization which in datacenter can be low as 12% decreasing TCO of the datacenter.

Memcached sensitivity experiment is described in detail in memcached sensitivity profile document.

Next Steps

  1. Read Swan Vision to understand what is Swan and what is not.
  2. Read about Workload Interference Theory and see why Noisy Neighbour situations appears in cloud environment.
  3. Try other experiments:
    1. Memcached Sensitivity Profile
    2. Memcached Optimal Core Allocation
    3. Memcached & Cache Allocation Technology
  4. Read Architecture Guide and Development Guide and start to build your own experiments!
  5. Read Known Issues to learn about problems that you may encounter while using Swan.

Contributing

You can learn how to contribute to the project by checking out the contributing document. Best practices for Swan development and submitting code is documented here.