1. A computer implemented method of gathering data related to performance in a multiprocessing environment comprising: executing a program on a processor, wherein the program includes instrumentation code; writing, by the instrumentation code in the program, data to a shared memory in response to events occurring during execution of the program, wherein the data is generated during the execution of the program on the processor using the shared memory to convey the data to a set of profiling processors, wherein the writing step comprises collecting raw data by an instrumentation stub, converting the raw data into per thread data, and the per thread data is data for a particular thread, wherein the per thread data comprise metrics that are virtualized by thread, and writing the per thread data to the shared memory; and collecting, by the set of profiling processors, the data in the shared memory written by the instrumentation code.