Skip to content

Commit d3b59a3

Browse files
Jiri Olsaacmel
authored andcommitted
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 <[email protected]> Cc: Corey Ashford <[email protected]> Cc: Frederic Weisbecker <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Paul Mackerras <[email protected]> Cc: Peter Zijlstra <[email protected]> Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
1 parent 0a4e1ae commit d3b59a3

File tree

5 files changed

+103
-84
lines changed

5 files changed

+103
-84
lines changed

tools/perf/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,8 @@ LIB_OBJS += $(OUTPUT)tests/parse-events.o
432432
LIB_OBJS += $(OUTPUT)tests/dso-data.o
433433
LIB_OBJS += $(OUTPUT)tests/attr.o
434434
LIB_OBJS += $(OUTPUT)tests/vmlinux-kallsyms.o
435+
LIB_OBJS += $(OUTPUT)tests/open-syscall.o
436+
LIB_OBJS += $(OUTPUT)tests/util.o
435437

436438
BUILTIN_OBJS += $(OUTPUT)builtin-annotate.o
437439
BUILTIN_OBJS += $(OUTPUT)builtin-bench.o

tools/perf/tests/builtin-test.c

Lines changed: 0 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -27,90 +27,6 @@
2727

2828
#include "tests.h"
2929

30-
static int trace_event__id(const char *evname)
31-
{
32-
char *filename;
33-
int err = -1, fd;
34-
35-
if (asprintf(&filename,
36-
"%s/syscalls/%s/id",
37-
tracing_events_path, evname) < 0)
38-
return -1;
39-
40-
fd = open(filename, O_RDONLY);
41-
if (fd >= 0) {
42-
char id[16];
43-
if (read(fd, id, sizeof(id)) > 0)
44-
err = atoi(id);
45-
close(fd);
46-
}
47-
48-
free(filename);
49-
return err;
50-
}
51-
52-
static int test__open_syscall_event(void)
53-
{
54-
int err = -1, fd;
55-
struct thread_map *threads;
56-
struct perf_evsel *evsel;
57-
struct perf_event_attr attr;
58-
unsigned int nr_open_calls = 111, i;
59-
int id = trace_event__id("sys_enter_open");
60-
61-
if (id < 0) {
62-
pr_debug("is debugfs mounted on /sys/kernel/debug?\n");
63-
return -1;
64-
}
65-
66-
threads = thread_map__new(-1, getpid(), UINT_MAX);
67-
if (threads == NULL) {
68-
pr_debug("thread_map__new\n");
69-
return -1;
70-
}
71-
72-
memset(&attr, 0, sizeof(attr));
73-
attr.type = PERF_TYPE_TRACEPOINT;
74-
attr.config = id;
75-
evsel = perf_evsel__new(&attr, 0);
76-
if (evsel == NULL) {
77-
pr_debug("perf_evsel__new\n");
78-
goto out_thread_map_delete;
79-
}
80-
81-
if (perf_evsel__open_per_thread(evsel, threads) < 0) {
82-
pr_debug("failed to open counter: %s, "
83-
"tweak /proc/sys/kernel/perf_event_paranoid?\n",
84-
strerror(errno));
85-
goto out_evsel_delete;
86-
}
87-
88-
for (i = 0; i < nr_open_calls; ++i) {
89-
fd = open("/etc/passwd", O_RDONLY);
90-
close(fd);
91-
}
92-
93-
if (perf_evsel__read_on_cpu(evsel, 0, 0) < 0) {
94-
pr_debug("perf_evsel__read_on_cpu\n");
95-
goto out_close_fd;
96-
}
97-
98-
if (evsel->counts->cpu[0].val != nr_open_calls) {
99-
pr_debug("perf_evsel__read_on_cpu: expected to intercept %d calls, got %" PRIu64 "\n",
100-
nr_open_calls, evsel->counts->cpu[0].val);
101-
goto out_close_fd;
102-
}
103-
104-
err = 0;
105-
out_close_fd:
106-
perf_evsel__close_fd(evsel, 1, threads->nr);
107-
out_evsel_delete:
108-
perf_evsel__delete(evsel);
109-
out_thread_map_delete:
110-
thread_map__delete(threads);
111-
return err;
112-
}
113-
11430
#include <sched.h>
11531

