zyan0 / perf.h

Perf header library for counting system events

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

===============================================
perf.h
-----------------------------------------------
Perf header library for counting system events
===============================================


/*
 * ---------------------------------------------------------------------------
 * * This software is in the public domain, furnished "as is", without
 * technical * support, and with no warranty, express or implied, as to its
 * usefulness for * any purpose. *
 * 
 * Example usage of perf.h
 * 
 * Author: Kostas Zoumpatianos <zoumpatianos@disi.unitn.it> *
 * -------------------------------------------------------------------------
 */

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#include <linux/perf_event.h>
#include <asm/unistd.h>
#include "perf.h"

#define EVENTC          18
#define DOUBLE_EVENTC   (EVENTC * 2)
#define EVENTVALC       (EVENTC + 1)

int
main(int argc, char **argv){
	//Number of event counters to be monitored
	int eventc = EVENTC;

	//Counters to be monitored
		int		eventv     [DOUBLE_EVENTC] = {PERF_COUNT_HW_CPU_CYCLES, PERF_TYPE_HARDWARE,
		PERF_COUNT_HW_INSTRUCTIONS, PERF_TYPE_HARDWARE,
		PERF_COUNT_HW_CACHE_REFERENCES, PERF_TYPE_HARDWARE,
		PERF_COUNT_HW_CACHE_MISSES, PERF_TYPE_HARDWARE,
		PERF_COUNT_HW_BRANCH_INSTRUCTIONS, PERF_TYPE_HARDWARE,
		PERF_COUNT_HW_BRANCH_MISSES, PERF_TYPE_HARDWARE,
		PERF_COUNT_HW_BUS_CYCLES, PERF_TYPE_HARDWARE,
		PERF_COUNT_HW_STALLED_CYCLES_FRONTEND, PERF_TYPE_HARDWARE,
		PERF_COUNT_HW_STALLED_CYCLES_BACKEND, PERF_TYPE_HARDWARE,
		PERF_COUNT_SW_CPU_CLOCK, PERF_TYPE_SOFTWARE,
		PERF_COUNT_SW_TASK_CLOCK, PERF_TYPE_SOFTWARE,
		PERF_COUNT_SW_PAGE_FAULTS, PERF_TYPE_SOFTWARE,
		PERF_COUNT_SW_CONTEXT_SWITCHES, PERF_TYPE_SOFTWARE,
		PERF_COUNT_SW_CPU_MIGRATIONS, PERF_TYPE_SOFTWARE,
		PERF_COUNT_SW_PAGE_FAULTS_MIN, PERF_TYPE_SOFTWARE,
		PERF_COUNT_SW_PAGE_FAULTS_MAJ, PERF_TYPE_SOFTWARE,
		PERF_COUNT_SW_ALIGNMENT_FAULTS, PERF_TYPE_SOFTWARE,
		PERF_COUNT_SW_EMULATION_FAULTS, PERF_TYPE_SOFTWARE
	};

	//Array where counts are going to be stored
	long long	eventval[EVENTVALC] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

	//Start measuring
		int            *fd = start_measuring(eventc, eventv);

	//Do something
		printf("Measuring counts for this printf\n");

	//Stop measuring
		stop_measuring(fd, eventc, eventval);

	//Pring values
		print_event_counts(eventc, eventval);
}

About

Perf header library for counting system events


Languages

Language:C 100.0%