@ -96,6 +96,10 @@ static u64 walltime_nsecs_noise;
static u64 runtime_cycles_avg ;
static u64 runtime_cycles_noise ;
# define MATCH_EVENT(t, c, counter) \
( attrs [ counter ] . type = = PERF_TYPE_ # # t & & \
attrs [ counter ] . config = = PERF_COUNT_ # # c )
# define ERR_PERF_OPEN \
" Error: counter %d, sys_perf_counter_open() syscall returned with %d (%s) \n "
@ -133,13 +137,8 @@ static void create_perf_stat_counter(int counter, int pid)
*/
static inline int nsec_counter ( int counter )
{
if ( attrs [ counter ] . type ! = PERF_TYPE_SOFTWARE )
return 0 ;
if ( attrs [ counter ] . config = = PERF_COUNT_SW_CPU_CLOCK )
return 1 ;
if ( attrs [ counter ] . config = = PERF_COUNT_SW_TASK_CLOCK )
if ( MATCH_EVENT ( SOFTWARE , SW_CPU_CLOCK , counter ) | |
MATCH_EVENT ( SOFTWARE , SW_TASK_CLOCK , counter ) )
return 1 ;
return 0 ;
@ -194,11 +193,9 @@ static void read_counter(int counter)
/*
* Save the full runtime - to allow normalization during printout :
*/
if ( attrs [ counter ] . type = = PERF_TYPE_SOFTWARE & &
attrs [ counter ] . config = = PERF_COUNT_SW_TASK_CLOCK )
if ( MATCH_EVENT ( SOFTWARE , SW_TASK_CLOCK , counter ) )
runtime_nsecs [ run_idx ] = count [ 0 ] ;
if ( attrs [ counter ] . type = = PERF_TYPE_HARDWARE & &
attrs [ counter ] . config = = PERF_COUNT_HW_CPU_CYCLES )
if ( MATCH_EVENT ( HARDWARE , HW_CPU_CYCLES , counter ) )
runtime_cycles [ run_idx ] = count [ 0 ] ;
}
@ -292,9 +289,7 @@ static void nsec_printout(int counter, u64 *count, u64 *noise)
fprintf ( stderr , " %14.6f %-24s " , msecs , event_name ( counter ) ) ;
if ( attrs [ counter ] . type = = PERF_TYPE_SOFTWARE & &
attrs [ counter ] . config = = PERF_COUNT_SW_TASK_CLOCK ) {
if ( MATCH_EVENT ( SOFTWARE , SW_TASK_CLOCK , counter ) ) {
if ( walltime_nsecs_avg )
fprintf ( stderr , " # %10.3f CPUs " ,
( double ) count [ 0 ] / ( double ) walltime_nsecs_avg ) ;
@ -307,9 +302,7 @@ static void abs_printout(int counter, u64 *count, u64 *noise)
fprintf ( stderr , " %14Ld %-24s " , count [ 0 ] , event_name ( counter ) ) ;
if ( runtime_cycles_avg & &
attrs [ counter ] . type = = PERF_TYPE_HARDWARE & &
attrs [ counter ] . config = = PERF_COUNT_HW_INSTRUCTIONS ) {
MATCH_EVENT ( HARDWARE , HW_INSTRUCTIONS , counter ) ) {
fprintf ( stderr , " # %10.3f IPC " ,
( double ) count [ 0 ] / ( double ) runtime_cycles_avg ) ;
} else {