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 and installation

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

You can get a list of all releases here.

Alternatively you can get the latest development version by cloning the icarus-sim/icarus Git repository.

To install Icarus you need Python installed on your machine with version 2.7.9+ or 3.4+. After downloading or cloning the repository, run from the main directory of Icarus:

$ make install

This downloads and installs all required dependencies and installs Icarus in editable mode. This means that you can make changes directly on the source code to have effect on your installation.

Usage

You can use Icarus in three different ways:

You can a set of simulations by executing:

$ icarus run --results <RESULTS_FILE> <CONF_FILE>

where:

To learn how to set up the configuration file, you may want to look at config.py and possibly modify it according to your requirements. Alternatively, you can look at the examples folder which contains examples of configuration files for various use cases.

Once simulations complete you can print the content of your results file into a human readable format, running:

$ icarus results print <RESULTS_PICKLE_FILE> > <OUTPUT_TEXT_FILE>

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

By executing the steps illustrated above it is possible to run simulations using the topologies, cache 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.

Finally, 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.

Docker container

This repository contains a Dockerfile that can be used to build a container running Icarus. You need Docker installed on your machine to do so.

You can build a container image with Icarus running:

docker build [--build-arg py=<python-version>] -t icarus .

where python-version is the version of Python you want to use, e.g. 3.6.

You can now spin a container giving you shell access, which you could use to poke around the container and explore the code by running:

docket run --rm -it icarus

Finally you can run any Icarus command with:

docker run icarus <COMMAND>

To run a simulation with Icarus it is advisable to mount in the container the directories where the config file is located and where you intend to store results and access them from the container.

For example, to use config.py and store the result file in the root of the project you could run the container with the following command:

docker run -v `pwd`:/data icarus icarus run -r /data/results.pickle /data/config.py

Development

Running make install creates a fully functional development environment. You can run all test cases with:

$ make test

and build HTML documentation with:

$ make doc

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 results

Hash-routing [ACM ICN’13]

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).