Jockey execution record/replay library
Jockey is a user-space library for recording and replaying an
execution of generic GNU/Linux programs. It is a debugging tool
especially for long-running networked servers that suffer from bugs
that are difficult to reproduce.
- Source and RPM download.
The latest version is 0.8.1
Changes from 0.8 to 0.8.1:
Changes from 0.7 to 0.8:
- Made the system-call interception mechanism into a separate, reusable
library (interceptor). A few sample clients, in addition to Jockey,
are included in the source-code
package.
- Bug fixes, of course.
Changes from 0.6 to 0.7:
- Support for
~/.jockeyrc file is removed. Use
JOCKEYRC (or JOCKEY) environment variable instead.
- Checkpoint and log files are now compressed using zlib.
Achieved 1/5 to 1/10 reduction in space consumption.
- Experimental gdb support for fakethreads.
- Fixed: checkpointing and restoring fakethreaded programs.
- Jockey source code is managed by Bazaar 1 at the following location:
Archive: http://arch.gna.org/jockey/archive
Project: jockey--mainline--0.6
If you haven't used Bazaar before, here are the steps you do
to download the latest source code:
% baz register-archive http://arch.gna.org/jockey/archive
% baz get yasushi.saito@gmail.com--jockey/jockey--mainline--0.6
- Toplevel project web page..
- Change log.
- Mailing lists.
- Detailed documentation.
- A reseach paper. (It's
slightly obsolete, but gives a good overview of Jockey).
Jockey is released under GPL.
Copyright (C) 2004, 2005 by Hewlett Packard Development Company, LP
Highlights
A more detailed documentation is available here, but here are highlights.
- Jockey is provided as a shared-object (dynamically linked
library) file. It does not require source-code modifications nor
binary relinking. Just link
libjockey.so to your target
application at runtime using LD_PRELOAD.
- It records and replays the effects of individual Linux system
calls and (in some cases) CPU instructions. It can replay at the level
of individual memory loads and stores. For example, if your program
crashes because of a dangling pointer access, Jockey can replay the
bug right up to the point of crash.
- Jockey can take checkpoints of process state and
replay execution from any checkpoint.
- Jockey can record and replay pthread-based programs, but in a
slightly bogus way--it Jockey emulates pthreads entirely
in the user space. Pthread-based
programs should run as normal, but under the cover, Jockey emulates
multi-threading I/O using user-space context switching and a giant
poll() loop.
- Jockey doesn't support programs that dynamically generate code,
such as Java. It does support programs written in interpreted
languages, including Perl, Python, and Ruby, although I'm not sure if
Jockey is really that useful for these programs.
Prerequisites
- Jockey supports only GNU/Linux on x86 machines.
- Jockey is supposed to run on most modern GNU/Linux systems, but
it's fundamentally dependent on kernel and libc versions. We've so
far run it only on RedHat 9, Fedora Core 3 and 4. RH9 and FC4 are
somewhat more actively supported.
- Installation instructions are found in
INSTALL file
in the source-code package.
- Jockey is written mostly in C++. You need gcc, make, and all
other standard development tools. Below are additional non-standard
packages used by Jockey.
| | RPM package names on FC4
|
|---|
| Autoconf | autoconf
|
| Libtool | libtool
|
| Boost | boost, boost-devel
|
| Ruby | ruby, ruby-lib, ruby-devel
|
Help wanted!
- Porting to other distributions.
- Porting to other CPU architectures.
- Building RPM files for more distributions.
- Writing
libthreaddb (i.e., gdb support) for fakethreads.
Yaz Saito (yasushi dot saito at gmail dot com)