Shadow Shadow Versions Save

Shadow is a discrete-event network simulator that directly executes real application code, enabling you to simulate distributed systems with thousands of network-connected processes in realistic and scalable private network experiments using your laptop, desktop, or server running Linux.

v2.0.0-pre.0

2 years ago

For research purposes only. DO NOT USE IT!

v2.0.0-pre

3 years ago

For research purposes only. DO NOT USE IT!

v1.14.0

4 years ago

This release contains the following improvements:

  • Refactoring and improvements to bandwidth rate limiting in the network interface
  • New router component for managing buffering at routers that are upstream from each host
  • New modular router queue management component
  • Implementation of a new default router queue management algorithm (CoDel)
  • Many improvements to the build process
  • Migrated documentation from wiki into main repo
  • Set up continuous integration testing

v1.13.2

4 years ago

This release focuses on numerous additional fixes to Shadow's TCP stack, including:

  • Tracking TCP connections by 5-tuple
  • Corrects default buffer sizes to allow for full link utilization on high bandwidth links
  • Packet retransmit timers are now started when packet is sent to network (rather than when buffered)
  • Control packets (e.g. ACKs with no payload) now have best priority
  • Delayed ACKs are now used to reduce overhead from control packets
  • TCP congestion control state machine has been refactored and corrected
  • Added explicit duplicate ACK flag and associated processing

This code has been used to run several ShadowTor experiments and has been found to produce more accurate results than previous versions of Shadow.

v1.13.1

4 years ago

This release mostly focuses on fixes.

It includes improvements to:

  • network and retransmission
  • deterministic simulation
  • performance improvements in epoll
  • support for shutdown()
  • support for file reading
  • bugfix on longest prefix matching
  • bootstrap mode

This is a pre-release and as such, bugs may be present in the code.

v1.13.0

5 years ago

This release adds support for new transfer types in the traffic generator. In particular, tgen now supports asymmetric bidirectional transfers and can be configured to generate traffic (transfers and packet streams) according to markov models (in graphml format).

This release also updates the topology code that is used to represent paths between nodes. The topology format changed slightly; the most significant change is that the 'asn' attribute is no longer valid. We also added additional topology validation checks and more helpful validation error message, and fixed some bugs in the shortest path computation and path cache code.

This is a pre-release and as such, bugs may be present in the new code.

v1.12.1

6 years ago

This release contains numerous bug fixes from the v1.12.0 release and is first stable release in the v1.12.x series. Please see the release notes from the v1.12.0 release for more information about the new features in this series.

v1.12.0

6 years ago

This is the first release in the v1.12.x series and may have bugs. Please use with caution and report bugs on GitHub if you find them.

This release contains a new loader, a new high-performance logging system, and new event scheduling and load balancing algorithms.

New loader

This release contains significant changes to the plug-in build and runtime systems. We introduce a new loader, called elf-loader, that will load plug-ins into their own namespace for each node in the simulation. As a result, applications that are run in Shadow are completely independent of one another, including library dependencies. This should allow for less lock contention: for example, thousands of nodes running Tor+libevent+openssl are no longer sharing libevent and openssl and so no longer need to lock accesses to the corresponding global variables.

Because we are now using our own custom loader and loading plug-ins in independent namespaces, we no longer need the custom LLVM pass to extract plug-in state and also no longer need to build Shadow with LLVM/Clang. The build time should be dramatically reduced as a result, and we will no longer have to worry about LLVM-related bugs.

High-performance Logging

A new logging facility was written to replace the GLib logger, which itself was using a global lock that harms Shadow performance when using multiple Shadow worker threads. The new logger is thread-aware and minimizes thread contention.

Scheduling framework

A new modular scheduling framework is introduced that allows for the implementation of a variety of scheduling policies. Several policies have been implemented in an attempt to reduce thread contention. One such policy introduces the ability of idle threads to dynamically process work from other busy threads, thanks to plug-in migration support from the new elf-loader.

Other changes

Several other improvements have been made; in particular, several new test cases have been implemented and bugs found using those tests have been fixed. Finally, the project layout has changed a bit to better incorporate the changing codebase.

Important notes

The way in which Shadow experiments are run is slightly changed in this release. All experiments can now be run by directly invoking the shadow command: the helper shims that previously set up some environment variables before running Shadow are no longer necessary. To make this possible, the shadow.config.xml format has been changed slightly to allow new attributes in the opening <shadow> tag. To convert an old config file to the new format, use the new script: https://github.com/shadow/shadow-plugin-tor/blob/v1.12.0/tools/convert_to_dlmopen.py

v1.11.3

6 years ago

This stable release in the v1.11.x series contains minor bugfixes to TCP and socket handling code, and fixes some corner case I/O processing issues in the traffic generator.

v1.11.2

7 years ago

Tagging new stable release v1.11.2

This release fixes additional bugs and some inconsistencies between Shadow and Linux behaviors. Some test cases were added to find the issues (new bind and write/read iov tests). This release has been heavily tested and should be stable.