1. A data processing system for monitoring performance of a program being executed using per thread metric variables with reused kernel threads comprising: receiving means for receiving a value of a metric variable for a kernel thread; determining means for determining if the kernel thread has been previously used by a first application thread; and applying means for applying the value of the metric variable to a second application thread if the kernel thread has been previously used by the first application thread.