Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/shadow/shadow
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.
https://github.com/shadow/shadow
control emulation experimentation networking realism scalability science-research scientific-computing simulation tor
Last synced: 3 days ago
JSON representation
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.
- Host: GitHub
- URL: https://github.com/shadow/shadow
- Owner: shadow
- License: other
- Created: 2011-05-17T08:18:57.000Z (over 13 years ago)
- Default Branch: main
- Last Pushed: 2025-01-08T23:26:32.000Z (10 days ago)
- Last Synced: 2025-01-09T07:04:17.364Z (10 days ago)
- Topics: control, emulation, experimentation, networking, realism, scalability, science-research, scientific-computing, simulation, tor
- Language: Rust
- Homepage: https://shadow.github.io
- Size: 31 MB
- Stars: 1,475
- Watchers: 51
- Forks: 243
- Open Issues: 173
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: docs/contributing.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: docs/security.md
- Support: docs/supported_platforms.md
Awesome Lists containing this project
- awesome-repositories - shadow/shadow - 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 s (Rust)
README
# The Shadow Simulator
## Quickstart
After installing the [dependencies](https://shadow.github.io/docs/guide/install_dependencies.html): build, test, and install Shadow into `~/.local`:
```
$ ./setup build --clean --test
$ ./setup test
$ ./setup install
```Read the [usage guide](https://shadow.github.io/docs/guide) or get started with some [example simulations](https://shadow.github.io/docs/guide/getting_started_basic.html).
## What is Shadow?
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.Shadow experiments can be scientifically **controlled** and deterministically
**replicated**, making it easier for you to reproduce bugs and eliminate
confounding factors in your experiments.## How Does Shadow Work?
Shadow directly executes **real applications**:
- Shadow directly executes unmodified, real application code using native OS
(Linux) processes.
- Shadow co-opts the native processes into a discrete-event simulation by
interposing at the system call API.
- The necessary system calls are emulated such that the applications need not
be aware that they are running in a Shadow simulation.Shadow connects the applications in a **simulated network**:
- Shadow constructs a private, virtual network through which the managed
processes can communicate.
- Shadow internally implements simulated versions of common network protocols
(e.g., TCP and UDP).
- Shadow internally models network routing characteristics (e.g., path latency
and packet loss) using a configurable network graph.## Why is Shadow Needed?
Network emulators (e.g., [mininet](http://mininet.org)) run real application
code on top of real OS kernels in real time, but are non-determinsitic and have
limited scalability: time distortion can occur if emulated processes exceed an
unknown computational threshold, leading to undefined behavior.Network simulators (e.g., [ns-3](https://www.nsnam.org)) offer more experimental
control and scalability, but have limited application-layer realism because they
run application abstractions in place of real application code.Shadow offers a novel, hybrid emulation/simulation architecture: it directly
executes real applications as native OS processes in order to faithfully
reproduce application-layer behavior while also co-opting the processes into a
high-performance network simulation that can scale to large distributed systems
with hundreds of thousands of processes.## Caveats
Shadow implements **over 150 functions from the system call API**, but does not
yet fully support all API features. Although applications that make _basic_ use
of the supported system calls should work out of the box, those that use more
_complex_ features or functions may not yet function correctly when running in
Shadow. Extending support for the API is a work-in-progress.That being said, we are particularly motivated to run large-scale [Tor
Network](https://www.torproject.org) simulations. This use-case is already
fairly well-supported and we are eager to continue extending support for it.## More Information
Homepage:
-Documentation:
- [User documentation](https://shadow.github.io/docs/guide)
- [Developer documentation](https://shadow.github.io/docs/rust)Community Support:
-Bug Reports:
-