DASADA Gauge Infrastructure

Announcement Details
Siena version RMI version
Example gauges Performance gauges
Gauge Specifier

Gauge Infrastructure

We are happy to be able to announce the release of Version 1.0 of the gauge infrastructure that was discussed at the DASADA meeting in December. It is intended as a possible common infrastructure for use among DASADA members so that gauges produced by different developers can be shared and used in a variety of projects. This release significantly improves upon the previous beta version that was made available in June.

The gauge infrastructure is based on a "gauge bus," similar to the "probe bus" proposed by the Run-time Infrastructure Working Group. That is, it provides a pub-sub mechanism by which gauges can announce and listen to high-level events. The infrastructure also provides considerable support for creating, destroying, and configuring gauges. The gauge bus can be transparently instantiated on top of either Siena, or Java RMI.

In addition to the gauge infrastructure (for both Siena and Java RMI), our distribution containts examples of its use, specific gauges for measuring the bandwidth of distributed applications, and related probe mechanisms for performance monitoring (based on the sophisticated Remos technology, developed under the DARPA QoS Program).

We are eager to have others use this infrastructure and will readily provide assistance for those in the DASADA community using it.

Details

The design of the gauge infrastructure, and its rationale, can be found in the Gauge Infrastructure Proposal, which is distributed with the release, as well as in our paper at the CDSA conference in Brisbane.

In brief, the gauge infrastructure provides a conceptual architecture consisting of the following objects:

  1. Gauges: a gauge is an entity that collects information from probes, performs some computation over that information, relates the information to a high-level model, and reports that information to consumers of a gauge. Conceptually, a gauge has two interfaces: (1) a control interface, that provides direct communication between consumers and gauges for configuration and querying; and (2) a reporting interface that allows gauges to periodically report events to interested consumers. The events that a gauge reports are:
    • Created: this event is the first event that a gauge reports.
    • Configured: this event is produced when a gauge is reconfigured by a gauge consumer. This event exists because other consumers interested in a gauge will want to know when a gauge is reconfigured in addition to it new configuration.
    • ReportValue: this event is produced when a value is reported.
    • ReportMutlipleValues: this event is produced when a gauge wants to report multiple values at once.
    • Deleted: this is the last event sent by a gauge. A gauge will not respond via its control interface or report new values after this event has been sent.
  2. Gauge Managers: a gauge manager controls the lifecycle of a gauge, allowing gauges to be created and deleted and information about gauge types to be ascertained. It is intended that gauge managers provide some security policy over gauge creation and deletion (for example, only consumers that create a gauge can delete it), but the current implementations do not provide any such security.
  3. Gauge Consumers: a gauge consumer requests gauge managers to create and delete gauges, listens for reports from gauges, and can reconfigure or query those gauges. Typically, a gauge consumer has access to both interfaces of gauges (control and reporting) and the gauge manager interface.
  4. Gauge Reporting Bus: conceptually, this is an event bus that is used by gauges to announce the events described above, and listened to by gauge consumers for notification about these events.

Siena Version

The Siena implementation uses the Siena wide area event network (see http://www.cs.colorado.edu/~carzanig/siena) as the communication medium. The RPC interfaces are implemented with blocking Siena events. It is assumed that you have Siena installed and in your classpath to use this implementation.

To download the Siena version, you require the following files:

RMI Version

The RMI implementation uses Jave RMI remote procedure calls as the underlying communication mechanism.

To download the RMI version, you require the following files:

Example Gauges

Provided with each implementation are simple examples of gauges and gauge managers for time-reporting gauges (that don't use any probes). These examples include generic gauge consumers that can be used to create and listen to gauges of any type, and simply report their observations in a GUI. The implementations for Siena and RMI are slightly different:
ImplementationSiena versionRMI Version
GaugeInherits SienaGaugeInherits RMIGauge
Gauge ManagerInherits SienaGaugeMgrInherits RMIGaugeMgr
InitializationUses initSienaAssumes the RMI registry is running

To download the examples:

Performance Gauges

Included with this release are a gauge and probe for measuring bandwidth. The probes report the bandwidth between two IP addresses, and use the Remos Network API (http://cs.cmu.edu/~remos) to determine the information. (Remos needs to be downloaded and installed seperately.) The gauge simply listens to the probe outputs and reports them to the gauge bus. It is assumed that you have the Remos Java package and Remos collectors running in your environment. This package is available at remosGauges.tgz. Currently, the version only works for the Siena version; we plan to make available the RMI version very soon.

Gauge Specifier

The gauge sepcifier is a Java application for specifing gauge types. Gauge types define the values reported by instances of these gauges, the parameters required to create a gauge (called the setup parameters), and the parameters that may be used to configure instances as they run. The gauge specifier provides a GUI front end to this sepcification. The output of the specifier is:
  • Acme Families: that define the gauge type for use within AcmeStudio. This allows gauge instances to be attached to Acme designs and created from within AcmeStudio.
  • Gauge Implementation Stubs: Generate Java stubs for gauges and gauge maangers that integrate with the CMU Gauge Infrastructure. The aim is that the gauge developer has to write the minimal amount of code to have a gauge implemented.
An alpha version of the Gauge Specifier is available at gaugeSpecifier.jar. It only provided functionality for generating Acme Families. It requires Java 1.3. To run it, type:
  java -jar gaugeSpecifier.jar