System Requirements

The system requirements for the Undo Engine are as follows:

  • Linux kernel 2.6.32 or later
  • GNU C Library (glibc)
  • GNU POSIX Threads library (libpthread)

The Undo Engine does not require any kernel patches or loaded kernel modules. Most Linux distributions therefore support the Undo Engine without modification.

Furthermore, there is no need to re-build applications; any binary executable can be debugged with the Undo Engine. It is recommended to build executables with debug information, typically by passing the -g option to the compiler, since this allows the debugger to extract more information about the state of the process.

Linux Distributions

The Undo Engine is supported on the following Linux distributions:

  • Red Hat Enterprise Linux 6.8, 6.9, 6.10, 7.4, 7.5, 7.6, 8.0.
  • Fedora 28, 29, 30.
  • SuSE Linux Enterprise Server 12.3, 12.4, 15.
  • Ubuntu 16.04 LTS, 18.04 LTS, 18.10, 19.04.

It will run on most other reasonably modern Linux distributions and versions.

Architectures

The following architectures are supported for the Undo Engine:

  • x86 (32-bit)
  • x86_64

Packaged GDB

When used through the udb frontend, UndoDB depends on GDB.

By default, UndoDB uses the pre-built GDB 8.1 supplied as part of the release. This version is the officially supported and recommended version of GDB but other versions can be used by supplying the command line option --undodb-gdb-exe to udb.

Other Operating Systems

At this time the Undo Engine does not support non-Linux operating systems such as Windows or Mac OS X. Contact Undo Support if you’re interested in support for a non-Linux OS.

RAM usage

The main memory requirements for the Undo Engine come from process snapshots and the event log.

Regarding process snapshots, the Undo Engine normally stores about 30 of these by default, but they’re forked from the original process using copy-on-write so they’re created efficiently. In a short run of the program, these snapshots will be spaced closely together, while in a longer run, they will be spaced further apart. So, the memory consumption for snapshots remains fairly independent of the run time, but reverse operations such as reverse-next and reverse-continue can be executed much faster when there is a snapshot available more recently in the program history. In other words, longer runs affect replay performance rather than snapshot memory utilization.

Regarding the event log, its available space is consumed at a rate that corresponds to the volume of non-deterministic event behaviour. In programs that spend most of their time waiting for something to happen, the memory usage will be low. It’s true that in more non-deterministic applications (for example, those that perform lots of I/O operations) the memory that was allocated to store the event log will sometimes fill up. The size of this memory region is configurable, both in advance, and at the time of the event log filling up (should that happen). In addition, the event log can be configured as a circular buffer, in which case earlier events are discarded to make space for newly-created events. The most useful events are usually the ones from immediately before the program crash, so this is usually a reasonable compromise.

Disk usage

During normal operation of UndoDB and Live Recorder, no information is written to disk: all information is stored in memory. When a recording is saved by Live Recorder the in-memory representation of the recorded process is syncronously written to disk as a recording file.

The size of this recording file is determined by various factors. Most notably, the amount of non-deterministic data generated by the process and the size of the process’ memory image. Recording files are compressed by default, so the size of the recording file is often less than the combined sizes of the memory image and non-deterministic event log.