Jaguar: Fast Network Communication and I/O in Java
Java Access to Generic Underlying Architectural Resources

Matt Welsh
Last updated 17 May 2000

Introduction

Jaguar is an extension of the Java runtime environment which enables direct Java access to operating system and hardware resources, such as fast network interfaces, memory-mapped and programmed I/O, and specialized machine instruction sets. Jaguar can be thought of as a replacement for the Java Native Interface. Unlike the JNI, however, Jaguar does not require copying of data between the JVM and C code, nor expensive traversals between the Java and native code contexts. Rather, Jaguar relies upon a flexible bytecode translation technique which directly inlines specialized "driver" code to access low-level system resources from Java while maintaining type safety. This translation can be performed by a JIT compiler, a static ("ahead of time") compiler, or by a front-end which translates Java bytecode to machine-independent "Jaguar bytecode".

We have implemented a Jaguar interface to Berkeley Linux VIA communication architecture, which is implemented over the Myrinet system-area network. This system, JaguarVIA, provides direct, zero-copy Java access to the Myrinet with a round-trip time of 73 microseconds for small messages, and a peak bandwidth of over 488 mbits/second. This is nearly identical (within 1%) to the performance of Berkeley Linux VIA as accessed from C code.

Another use of Jaguar is Pre-Serialized Objects, a mechanism which greatly reduces the cost of Java object serialization. This is accomplished by rewriting Java object field accesses to store data in memory in a "pre-serialized" form, ready for communication or I/O. Our analysis shows that using Pre-Serialized Objects can save a factor of 80 in performance over standard Java serialization for communicating over JaguarVIA.

On top of Jaguar, we have implemented Tigris, a cluster-based I/O system and programming model which allows resources to be automatically balanced across the cluster; this is a Java reimplementation of the River system. Tigris shields applications from asymmetries in CPU, I/O, and networking performance, through the use of a dataflow programming model and a distributed queue which allows data to adaptively flow from producers to consumers. By using Jaguar for communication and I/O, Tigris is able to obtain performance rivaling that of similar systems implemented in C++.

Jaguar is being used by the UC Berkeley Ninja and Telegraph projects to build high-performance, scalable systems in Java.

News

Software Release

This release is targeted at x86 Linux systems, however, it should be possible to compile and use it on other platforms. This software is entirely Open Source; See the release docs for system requirements and copyright information.

Papers

Presentations

Related Projects