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:
    - the arm_update() routine is not supported yet
    - user metrics and correlators have not been tested
    - the module has only been testing 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

Glance note:
    - on HP-UX systems with the Glance/Measureware tools, you may a 
      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


Cheers!
Bryan Backer
bryan_backer@hp.com

Copyright (c) 1999 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.