Bindings

Documentation / C/C++ Edition / User Guide / Agent / Bindings

Bindings

This section describes the ARM language bindings supported by MyARM. It provides a more detailed description of MyARM set of ARM features.

ARM 4.0 C Binding

The ARM 4.0 C Binding published by The Open Group defines a C API to instrument applications to measure performance data. MyARM implements this API and can be used with any standard conforming instrumented application. This section does not describe the C API as it is published by The Open Group (see ARM4C for an API description) it describes the concrete implementation and special characteristics of MyARM.

C versus C++

The ARM 4.0 standard defines only a C API which can be used in C++ as well. The reason why there is no real C++ API is due to the fact how ARM is deployed within a system.

One major goal of ARM is that any application which is instrumented with a certain version of ARM should be able to run with any installed ARM agent of that version. But currently there does not exist any real application binary interface (ABI) standard for C++ language. A compiler vendor can choose its own model how the compiler layouts objects or mangles class/method names to linker symbol names. So different ARM implementation could have different object layouts and different linker symbol names. This problem does not arise within plain ANSI-C programs.

ARM 4.0 C++ framework

However MyARM provides an full complaint ARM 4.0 C++ framework using the ARM 4.0 C binding (See http://api.myarm.com/arm40cpp/). This framework is provided as source code which can be inlined or separately compiled. Therefore the ABI problem can be solved by the user of the ARM 4.0 C++ framework.

ARM 4.0 Optional features

In the ARM 4.0 document many features defined in the standard are marked as optional and may or may not be implemented by an agent. Besides the mandatory features MyARM supports the following optional features:

ARM 4.0 unsupported features

As described in the previous section many features are optional. Currently MyARM does not provide the following features:

Agent details

C Agent shared library architecture

The main part of the ARM agent is the shared library (object) which implements the ARM 4.0 C API. Each ARM instrumented application is linked against this library. The library base name is arm4 and for example libarm4.so is used under Linux and Solaris platforms, where as libarm4.dll used on Windows platforms.


Figure: Agent shared library overview

Figure "Agent shared library overview" also shows that the libarm4.so library in turn uses different datasink shared libraries which are loaded at runtime according to the current configuration. Here the MySQL datasink library libmyarm_mysqlsink.so is shown which stores any ARM data which is passed from the libarm4.so library into a MySQL database.

Multi-threading versus Single-threading

The ARM 4.0 standard states that any ARM implementation has to be thread-safe. The MyARM implementation uses own threads to process measured data (Figure "Agent data processing thread pipeline"). Therefore if you use MyARM in a single-threaded program it is not really single-threaded but the interference between the instrumented application and the MyARM agent is reduced to a minimum regardless which configuration is used.

Response times

The ARM standard defines response times measured in nanoseconds. Not all systems today provide such a high granularity of time stamps. table Response time granularity shows on which platform MyARM provides which granularity of response time measurements.

Platform Granularity Description
Windows (x86,amd64) microseconds using GetSystemTimeAsFileTime() system call
AIX (ppc) microseconds using gettimeofday() system call
Linux (x86,amd64) nanoseconds using clock_gettime() system call
Solaris (sparc,x86) nanoseconds using gethrtime() system call
Return codes

The ARM 4.0 C Binding describes that a negative return code for any of the API calls indicates an error, a zero return code a success and a positive return code a warning. The MyARM specific return codes are documented in the agent reference appendix.