CRAMM / BC

Personnel: Emery Berger, Scott Kaplan, Eliot Moss, Ting Yang
Alumni: Matthew Hertz, Yi (Eric) Feng

The goal of this project is to dramatically improve the performance and robustness of garbage-collected applications under memory pressure, through cooperation between the operating system and the garbage collector.

CRAMM (Cooperative Robust Automatic Memory Management)

CRAMM combines a new, statistics-gathering virtual memory manager with a collector-neutral heap sizing algorithm that ensures that garbage-collected applications run as fast as possible while avoiding paging.

OSDI 2006: CRAMM: Virtual Memory Support for Garbage-Collected Applications

Bookmarking Collection

Bookmarking collection is a GC algorithm that works with the virtual memory manager to eliminate paging. Just before memory is paged out, the collector "bookmarks" the targets of pointers from the pages. Using these bookmarks, BC can perform full garbage collections without loading the pages back from disk. By performing in-memory garbage collections, BC can speed up Java programs by orders of magnitude (up to 41X).

PLDI 2005: Garbage Collection Without Paging.

Software

Bookmarking collector: The bookmarking collector consists of two parts: a Linux kernel patch and a patch to the Jikes RVM research Java virtual machine. To patch the Linux kernel (extends the virtual memory manager to provide the memory pressure signals BC uses):

  1. Download a clean copy of version 2.4.24 of the Linux Kernel
  2. Apply the VMComm patch to the kernel (more below)
  3. Build and install the patched kernel


To build BC:

  1. Install the Jikes RVM 2.3.2 release
  2. Untar the gzip-ed tarball rvm.tgz in the rvm directory
  3. Untar the gzip-ed tarball tools.tgz in the rvm/src/tools directory
  4. Apply the patch file tools.patch in the rvm/src/tools directory
  5. Untar the gzip-ed tarball vm.tgz in the rvm/src/vm directory
  6. Apply the patch file vm.patch in the rvm/src/vm directory
  7. Untar the gzip-ed tarball JMTk.tgz in the rvm/src/vm/memoryManagers/JMTk directory
  8. Apply the patch file JMTk.patch in rvm/src/vm/memoryManagers/JMTk directory
  9. Set your RVM_BUILD environment, as appropriate
  10. Type "jconfigure FastAdaptiveGenBC"
  11. Type "cd $RVM_BUILD;./jbuild"

VMSig: a virtual memory communication patch for the Linux kernel. It allows the user applications to register and receive signals from the OS kernel on VM paging events. With the extended functionality of the madvise system call, user applications can help improve the efficiency of VM management in the kernel. It also fixes the problem of the mincore system call in the stock kernel where mincore does not work with anonymous pages. This patch was originally developed for Linux 2.4 (download the kernel patch for Linux 2.4.24) and later ported to Linux 2.6 (download the kernel patch for Linux 2.6.14 and the header file for the new system interface).