-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
perf tests: Move test__open_syscall_event into separate object
Separating test__open_syscall_event test from the builtin-test into open-syscall object. Adding util object under tests directory to gather help functions common to more tests. Signed-off-by: Jiri Olsa <jolsa@redhat.com> Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1352508412-16914-3-git-send-email-jolsa@redhat.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
- Loading branch information
Jiri Olsa
authored and
Arnaldo Carvalho de Melo
committed
Nov 14, 2012
1 parent
0a4e1ae
commit d3b59a3
Showing
5 changed files
with
103 additions
and
84 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
#include "thread_map.h" | ||
#include "evsel.h" | ||
#include "debug.h" | ||
#include "tests.h" | ||
|
||
int test__open_syscall_event(void) | ||
{ | ||
int err = -1, fd; | ||
struct thread_map *threads; | ||
struct perf_evsel *evsel; | ||
struct perf_event_attr attr; | ||
unsigned int nr_open_calls = 111, i; | ||
int id = trace_event__id("sys_enter_open"); | ||
|
||
if (id < 0) { | ||
pr_debug("is debugfs mounted on /sys/kernel/debug?\n"); | ||
return -1; | ||
} | ||
|
||
threads = thread_map__new(-1, getpid(), UINT_MAX); | ||
if (threads == NULL) { | ||
pr_debug("thread_map__new\n"); | ||
return -1; | ||
} | ||
|
||
memset(&attr, 0, sizeof(attr)); | ||
attr.type = PERF_TYPE_TRACEPOINT; | ||
attr.config = id; | ||
evsel = perf_evsel__new(&attr, 0); | ||
if (evsel == NULL) { | ||
pr_debug("perf_evsel__new\n"); | ||
goto out_thread_map_delete; | ||
} | ||
|
||
if (perf_evsel__open_per_thread(evsel, threads) < 0) { | ||
pr_debug("failed to open counter: %s, " | ||
"tweak /proc/sys/kernel/perf_event_paranoid?\n", | ||
strerror(errno)); | ||
goto out_evsel_delete; | ||
} | ||
|
||
for (i = 0; i < nr_open_calls; ++i) { | ||
fd = open("/etc/passwd", O_RDONLY); | ||
close(fd); | ||
} | ||
|
||
if (perf_evsel__read_on_cpu(evsel, 0, 0) < 0) { | ||
pr_debug("perf_evsel__read_on_cpu\n"); | ||
goto out_close_fd; | ||
} | ||
|
||
if (evsel->counts->cpu[0].val != nr_open_calls) { | ||
pr_debug("perf_evsel__read_on_cpu: expected to intercept %d calls, got %" PRIu64 "\n", | ||
nr_open_calls, evsel->counts->cpu[0].val); | ||
goto out_close_fd; | ||
} | ||
|
||
err = 0; | ||
out_close_fd: | ||
perf_evsel__close_fd(evsel, 1, threads->nr); | ||
out_evsel_delete: | ||
perf_evsel__delete(evsel); | ||
out_thread_map_delete: | ||
thread_map__delete(threads); | ||
return err; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,11 @@ | ||
#ifndef TESTS_H | ||
#define TESTS_H | ||
|
||
/* Tests */ | ||
int test__vmlinux_matches_kallsyms(void); | ||
int test__open_syscall_event(void); | ||
|
||
/* Util */ | ||
int trace_event__id(const char *evname); | ||
|
||
#endif /* TESTS_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
#include <stdio.h> | ||
#include <unistd.h> | ||
#include <stdlib.h> | ||
#include <sys/types.h> | ||
#include <sys/stat.h> | ||
#include <fcntl.h> | ||
#include "tests.h" | ||
#include "debugfs.h" | ||
|
||
int trace_event__id(const char *evname) | ||
{ | ||
char *filename; | ||
int err = -1, fd; | ||
|
||
if (asprintf(&filename, | ||
"%s/syscalls/%s/id", | ||
tracing_events_path, evname) < 0) | ||
return -1; | ||
|
||
fd = open(filename, O_RDONLY); | ||
if (fd >= 0) { | ||
char id[16]; | ||
if (read(fd, id, sizeof(id)) > 0) | ||
err = atoi(id); | ||
close(fd); | ||
} | ||
|
||
free(filename); | ||
return err; | ||
} |