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.
For research purposes only. DO NOT USE IT!
For research purposes only. DO NOT USE IT!
This release contains the following improvements:
This release focuses on numerous additional fixes to Shadow's TCP stack, including:
This code has been used to run several ShadowTor experiments and has been found to produce more accurate results than previous versions of Shadow.
This release mostly focuses on fixes.
It includes improvements to:
This is a pre-release and as such, bugs may be present in the code.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.