|
Description
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++.
|