View on GitHub


Co-opting Linux Processes for High-Performance Network Simulation


This page describes an open-source software tool for the research paper described on the home page.

A primary contribution of our paper is the design and implementation of a novel simulation architecture and a practical network simulator tool. The simulator tool has been released as open-source software and has been merged into Shadow, an open-source network simulation project hosted on Github. Shadow uses our simulator design as of v2.0.0-pre.0 and later.

Because Shadow is actively developed at the time of this writing, it has continued to improve and mature after the conclusion of our research project and publication of our paper. Therefore, there are multiple versions to consider:


Our paper uses Shadow at tag v2.0.0-pre.4, which requires the pidfd_open syscall: this syscall was added in Linux kernel v5.3 (published on 2019-09-15). Please ensure that your docker host machine is running Linux v5.3 or later, e.g., using uname -a. (The lastest version of Shadow from the Shadow Github page does not use pidfd_open and does not have this requirement.)

To install Shadow v2.0.0-pre.4 using Docker, first install Docker and git, and then run these commands:

git clone

Once the above commands complete successfully, you should be able to get a shell in a container with:

docker run \
    --privileged \
    --tmpfs /dev/shm:rw,nosuid,nodev,exec,size=10g \
    -it netsim:simulator \

Once inside the container, you can check that the installation is working:

/phantom/bin/shadow --help
/phantom/bin/shadow /root/test.yaml > shadow.log

You should see an HTML directory listing similar to the following:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Directory listing for /</title>
<h1>Directory listing for /</h1>
<li><a href="server.python3.8.1000.shimlog">server.python3.8.1000.shimlog</a></li>
<li><a href="server.python3.8.1000.stderr">server.python3.8.1000.stderr</a></li>
<li><a href="server.python3.8.1000.stdout">server.python3.8.1000.stdout</a></li>

Type exit to leave the container.