Where are my performance counters ?

Your custom created 32 bit performance counters do not show counter information when generating logs using user defined Data collector Set with 32 bit “PerfMon” tool on 64 bit windows Server 2008 machine. However, you are able to get live performance data for these counters on the same machine.

The problem can be reproduced using Windows SDK sample “PerfGen”. Follow the steps below to reproduce the problem using this sample.

1. Build 32 bit DLL of PerfGen sample available with Windows SDK.

2. Modify the Perfgen.Reg:

    1: REGEDIT4
    2: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfGen\Performance]
    3: "Library" = "perfgen.dll"
    4: "Open" = "OpenSigGenPerformanceData"
    5: "Collect" = "CollectSigGenPerformanceData"
    6: "Close" = "CloseSigGenPerformanceData"
    7: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\PerfGen]
    8: "EventMessageFile" = "%systemroot%\\SysWow64\\perfgen.dll"
    9: "TypesSupported" = dword:00000007

3. Apply the steps in the readme.txt of the perfgen sample as below. Please run all the command in elevated CMD window.

A. Copy the PerfGen.DLL that was built to the %systemroot%\SysWOW64 directory of Windows Server 2008.

B. Load the driver entries into the registry using the following command line:

REGEDIT PERFGEN.REG

C. Load the performance names into the registry using the command line:

LODCTR PERFGEN.INI

4. Run 32 bit “PerfMon” from SysWoW64 folder. Try to create a new 'Data Collector Set' from 'Data Collector Sets -> User Defined'. Add the 'Signal Generator counter. Start collecting logs for some time.

5. Stop collecting data and try to open log file “.blg” file. You will not get the counter data.

Note that the behavior is observed for 32 bit customer counters on 64 bit Windows 2008/ vista machine. For 64 bit customer counters, Data collector set works fine.

Cause

=========

Performance Logs and Alerts (PLA.DLL) is the service responsible for gathering the data for Data Collector Sets. Checking the corresponding registry hive (HKLM\System\CCS\Services\PLA) indicates that the DLL gets loaded from system32 folder which is a 64 bit DLL. Hence, cannot load a 32 bit customer counter DLL.

Solution

===========

The Performance Counter DLL Host Service (perfhost.exe) is responsible for running 32 bit counters from remote users and 64 bit processes. If this Service is stopped, the 32 bit Performance Logs and Alerts cannot be host on 64 bit machine.

Make sure that “Performance Counter DLL Host” Service (perfhost.exe) and “Performance Logs and Alerts” (PLA.DLL), both services are running. Start collecting the data collector sets again.

- Ankit Sadrani

Windows SDK