Perf::ARM is a very simple XS wrapper around the Application Response Measurement interface. To quote the ARM FAQ: (http://www.cmg.org/regions/cmgarmw/armfaq.html) "What is ARM? ARM stands for Application Response Measurement. It is an API jointly developed by an industry partnership that is used to monitor the availability and performance of applications. This monitoring is done from the perspective of the application itself, so it reflects those units of work that are important from the perspective of the business." Basically, putting the arm_start and arm_stop calls in your C (and now perl) code will allow you to gather and view performance data with HP Openview tools, including Glance, and other consumers of ARM data, like Tivoli's tools. Documentation and links: - as usual, try 'perldoc ARM.pm' or after install, 'perdoc Perf::ARM' for usage info - the test scripts in the t/ directory may serve as interesting examples to get you started - check out + ARM FAQ at http://www.cmg.org/regions/cmgarmw/armfaq.html + CMG ARM Working Group info page at http://www.cmg.org/regions/cmgarmw/ + HP-UX: /opt/perf/include/arm.h or /usr/include/arm.h + Glance docs at http://www.openview.hp.com/products/ Prerequisites: - perl 5.005 or later The module has only been heavily used with 5.6 -- older versions may or may not work. Please report problems to me. In particular, some implementations of libarm use threads, which has not worked well for me with perl 5.004_04. - A functioning cc, gcc, or ANSI compliant C compiler - the ARM include file - generally /usr/include/arm.h - a functioning ARM library (check for /usr/lib/libarm.* or build and use the libarm from the CMG ARM SDK) for HP-UX, this means the Measureware Glance Pak's libarm.sl The default HP-UX installation includes a NOP library that will allow an application that links with ARM to run, but no ARM instrumentation will really be collected. The same is true for this perl module -- it is possible to use the perl ARM calls without checking error codes, and a NOP libarm will be silently ignored. However, the 'make test' step of the Perf::ARM module installation *does* check error codes, so it will fail if the any arm_* related calls fail. Calls to the NOP library will fail, so the 'make test' will fail as well. HP-UX Installation notes: - see /usr/include/arm.h for a list of the errors that can be returned from the calls. Hint: search for ARM_INVID to jump to the error code listing. - You may need to make adjustments to your /var/opt/perf/ttd.conf file to allow arm_init() and arm_getid() to succeed. See the ttd.conf(4) man page for more information. Current limitations: - 'make test' does not pass for the ARM SDK no-operation (NULL) shared libraries, as the module expects real return codes. The libagent library from the SDK works fine. - the arm_update() routine is not supported yet - user metrics and correlators have not been tested - the module has only been tested on an HP-UX 11.00 system using the Measureware/Glance libarm.sl - this is my first submission to CPAN and my first XS module -- doubtless it shows. :) Feedback, suggestions, constructive criticism, and random assistance are very welcome - the tests included in t/ are very rudimentary - some versions of perl built with usemymalloc='y' fail. Workaround: rebuild with usemymalloc='n'. Glance note: - on HP-UX systems with the Glance/Measureware tools, you may also find a line like this useful for seeing the ARM traffic: glance -adviser_only -j 5 -syntax /opt/perf/examples/adviser/arm Acknowledgements: - Many thanks to Doug Grumann for the ARM examples and insights - David Carter has sent several improvements to the tests and demonstrated how to use Inline. Look for these in an upcoming version of Perf::ARM. Copyright (c) 2001 Hewlett-Packard Company. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.