Release v2.1.0 · shadow/shadow · GitHub
Skip to content

v2.1.0

Choose a tag to compare

@robgjansen robgjansen released this 03 Jun 22:00
· 3872 commits to main since this release
v2.1.0
4226cf2

Shadow v2.1.0 is a minor release following our significant redesign of Shadow in v2.0.0. See the v2.0.0 release notes for more details about Shadow's new multi-process architecture.

This v2.1.0 release has largely focused on improving support for running various types of applications in Shadow while smoothing some of the rough edges introduced in v2.0.0.

We plan to focus our next release on rust migration, and we expect that Rust will become Shadow's primary programming language in v2.2.0!

New features

  • support for applications that depend on signals
  • support for dynamically linked Go applications
  • support for abstract-named unix sockets
  • VDSO-based function interposition
  • simulation progress messages (general.progress)
  • custom capture sizes for the pcap writer (host_defaults.pcap_capture_size)
  • system call latency modeling (general.model_unblocked_syscall_latency). This feature allows Shadow to escape some "busy loops" it couldn't before, avoiding deadlock in e.g. some versions of curl, iperf, libopenblas, and the golang runtime.
  • a --debug-hosts option to make debugging managed processes easier

New system calls

  • select()
  • getitimer()
  • setitimer()
  • SYS_rseq

New supported platforms

  • Ubuntu 22.04
  • Fedora 35 and 36

Changes

  • significantly improved determinism
  • O_DIRECT flag (packet mode) support for pipes
  • ioctl() support for pipes
  • SYN packets have a sequence number and are now retransmitted if they are not acknowledged
  • TCP sockets have finite-sized accept queues/backlogs
  • listen() can be called more than once for TCP sockets to set the backlog
  • improved error reporting if a process did not start or was killed unexpectedly (for example by the OS)
  • improved ioctl() file flag handling for regular files
  • TCP_NODELAY can be enabled for TCP sockets
  • added limited support for the TCP_CONGESTION socket option
  • pcap writer supports UDP packets
  • improved behaviour when one thread closes a file while another thread is blocked on a syscall that uses that file

Bug fixes

  • fixed broken eventfd and exit syscalls
  • fixed behaviour when reading/writing to a pipe
  • fixed memory leak when calling getservbyname_r()
  • fixed incorrect return value for getaddrinfo()
  • host log level is propagated to the shim log level
  • fixed crash on systems with 64-bit inodes

We've made many other internal improvements, added new test cases, and expanded our documentation.