What's happening in Shadow 2021-10 #1695
sporksmith
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
This is part of a series of periodic updates of development in Shadow. This work is sponsored by the NSF. Previous update: 2021-07.
We've merged 144 pull requests and closed 52 issues since our previous update.
Shadow 2.0 release status
In the last update we talked about the 2.0.0-pre release. Since then we've continued to make improvements. We only have a few blocking issues left before releasing 2.0. These are tracked at https://github.com/shadow/shadow/projects/3.
Features
Shadow now includes a library to override openssl's rng functions, improving simulation determinism. #1530. #1517.
Shadow now detects and respects initial CPU affinity, making it feasible to run multiple Shadow simulations at once with cpu-pinning enabled. #1576. #1575. #1577.
Shadow now has an (experimental) progress bar. #1634
The new
seccomp+LD_PRELOADmode of operation discussed in the previous update is now stable, and is the default instead ofptrace. This should be transparent to most users, other than faster simulations. This also means you can now useptrace-based tools (likegdbandstrace) on managed processes in the simulation, since Shadow no longerptrace-attaches to managed processes itself. #1649Interface changes
The assignment of simulated hosts to graph nodes in the configuration files has been simplified, replacing the previous hint-based node assignment with an explicit assignment based on the graph node ID. Hosts can also be assigned specific IP addresses rather than having Shadow generate their IP addresses based on the graph node's IP hint. The formats of the configuration file and network graph have been updated accordingly to remove the hint-based options. #1573
Shadow now requires explicit self-loops for all network nodes, instead of silently routing traffic to a neighboring node and back when one is missing. #1679.
Documentation is now published in the mdbook format to https://shadow.github.io/docs/.
Simulation accuracy
On systems with a fixed-rate
RDTSC, Shadow now finds that rate and uses it in emulation. #1524. #1515.We fixed a bug causing spurious repeated FIN packets #1596.
Descriptors are now closed properly when a managed process exits. This is important when the managed process exits before the simulation has completed. #1650
Stability
Shadow now uses a "childpid watcher" thread to more robustly detect when a child process has exited #1504.
We've made a push to replace code panics with friendly error messages when provided an invalid input or configuration: #1275.
Shadow now detects and warns if it's running out of system resources. #1644
We've fixed a potential resource leak in epoll handling. #1101
We've fixed a packet memory leak caused by partial packets. #1483
Shadow now correctly detects and rejects configurations with duplicate host names. #1630
We've fixed the order of packets in Shadow's generated pcap output: #1595
Performance
Shadow now detects and warns when speculative-store-bypass is disabled. This sidechannel mitigation substantially hurts Shadow's performance, and can be inadvertently and unnecessarily enabled in some containers. #1510
Compatibility
We've had some early success getting some network golang programs running in Shadow, using ptrace-based interposition (
--interpose-method=ptrace). More testing and work is needed for golang programs to be officially supported under Shadow, but adventurous golang users should be able to at least get started. EDIT: See #1549 (comment) regarding a known issue with golang's new non-cooperative preemption.We worked with a user to get Shadow working with managed processes using the Salticidae minimal C++ asynchronous network library #1576.
Various other syscall handler fixes and new implementations. #1500, #1544, #1548, #1607, #1638, #1666, #1680, and more
Oxidation (Migration to Rust)
Shadow's
mainfunction is now in Rust. #1633Network graph processing has been migrated to Rust. This parses our GML network graph and computes shortest paths between graph nodes much quicker than our previous C implementation, and reduces memory usage. #1573
We've made some progress towards being able to implement syscall handlers that require scheduling events in Rust, including adding an EmulatedTime type, and refactoring blocking syscall handling to reduce pointer aliasing and complexity.
More code related to descriptors has been moved to Rust, allowing for better Rust support (improved lifetime and borrow checking) in syscall handlers when working with descriptors. #1654, #1655
Happy simulating!
The Shadow team
Beta Was this translation helpful? Give feedback.
All reactions