The Virtual Interface Architecture (VIA) has been introduced by Intel, Compaq and Microsoft in December 1997 as a portable software layer for a large class of recent high-bandwidth, low-latency communication networks (SAN) [4,5]. VIA provides a set of functions, data-structures and semantics for moving data between the Network Interface Card (NIC) and the user process' memory. The main feature of VIA is to provide a user process with a direct access to the network by avoiding intermediate copies of data and bypassing the operating system in a protected fashion.
VIA has been designed as a fair trade-off between portability and efficiency for general-purpose applications. As a result, the programming interface is a low-level one that makes every potentially expensive operation explicit. For instance, VIA includes an explicit API for memory management: the application has to register the memory areas which are involved in communication. The corresponding virtual pages are checked for access rights and locked down (pinned) into physical memory. Such operations are expensive because they involve system calls. Thus, the programmer should strive to minimize the number of dynamic memory registration by re-using memory locations whenever possible. This is obviously delicate in complex applications. As far as the progress of communications is concerned, VIA does not make the programmer's task easy either. VIA provides several means to monitor the progress of asynchronous communications, such as completion queues, interrupts, and polling primitives. But it is up to the application to select the most appropriate mechanism.
We believe that such difficult decisions are not the programmer's job in many cases. In specific domains such as high performance distributed multithreaded runtimes, these tasks can be most efficiently handled by an additional medium-level software layer. Based on a number of simple directives, it can decide upon the best policy for memory management. Also, it can choose the best way of handling asynchronous communications depending on the appropriate trade-off between the responsiveness requirements and the affordable overhead.
The Madeleine medium-level interface [2] has
been specifically designed to meet these needs. Madeleine has been
easily ported onto a number of network protocols (BIP, SBP, SCI, TCP,
etc.) thanks to its modular structure based on a small portability
layer (5 functions). It is demonstrated that Madeleine
achieves very good performance on top of high speed networks such as
Myrinet. A latency as low as 8
s has been obtained, together with a
throughput close to 103 Mb/s.
The contribution of this paper is to show how a communication interface such as Madeleine can add useful features on top of VIA without sacrificing performance. We describe a preliminary implementation of the Madeleine medium-level interface on top of the VIA low-level interface. Madeleine transparently exercises the various features of VIA in an optimized way, depending on the message sizes and the capabilities of the underlying network. A number of preliminary experimental results are presented and discussed, based on the Berkeley M-VIA software emulation package [10] on top of Fast Ethernet.