Supported by AITO.
|
|
Automatic Application Partitioning
Eli Tilevich ( USA )
Georgia Institute Of Technology 801 Atlantic Drive, Atlanta,
Georgia 30332-0280 tel: (404)385-2448 fax:
tilevich@cc.gatech.edu
Keywords:
distribution frameworks language implementation software engineering
Abstract:
Application partitioning is the task of breaking up the functionality of an
application into distinct entities that can operate independently, usually
in a distributed setting. As networking changes the computing landscape,
application partitioning is becoming the main kind of distributed
programming. Even the plainest, non-performance-oriented applications may
need to be partitioned due to functional considerations: the resources that
the application needs (e.g., graphical workstation, database system, sensor
hardware) may be distributed throughout a network. Traditional partitioning
entails re-coding the application functionality so that it uses a middleware
mechanism (e.g., CORBA, Java RMI) for communication between the different
entities. This process is tedious and error-prone. An alternative approach
is to use higher-level tools that allow the user to express how the
application is to be partitioned. The tools can then rewrite the existing
application code to replace l!
ocal data exchange (e.g., function calls, data sharing through pointers)
with remote communication (e.g., remote function calls, remote pointers or
mobile objects). Automating the partitioning process while preserving
correctness and insuring good performance of partitioned applications can
greatly facilitate development of a large class of distributed applications.
Nevertheless, automatic application partitioning faces two major challenges.
First, it is hard to guarantee the completeness of the translation process,
by changing the application alone. "Completeness" refers to the ability to
place any arbitrary subset of application data and code on any site. A
second challenge is to obtain acceptable performance for a large class of
applications. This requires both careful analysis of the data exchange
patterns among application entities, and appropriate mechanisms for data
migration and possibly replication. Nevertheless, doing either of the above
with low overhead and no ch!
anges to the runtime system is a difficult task.
I have built a system called Java-Orchestra, or J-Orchestra, for short, to
be an experimental framework for my research. J-Orchestra is an automatic
partitioning system for Java programs. J-Orchestra takes as input Java
applications in bytecode format and transforms them into distributed
applications, running on distinct Java Virtual Machines. J-Orchestra uses
bytecode rewriting to substitute method calls with remote method calls,
direct object references with proxy references, etc. J-Orchestra has
significant generality, flexibility, and degree of automation advantages
compared to previous work on automatic partitioning. For instance,
J-Orchestra can correctly partition almost any pure Java program, allowing
any application object to be placed on any machine, regardless of how
application objects access each other and Java system objects. This power is
due to the novel way that J-Orchestra deals with unmodifiable code (e.g.,
native code in the Java system classes). I have u!
sed J-Orchestra to successfully partition several realistic applications
including a command line shell, a ray tracer, and several applications with
native dependencies (sound, graphics).
My ultimate research objective is to advance automatic application
partitioning to "industrial strength" levels, i.e., to the point where
third-party, commercial applications can be partitioned and used
successfully. The success criterion for my research will be whether a system
can be produced that a) can handle the engineering complexity of commercial
programs; b) enables convenient partitioning, where the user only needs to
interact with a GUI for a few hours in order to partition a large
application; c) achieves good performance for the resulting application.
The PhD work started: August 1999
HTML3
JAVA
Last modified on Mon Aug 15 14:59:24 2005
|