Graphical User Interface to Performance Monitoring Counters

pmc(3) is a performance measurement framework for FreeBSD which uses the hardware performance measurement counters in modern CPUs to provide low-overhead, non-intrusive, system-wide measurement of production systems.

Project Abstract

The project consists in creating a graphical user interface (GUI) analysis tool. It will be based on the performance monitoring counters framework pmc(3) and pmclog(3), using in-cpu measurement counters. The PMC GUI will allow a visual detection of performance bottlenecks in the execution of a program.

Initial deliverables

Management / welcome screen: The user associates PMCs (measurements) and processes. A set of allowed measurements i.e. according to the CPU - will be proposed to the user. Target processes can be selected by mouse.

Display/monitoring: The user can see in realtime what is happening. Profiling will concern selected processes, threads, and children or descendant processes. Spots/rectangles will correspond to a code segment. There will be a time view of the spots, with 1-2-3D graphes and color codes. Eventually, an interactive link to the function or code of the program should be implemented.


It is committed with the Enlightenment 0.17 libraries, that are BSD licensed. Lastest sources can be obtained by

cvs -z3 -d co e17

The following APIs can be found in the directory freshly created e17/libs:

However Ecore and Evas are the only libraries necessary to implement a UI. Edje is a theming library. It combines complex groups of evas objects into a single evas ‘smart object’. This Edje_Object can be placed on the canvas and used in almost the exact same manner as the primitive Evas objects. It also handles animation.


Evas is a canvas library that handles all the low level graphics work. Rather than painting pixels yourself, you simply define a set of Evas_Objects such as rectangles, images and gradients. Tell Evas where you want these object to be located, set their color, transparency and stacking, and Evas does all the calulating to blend these together into a single image, ready for display on the screen. Evas includes several engines that output to different display environments. (Software_X11, OpenGL_X11, DirectFB, Buffer, etc).


Ecore is really a set of small libraries. It handles a lot of the guts of the EFL; things like Events, Timers and IPC. It also includes Ecore_Evas, which wraps creation of an Evas and a window to put it in into a simple API.

In e17/apps several applications can be found but many tricks and patches are needed to put these application to life. Not all libraries are in the FreeBSD port system, are outdated and, in particular, there is no Python bindings to the APIs.

How you can install and test the user interface

Download the package (not yet a port) at ?, build and install the UI by:

To allow the UI to work,you need the following ports:

and you need the following kernel configuration:

Optionally, you can also have:

How you can help

First, suggestions are welcome. For this, write to me at Many things need to be done yet. Find here a TODO list and ideas for your involvement.


pmcgui (last edited 2008-06-17T21:37:50+0000 by anonymous)