Agent
This chapter describes the MyARM agent implementation. The first section gives an overview of MyARM, its features and a brief description of its architecture. Next section describes the ARM language bindings supported by MyARM and the last section describes MyARM tools supporting deployment of ARM instrumented applications.
Overview
The MyARM agent implements the ARM version 4.0 interface standard of The Open Group. For legacy purposes it also provides an ARM 2.0 compatible interface implementation which is mapped to the real ARM 4.0 implementation, thus allowing older ARM 2.0 instrumented applications and new ARM 4.0 instrumented application to integrate easily. This chapter describes only the MyARM agent specifics and not the ARM interface standards. For a detailed description of the ARM interface standard, please see the appropriate Open Group standard documents ARM4C and ARM4J.
Agent features
The MyARM agent implements the full set of features defined by the ARM 4.0 interface specification which can be summarised as follows:
- Supports language bindings for C and Java.
- Transaction response time measurement with micro- or nanosecond granularity (platform dependent).
- Supports both implicit and explicit response time measurement using start/stop (implicit) and report (explicit) mechanism.
- Correlation of transactions with parent/child relationships.
- Application measurement support (application running time).
- Definition data for ARM application, ARM transaction and ARM metric types.
- Up to 20 name/value properties (name=value) for application and transaction definition types and runtime instances.
- URI support for transaction definitions and runtime instances.
- Transaction metrics like counters, gauges, numeric IDs and simple strings.
- Error handling support on API level.
- Supports finer granularity for transaction measurements.
- measuring time spent waiting for some resource to be available (blocked transactions).
- Supports single- and multi-threading environments.
In addition to the features defined by the ARM 4.0 interface standard, MyARM provides the following features:
- ARM 4.0 compatible CSharp binding
- ARM 2.0 integration into the ARM 4.0 environment for legacy.
- ARM 4.0 compatible Python binding
- Modular architecture for transport, storage and retrieval of
measured data.
- Decoupled delivery of transaction data to the storage part through a dedicated transaction data collection process/thread per host/process.
- Ability to deliver transaction data to the storage part directly from the application, if there is no chance to run a separate process on the host the application runs on.
- Choice between different storage sinks (like MySQL or SQLite databases or even plain XML files).
- Appropriate data source to retrieve ARM data for each data storage sink.
- Transporting user identity to sub-transactions using the MyARM correlator.
- Transaction response time histograms.
- Statistical transaction metrics such as mean, median and deviation of response time for a number of transactions.
- Visualisation and statistical analysis of transaction chains.
- Command line tools for analysing stored ARM data.
- Easy to use graphical user interface to analyse ARM data.
- Web-based analysis tools.
- C++ interfaces for retrieving measured ARM data allowing to write your own specialised analysis tools.
Agent architecture
The "Overview MyARM architecture" shows the modular architecture of MyARM. The main part of the agent is the ARM interface implementation, which is linked against an instrumented application. The agent implementation uses a backend (data sink) concept to store and/or process the measured ARM data. There are different kinds of data sinks for different purposes like calculating statistical metrics on the fly, store any measured data in a database for later analysis or some pseudo data sinks for technical reasons like minimising interference with the instrumented applications. For a detailed description of all available data sinks see section data sinks.

Figure: Overall MyARM architecture
For the analysis of measured ARM data, MyARM provides a set of tools. These tools use the appropriate data sources to retrieve the previously measured ARM data as a counterpart of the datasink component. The data source component defines an interface which is used by the analysis tools, how ARM data can be retrieved from a database datasink component.