next up previous
Next: VIA: a low-level, general Up: Using the VI Architecture Previous: Using the VI Architecture

   
Introduction

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 $\mu$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.


next up previous
Next: VIA: a low-level, general Up: Using the VI Architecture Previous: Using the VI Architecture
Raymond Namyst
1999-11-26