Flexible and Optimized IDL Compilation for Distributed Applications

The author of a distributed system is often faced with a dilemma when writing the system's communication code. If the code is written by hand (e.g., using Active Messages) or partly by hand (e.g., using mpi) then the speed of the application may be maximized, but the human effort required to implement and maintain the system is greatly increased. On the other hand, if the code is generated using a high-level tool (e.g., a corba idl compiler) then programmer effort will be reduced, but the performance of the application may be intolerably poor. The tradeoff between system performance and development effort arises because existing communication middleware is inefficient, imposes excessive presentation layer overhead, and therefore fails to expose much of the underlying network performance to application code. Moreover, there is often a mismatch between the desired communication style of the application (e.g., asynchronous message passing) and the communication style of the code produced by an idl compiler (synchronous remote procedure call). We believe that this need not be the case, but that established optimizing compiler technology can be applied and extended to attack these domain-specific problems. We have implemented Flick, a flexible and optimizing idl compiler, and are using it to explore techniques for producing high-performance code for distributed and parallel applications. Flick produces optimized code for marshaling and unmarshaling data; experiments show that Flick-generated stubs can marshal data between 2 and 17 times as fast as stubs produced by other idl compilers. Further, because Flick is implemented as a "kit" of components, it is possible to extend the compiler to produce stylized code for many different application interfaces and underlying transport layers. In this paper we outline a novel approach for producing "decomposed" stubs for a distributed global memory service.

[1]  Mike Hibler,et al.  Microkernels meet recursive virtual machines , 1996, OSDI '96.

[2]  G. A. Geist,et al.  The PVM System: Supercomputer Level Concurrent Computation on a Heterogeneous Network of Workstations , 1991, The Sixth Distributed Memory Computing Conference, 1991. Proceedings.

[3]  Dawson R. Engler,et al.  Exokernel: an operating system architecture for application-level resource management , 1995, SOSP.

[4]  D. B. Davis,et al.  Sun Microsystems Inc. , 1993 .

[5]  Andrew Birrell,et al.  Implementing remote procedure calls , 1984, TOCS.

[6]  Seth Copen Goldstein,et al.  Active messages: a mechanism for integrating communication and computation , 1998, ISCA '98.

[7]  Joshua S. Auerbach,et al.  The Concert signature representation: IDL as intermediate language , 1994 .

[8]  Carl Kesselman,et al.  The Nexus task-parallel runtime system , 1994 .

[9]  William J. Bolosky,et al.  Mach: A New Kernel Foundation for UNIX Development , 1986, USENIX Summer.

[10]  Andrea C. Arpaci-Dusseau,et al.  Parallel programming in Split-C , 1993, Supercomputing '93. Proceedings.

[11]  Mike Hibler,et al.  Using annotated interface definitions to optimize RPC , 1995, SOSP.

[12]  Milon Mackey,et al.  An implementation of the Hamlyn sender-managed interface architecture , 1996, OSDI '96.

[13]  Douglas C. Schmidt,et al.  Optimizing the Performance of the CORBA Internet Inter-ORB Protocol Over ATM , 1997 .

[14]  David D. Clark,et al.  Architectural considerations for a new generation of protocols , 1990, SIGCOMM '90.

[15]  Aniruddha S. Gokhale,et al.  Measuring the Performance of Communication Middleware on High-Speed Networks , 1996, SIGCOMM.

[16]  John B. Carter,et al.  Khazana: an infrastructure for building distributed services , 1998, Proceedings. 18th International Conference on Distributed Computing Systems (Cat. No.98CB36183).

[17]  Jochen Liedtke,et al.  Improving IPC by kernel design , 1994, SOSP '93.

[18]  Joshua S. Auerbach,et al.  The Concert Signature Representation: IDL as Intermediate Language , 1994, Workshop on Interface Definition Languages.

[19]  Sun Microsystems,et al.  RPC: Remote Procedure Call Protocol specification: Version 2 , 1988, RFC.

[20]  Leigh Stoller,et al.  Direct deposit: A basic user-level protocol for carpet clusters , 1995 .

[21]  Raj Srinivasan,et al.  RPC: Remote Procedure Call Protocol Specification Version 2 , 1995, RFC.

[22]  Douglas C. Schmidt,et al.  Object-Oriented Components for High-speed Network Programming , 1995, COOTS.

[23]  Seth Copen Goldstein,et al.  Active messages: a mechanism for integrating communication and computation , 1998, ISCA '98.

[24]  Eric Eide,et al.  Flick: a flexible, optimizing IDL compiler , 1997, PLDI '97.

[25]  T. von Eicken,et al.  Parallel programming in Split-C , 1993, Supercomputing '93.

[26]  K. Mani Chandy,et al.  Fortran M: A Language for Modular Parallel Programming , 1995, J. Parallel Distributed Comput..

[27]  Syam Gadde,et al.  Cheating the I/O Bottleneck: Network Storage with Trapeze/Myrinet , 1998, USENIX Annual Technical Conference.

[28]  K. Mani Chandy,et al.  CC++: A Declarative Concurrent Object Oriented Programming Notation , 1993 .

[29]  Anna R. Karlin,et al.  Implementing global memory management in a workstation cluster , 1995, SOSP.