11632
static int test__open_syscall_event_on_all_cpus(void)

tools/perf/tests/open-syscall.c

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#include "thread_map.h"
2+
#include "evsel.h"
3+
#include "debug.h"
4+
#include "tests.h"
5+
6+
int test__open_syscall_event(void)
7+
{
8+
int err = -1, fd;
9+
struct thread_map *threads;
10+
struct perf_evsel *evsel;
11+
struct perf_event_attr attr;
12+
unsigned int nr_open_calls = 111, i;
13+
int id = trace_event__id("sys_enter_open");
14+
15+
if (id < 0) {
16+
pr_debug("is debugfs mounted on /sys/kernel/debug?\n");
17+
return -1;
18+
}
19+
20+
threads = thread_map__new(-1, getpid(), UINT_MAX);
21+
if (threads == NULL) {
22+
pr_debug("thread_map__new\n");
23+
return -1;
24+
}
25+
26+
memset(&attr, 0, sizeof(attr));
27+
attr.type = PERF_TYPE_TRACEPOINT;
28+
attr.config = id;
29+
evsel = perf_evsel__new(&attr, 0);
30+
if (evsel == NULL) {
31+
pr_debug("perf_evsel__new\n");
32+
goto out_thread_map_delete;
33+
}
34+
35+
if (perf_evsel__open_per_thread(evsel, threads) < 0) {
36+
pr_debug("failed to open counter: %s, "
37+
"tweak /proc/sys/kernel/perf_event_paranoid?\n",
38+
strerror(errno));
39+
goto out_evsel_delete;
40+
}
41+
42+
for (i = 0; i < nr_open_calls; ++i) {
43+
fd = open("/etc/passwd", O_RDONLY);
44+
close(fd);
45+
}
46+
47+
if (perf_evsel__read_on_cpu(evsel, 0, 0) < 0) {
48+
pr_debug("perf_evsel__read_on_cpu\n");
49+
goto out_close_fd;
50+
}
51+
52+
if (evsel->counts->cpu[0].val != nr_open_calls) {
53+
pr_debug("perf_evsel__read_on_cpu: expected to intercept %d calls, got %" PRIu64 "\n",
54+
nr_open_calls, evsel->counts->cpu[0].val);
55+
goto out_close_fd;
56+
}
57+
58+
err = 0;
59+
out_close_fd:
60+
perf_evsel__close_fd(evsel, 1, threads->nr);
61+
out_evsel_delete:
62+
perf_evsel__delete(evsel);
63+
out_thread_map_delete:
64+
thread_map__delete(threads);
65+
return err;
66+
}

tools/perf/tests/tests.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
#ifndef TESTS_H
22
#define TESTS_H
33

4+
/* Tests */
45
int test__vmlinux_matches_kallsyms(void);
6+
int test__open_syscall_event(void);
7+
8+
/* Util */
9+
int trace_event__id(const char *evname);
510

611
#endif /* TESTS_H */

tools/perf/tests/util.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#include <stdio.h>
2+
#include <unistd.h>
3+
#include <stdlib.h>
4+
#include <sys/types.h>
5+
#include <sys/stat.h>
6+
#include <fcntl.h>
7+
#include "tests.h"
8+
#include "debugfs.h"
9+
10+
int trace_event__id(const char *evname)
11+
{
12+
char *filename;
13+
int err = -1, fd;
14+
15+
if (asprintf(&filename,
16+
"%s/syscalls/%s/id",
17+
tracing_events_path, evname) < 0)
18+
return -1;
19+
20+
fd = open(filename, O_RDONLY);
21+
if (fd >= 0) {
22+
char id[16];
23+
if (read(fd, id, sizeof(id)) > 0)
24+
err = atoi(id);
25+
close(fd);
26+
}
27+
28+
free(filename);
29+
return err;
30+
}

0 commit comments

Comments
 (0)