Yesterday due to some urgent req I have been asked to check performance and memory bottlenecks for a particular application.

I tried Windows Performance monitor however I didn’t find it as per our requirements.

Then while googling i found PerfMon.

Here are its details:


PerfMonitor is a processor performance monitoring tool.

It allows to track the frequency of 4 events choosen in a set of model-specific list.

PerfMonitor can be used to identify the performance bottlenecks of a system, or to monitor a program for cache-miss rate or mis-predicted branches. But PerfMonitor can also be used as a hardware-level CPU comparison tool, comparing the key parameters of different CPUs runnning the same benchmark.

Directions for use

Install PerfMonitor( Very Esay to install, just click the exe and its running)

Unzip all files in the same directory and run perfmonitor.exe. You can run as many instances of PerfMonitor as there are physcial CPUs in your system (see below for the particular case of CPUs that use HyperThreading technology). The first instance will be attached to CPU #0, the next one to CPU#1, and so on. The application settings will be saved in a file named PerfMonX.ini (where X refers to the CPU number) stored in your temporary account path (typically : C:\Documents and Settings\UserName\Local Settings\Temp)..

Select monitored events(You can add those so called counters easily from the list)

PerfMonitor allows to track up to 4 events, depending on the CPU model. Each event is attached to a graph. In order to change the monitored event, put the mouse cursor on a graph then click on the left button to make the events menu selection appear (note that the currently monitored event is checked in the menu).

Because of hardware limitations (namely the number of available counters), it is possible that all the desired events can’t be monitored in the same time than other events. If a requested event is not available for monitoring, the graph will appear in grey color. Note that the events are created from the top to the bottom, consequently the events on the top graphes have more chance to be allocated. Note also that some events need two counters, especailly the ones that tracks a cache level success rate.
If the change of an event frees a counter that allows a non-available event to be monitored, it will be started automatically.

Record results( This is one of the most impressive feature)

The monitoring output can be stored in a txt file. The file is created in the same directory level as perfmonitor.exe and uses the following name convention :
pmon_cpuX_MM_DD_HH_NN.txt, where :

  • X is CPU number in the system (starting at 0).
  • MM is month.
  • DD is day.
  • HH is hour.
  • NN is minute.

To start recording, press F5. The application title bar will confirm that the events are being recorded. Press F5 again to stop recording. Note that changing an event will cause the recording to be stopped.

The generated files can then be used in a spreadsheet to build curves and graphes. The graphic below shows the L1 aand L2 caches success rate during the Cachemem “Memory Walk Test” on an Athlon 64 CPU.

You can get it here

Enjoy Testing 🙂