PASSPORT PERFORMANCE LIBRARY README.txt 9/10/98
------------------------------------------------
This library defines an interface class and a single implementation to
synchronously set performance counters in a application. Currently
there is only one implementation: NT Performance Monitor. In the
future there may be other implementations for SNMP traps, etc.
A performance counter is a single DWORD, that an application may
increment, decrement or set. An application may define many performance
counters. Counters are communicated out-of-process to the perfmon
application via a memory-mapped files. Counters are lightweight: for
the application, incrementing a counter is just modifiying a DWORD in a
section of shared memory. Examples of performance counters are numbers
of items in a cache, number of failed authentications, etc.
Typing 'build' in each of the directories hubCounters, brokerCounter,
testCounters creates a single performance Dll for that directory. That
performance Dll is used both by the application and the performance
monitor itself.
This is an implementation of **static** performance counters: the
performance counters must be defined before running the application in
order to be useful. Counters may not be created dynamically while the
program is executing. The reason for this is that installing a perf
counter a pre-existing key for the perfmon application must be modified.
If the application dies suddenly, then the perfmon registry entry can
only be rolled back manually. Datacenter personel have complained that
dynamic counters are messing up their registries.
However, Instances (of performance objects, not counters) may be created
and destroyed dynamicially. This allows the monitoring of, for example,
open socket connections by name.
Initial Setup:
--------------
Build (type "build -c") in the $(PASSDEV)/common/PerfLibrary and in
relevant subdirectory (hubCounters or brokerCounters) to build the
hubCounters.dll or the brokerCoutners.dll.
Setting Up the Registry
-----------------------
In order to use the perfmon counters you must make chages to you
registry. If you do make those changes your application will not be
affected, but you will not be able to read the perfmon counters!
FIRST BACK UP YOUR REGISTRY! INSTALLING THE PERFMON COUNTERS MAKES
CHANGES TO YOUR REGISTRY! **ESPECIALLY** BACK UP THE KEY:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib]
To install the counters, go to the directory where the <name>Counter.dll
lives Dll lives (most likely $(PASSDEV)/sdk/lib/i386). Make sure you have
these three files in that directory.
<name>Counters.dll
<name>Counters.ini
<name>Counters.h
If those three files are not present copy the from dev. tree (most likely
$(PASSDEV/common/PerfLibrary/<name>Counters) and run the command:
'regsvr32 <name>Counters.dll'
where <name> is hub or broker. You should see the respective key added
to the "SYSTEM\\CurrentControlSet\\Services\\<name>Counters"
registry location. This modifes both the above
"SYSTEM\\CurrentControlSet\\Services\\<name>Counters" registry key and
the registry you created when you installed NT at:
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib"
Uninstalling the Registry
-----------------------
To uninstall the counters, go to the directory where the <name>Counter.dll
lives Dll lives (most likely $(PASSDEV)/sdk/lib/i386). Make sure you have
these three files in that directory.
<name>Counters.dll
<name>Counters.ini
<name>Counters.h
If those three files are not present copy the from dev. tree (most likely
$(PASSDEV/common/PerfLibrary/<name>Counters) and run the command:
'regsvr32 /u <name>Counters.dll'
Class Interface Usage:
----------------------
#include "PassportPerfDefs.h" // for SHM name defines
#include "TestCounters.h" // for counter defines
#include "PassportPerfInterface.h" // for object interface
static PassportPerfInterface * perf = NULL;
if (perf == NULL)
{
perf = (PassportPerfInterface *)
CreatePassportPerformanceObject(
PassportPerfInterface::PERFMON_TYPE);
if (perf != NULL)
{
if (!perf->init( PASSPORT_PERF_BLOCK))
// error
}
else
// error
}
// to increment a counter without an instance
if (!perf->incrementCounter(TESTCOUNTERS_PERF_TEST_COUNTER1))
{
// error
}
// to add an instance to that object
CHAR instanceName[PassportPerfInterface::MAX_INSTANCE_NAME];
strcpy( instanceName,"Instance");
if (!PA->addInstance( instanceName ))
{
// error
}
// to increment a counter with an instance
if (!perf->incrementCounter(TESTCOUNTERS_PERF_TEST_COUNTER1, instanceName))
{
// error
}
// note if you try perf->incrementCounter(TESTCOUNTERS_PERF_TEST_COUNTER1)
// after you've added an instance to that object it will fail
// to modify a counter type
if (!perf->setCounterType (TESTCOUNTERS_PERF_TEST_COUNTER1,
PassportPerfInterface::AVERAGE_TIMER))
{
// error
}
Modifying Counters
------------------
The counter definitions for the broker and hub have been created in the
brokerCounter and hubcounter directory. Modifyiing these counters has a few steps:
1. Make sure you've backed up your registry, especially the
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib] key.
2. go to the directory where the <name>Counter.dll
lives Dll lives (most likely $(PASSDEV)/sdk/lib/i386). Make sure you have
these three files in that directory.
<name>Counters.dll
<name>Counters.ini
<name>Counters.h
If those three files are not present copy the from dev. tree (most likely
$(PASSDEV/common/PerfLibrary/<name>Counters) and run the command:
'regsvr32 <name>Counters.dll'
This will both unistall the previous counters and re-install the new counters
3. Re-start the perfmon and check to see if the new counters
are in the addcounter menu.