View on GitHub

Icarus

Caching simulator for Information Centric Networking (ICN)

Icarus is a Python-based discrete-event simulator for evaluating the performance of networks of caches like Information Centric Networks (ICN).

Icarus is not bound to any specific ICN architecture. Its design allows users to implement and evaluate new caching policies or caching and routing strategy with few lines of code.

Download

You can download a stable release in a zip or tar.gz format using the links below.

Latest version:

Older versions:

You can also get the development branch from the Github repository using Git. Just open a shell, cd to the directory where you want to download the simulator and type:

$ git clone https://github.com/icarus-sim/icarus.git

Installation

Ubuntu 13.10+

If you use Ubuntu (version 13.10+) you can run the script ubuntusetup.sh located in the scripts folder which will take of installing all the dependencies. To run it, executes the following commands

$ cd <YOUR ICARUS FOLDER>
$ sh scripts/ubuntusetup.sh

The script, after being launched, will ask you for superuser password.

Finally, it is advisable to add Icarus path to the PYTHONPATH environment variable. This makes it possible to launch Icarus from outside the Icarus root directory or call Icarus APIs from other programs:

$ cd <YOUR ICARUS FOLDER>
$ export PYTHONPATH=`pwd`:$PYTHONPATH

Note however that setting the PYTHONPATH this way does not persist across reboots. To make it persist you should add the export instruction to a script that your machine executes at boot or login time, e.g. .bashrc (if you use Bash).

Other operating systems

If you have other operating systems, you can install all dependencies manually.

Icarus dependencies are:

All these packages can be installed using either easy_install or pip utilities.

If you use pip run:

$ pip install numpy scipy matplotlib networkx fnss

If you use easy_install run:

$ easy_install numpy scipy matplotlib networkx fnss

You may need to run pip or easy_install as superuser. The installation of these packages, especially numpy and scipy may also require to install additional libraries.

Virtual machine

You can also run Icarus within a virtual machine. This repository contains scripts and documentation to set up a virtual machine with Icarus and all its dependencies.

Usage

Run simulations

To use Icarus with the currently implemented topologies and models of caching policies and strategies you need to do the following.

First, create a configuration file with all the desired parameters of your simulation. You can modify the file config.py, which is a well documented example configuration. You can even use the configuration file as it is just to get started. Alternatively, have a look at the examples folder which contains examples of configuration files for various uses.

Second, run Icarus by running the script icarus.py using the following syntax

$ python icarus.py --results RESULTS_FILE CONF_FILE

where:

Example usage could be:

$ python icarus.py --results results.pickle config.py

After saved results in pickle format you can extract results in a human readable format using the printresults.py script from the scripts folder. Example usage could be:

$ python scripts/printresults.py results.pickle > results.txt

Icarus also provides a set of helper functions for plotting results. Have a look at the examples folder for plot examples.

By executing the steps illustrated above it is possible to run simulations using the topologies, cache eviction policies, strategies and result collectors readily available on Icarus. Icarus makes it easy to implement new models to use in simulations.

To implement new models, please refer to the description of the simulator provided in this paper:

L.Saino, I. Psaras and G. Pavlou, Icarus: a Caching Simulator for Information Centric Networking (ICN), in Proc. of SIMUTOOLS’14, Lisbon, Portugal, March 2014. [PDF], [Slides], [BibTex]

Otherwise, please browse the source code. It is very well documented and easy to understand.

Modeling tools

Icarus provides utilities for modeling the performance of caches and work with traffic traces. The code is included in the icarus.tools package. These tools are described in detail in this paper.

Documentation

If you desire further information about Icarus, you can find it in the following places:

Citing

If you use Icarus for your paper, please refer to the following publication:

@inproceedings{icarus-simutools14,
   author = {Saino, Lorenzo and Psaras, Ioannis and Pavlou, George},
   title = {Icarus: a Caching Simulator for Information Centric Networking (ICN)},
   booktitle = {Proceedings of the 7th International ICST Conference on Simulation Tools and Techniques},
   series = {SIMUTOOLS '14},
   year = {2014},
   location = {Lisbon, Portugal},
   numpages = {10},
   publisher = {ICST},
   address = {ICST, Brussels, Belgium, Belgium},
}

Reproduce hash-routing results

The Icarus simulator can be used to reproduce the results and plot the graphs presented in the paper:

L.Saino, I. Psaras and G. Pavlou, Hash-routing Schemes for Information Centric Networking, in Proc. of the 3rd ACM SIGCOMM workshop on Information Centric Networking (ICN’13), Hong Kong, China, August 2013. [PDF], [BibTex]

All the code, data and documentation required is made available in the icarus-sim/hashrouting-icn13-results repository.

Contacts

If you have any questions about Icarus, feel free to ask the mailing list icarus@ee.ucl.ac.uk. You can also register to the mailing list or browse the archives.

License

Icarus is licensed under the terms of the GNU GPLv2 license.

Acknowledgments

This work received funding from the UK EPSRC, under grant agreement no. EP/K019589/1 (COMIT project), the EU-Japan initiative, under EU FP7 grant agreement no. 608518 and NICT contract no. 167 (GreenICN project) and from the EU FP7 program, under grant agreements 318488 (Flamingo Network of Excellence project).