Userland Lock Profiling and Verification

Project description

The goal of this project is to provide userland versions of the LOCK_PROFILING and WITNESS kernel options. This will require the addition of new, instrumented libraries to the base system build. Modifications to pthread.h will be needed in order to collect file and line information for lock acquisition and release.

One problematic area is the lack of lock names for the pthread locks. Default names will be automatically generated, and additional functions pthread_{mutex,rwlock,etc}attr_setname_np() and pthread_{mutex,rwlock,etc}attr_setname_np() will be added to allow for more user-friendly names to be selected.

Profiling statistics will be available via an external XML file and a pair of new functions, pthread_getprofiledata_np() and pthread_resetprofiledata_np(). Lock order reversals will be logged to an external XML file as well.

Approach to solving the problem

The profiling and lock order verification will be implemented separately.

Profiling will be done via an instrumented version of the pthread library (libthr_profile), while lock order verification will be done with a wrapper library (libwitness). The use of a wrapper library should make the witness library more portable and easier to maintain, while the use of an instrumented library allows the lock profiling code to collect statistics that can only be obtained in an intrusive fashion.


The project will provide:


Test Plan

A test suite will be provided with a number of small cases designed to trigger the monitored scenarios and verify that the values returned by the library API functions are correct. These will be developed concurrently with the data recording functionality.

The data logging will be tested by reading back the statistics file can comparing the results to those returned by the debugging APIs.

The data viewer will probably be tested manually, as automation of the testing process would likely prove to be difficult to do properly.

The Code

The code will be available in the Subversion repository at

(Links to any external resources, work, research etc which may be useful to you or to anybody wanting to understand your work)

SummerOfCode2012/Locking (last edited 2012-05-23 22:45:07 by GregMiller)