diff options
author | Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp> | 2009-12-13 03:01:59 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-12-14 02:51:19 -0500 |
commit | 2044279d1e07c90edd64324f09c7adf1acfc42e5 (patch) | |
tree | db95e71fb947160e778b298193dec590ba295e00 /tools | |
parent | 94c744b6c0c6c5802a85ebfebbec429ac5851f2b (diff) |
perf bench: Add "all" pseudo subsystem and "all" pseudo suite
This patch adds a new "all" pseudo subsystem and an "all" pseudo
suite. These are for testing all subsystem and its all suite, or
all suite of one subsystem.
(This patch also contains a few trivial comment fixes for
bench/* and output style fixes. I judged that there are no
necessity to make them into individual patch.)
Example of use:
| % ./perf bench sched all # Test all suites of sched subsystem
| # Running sched/messaging benchmark...
| # 20 sender and receiver processes per group
| # 10 groups == 400 processes run
|
| Total time: 0.414 [sec]
|
| # Running sched/pipe benchmark...
| # Extecuted 1000000 pipe operations between two tasks
|
| Total time: 10.999 [sec]
|
| 10.999317 usecs/op
| 90914 ops/sec
|
| % ./perf bench all # Test all suites of all subsystems
| # Running sched/messaging benchmark...
| # 20 sender and receiver processes per group
| # 10 groups == 400 processes run
|
| Total time: 0.420 [sec]
|
| # Running sched/pipe benchmark...
| # Extecuted 1000000 pipe operations between two tasks
|
| Total time: 11.741 [sec]
|
| 11.741346 usecs/op
| 85169 ops/sec
|
| # Running mem/memcpy benchmark...
| # Copying 1MB Bytes from 0x7ff33e920010 to 0x7ff3401ae010 ...
|
| 808.407437 MB/Sec
Signed-off-by: Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
LKML-Reference: <1260691319-4683-1-git-send-email-mitake@dcl.info.waseda.ac.jp>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/bench/sched-messaging.c | 2 | ||||
-rw-r--r-- | tools/perf/bench/sched-pipe.c | 5 | ||||
-rw-r--r-- | tools/perf/builtin-bench.c | 57 |
3 files changed, 57 insertions, 7 deletions
diff --git a/tools/perf/bench/sched-messaging.c b/tools/perf/bench/sched-messaging.c index 605a2a959aa8..e249eb22b43b 100644 --- a/tools/perf/bench/sched-messaging.c +++ b/tools/perf/bench/sched-messaging.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * | 2 | * |
3 | * builtin-bench-messaging.c | 3 | * sched-messaging.c |
4 | * | 4 | * |
5 | * messaging: Benchmark for scheduler and IPC mechanisms | 5 | * messaging: Benchmark for scheduler and IPC mechanisms |
6 | * | 6 | * |
diff --git a/tools/perf/bench/sched-pipe.c b/tools/perf/bench/sched-pipe.c index 238185f97977..2354f3830b1e 100644 --- a/tools/perf/bench/sched-pipe.c +++ b/tools/perf/bench/sched-pipe.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * | 2 | * |
3 | * builtin-bench-pipe.c | 3 | * sched-pipe.c |
4 | * | 4 | * |
5 | * pipe: Benchmark for pipe() | 5 | * pipe: Benchmark for pipe() |
6 | * | 6 | * |
@@ -87,7 +87,8 @@ int bench_sched_pipe(int argc, const char **argv, | |||
87 | if (pid) { | 87 | if (pid) { |
88 | retpid = waitpid(pid, &wait_stat, 0); | 88 | retpid = waitpid(pid, &wait_stat, 0); |
89 | assert((retpid == pid) && WIFEXITED(wait_stat)); | 89 | assert((retpid == pid) && WIFEXITED(wait_stat)); |
90 | return 0; | 90 | } else { |
91 | exit(0); | ||
91 | } | 92 | } |
92 | 93 | ||
93 | switch (bench_format) { | 94 | switch (bench_format) { |
diff --git a/tools/perf/builtin-bench.c b/tools/perf/builtin-bench.c index e043eb83092a..46996774e559 100644 --- a/tools/perf/builtin-bench.c +++ b/tools/perf/builtin-bench.c | |||
@@ -31,6 +31,9 @@ struct bench_suite { | |||
31 | const char *summary; | 31 | const char *summary; |
32 | int (*fn)(int, const char **, const char *); | 32 | int (*fn)(int, const char **, const char *); |
33 | }; | 33 | }; |
34 | \ | ||
35 | /* sentinel: easy for help */ | ||
36 | #define suite_all { "all", "test all suite (pseudo suite)", NULL } | ||
34 | 37 | ||
35 | static struct bench_suite sched_suites[] = { | 38 | static struct bench_suite sched_suites[] = { |
36 | { "messaging", | 39 | { "messaging", |
@@ -39,6 +42,7 @@ static struct bench_suite sched_suites[] = { | |||
39 | { "pipe", | 42 | { "pipe", |
40 | "Flood of communication over pipe() between two processes", | 43 | "Flood of communication over pipe() between two processes", |
41 | bench_sched_pipe }, | 44 | bench_sched_pipe }, |
45 | suite_all, | ||
42 | { NULL, | 46 | { NULL, |
43 | NULL, | 47 | NULL, |
44 | NULL } | 48 | NULL } |
@@ -48,6 +52,7 @@ static struct bench_suite mem_suites[] = { | |||
48 | { "memcpy", | 52 | { "memcpy", |
49 | "Simple memory copy in various ways", | 53 | "Simple memory copy in various ways", |
50 | bench_mem_memcpy }, | 54 | bench_mem_memcpy }, |
55 | suite_all, | ||
51 | { NULL, | 56 | { NULL, |
52 | NULL, | 57 | NULL, |
53 | NULL } | 58 | NULL } |
@@ -66,6 +71,9 @@ static struct bench_subsys subsystems[] = { | |||
66 | { "mem", | 71 | { "mem", |
67 | "memory access performance", | 72 | "memory access performance", |
68 | mem_suites }, | 73 | mem_suites }, |
74 | { "all", /* sentinel: easy for help */ | ||
75 | "test all subsystem (pseudo subsystem)", | ||
76 | NULL }, | ||
69 | { NULL, | 77 | { NULL, |
70 | NULL, | 78 | NULL, |
71 | NULL } | 79 | NULL } |
@@ -75,11 +83,11 @@ static void dump_suites(int subsys_index) | |||
75 | { | 83 | { |
76 | int i; | 84 | int i; |
77 | 85 | ||
78 | printf("List of available suites for %s...\n\n", | 86 | printf("# List of available suites for %s...\n\n", |
79 | subsystems[subsys_index].name); | 87 | subsystems[subsys_index].name); |
80 | 88 | ||
81 | for (i = 0; subsystems[subsys_index].suites[i].name; i++) | 89 | for (i = 0; subsystems[subsys_index].suites[i].name; i++) |
82 | printf("\t%s: %s\n", | 90 | printf("%14s: %s\n", |
83 | subsystems[subsys_index].suites[i].name, | 91 | subsystems[subsys_index].suites[i].name, |
84 | subsystems[subsys_index].suites[i].summary); | 92 | subsystems[subsys_index].suites[i].summary); |
85 | 93 | ||
@@ -110,10 +118,10 @@ static void print_usage(void) | |||
110 | printf("\t%s\n", bench_usage[i]); | 118 | printf("\t%s\n", bench_usage[i]); |
111 | printf("\n"); | 119 | printf("\n"); |
112 | 120 | ||
113 | printf("List of available subsystems...\n\n"); | 121 | printf("# List of available subsystems...\n\n"); |
114 | 122 | ||
115 | for (i = 0; subsystems[i].name; i++) | 123 | for (i = 0; subsystems[i].name; i++) |
116 | printf("\t%s: %s\n", | 124 | printf("%14s: %s\n", |
117 | subsystems[i].name, subsystems[i].summary); | 125 | subsystems[i].name, subsystems[i].summary); |
118 | printf("\n"); | 126 | printf("\n"); |
119 | } | 127 | } |
@@ -131,6 +139,37 @@ static int bench_str2int(char *str) | |||
131 | return BENCH_FORMAT_UNKNOWN; | 139 | return BENCH_FORMAT_UNKNOWN; |
132 | } | 140 | } |
133 | 141 | ||
142 | static void all_suite(struct bench_subsys *subsys) /* FROM HERE */ | ||
143 | { | ||
144 | int i; | ||
145 | const char *argv[2]; | ||
146 | struct bench_suite *suites = subsys->suites; | ||
147 | |||
148 | argv[1] = NULL; | ||
149 | /* | ||
150 | * TODO: | ||
151 | * preparing preset parameters for | ||
152 | * embedded, ordinary PC, HPC, etc... | ||
153 | * will be helpful | ||
154 | */ | ||
155 | for (i = 0; suites[i].fn; i++) { | ||
156 | printf("# Running %s/%s benchmark...\n", | ||
157 | subsys->name, | ||
158 | suites[i].name); | ||
159 | |||
160 | argv[1] = suites[i].name; | ||
161 | suites[i].fn(1, argv, NULL); | ||
162 | printf("\n"); | ||
163 | } | ||
164 | } | ||
165 | |||
166 | static void all_subsystem(void) | ||
167 | { | ||
168 | int i; | ||
169 | for (i = 0; subsystems[i].suites; i++) | ||
170 | all_suite(&subsystems[i]); | ||
171 | } | ||
172 | |||
134 | int cmd_bench(int argc, const char **argv, const char *prefix __used) | 173 | int cmd_bench(int argc, const char **argv, const char *prefix __used) |
135 | { | 174 | { |
136 | int i, j, status = 0; | 175 | int i, j, status = 0; |
@@ -155,6 +194,11 @@ int cmd_bench(int argc, const char **argv, const char *prefix __used) | |||
155 | goto end; | 194 | goto end; |
156 | } | 195 | } |
157 | 196 | ||
197 | if (!strcmp(argv[0], "all")) { | ||
198 | all_subsystem(); | ||
199 | goto end; | ||
200 | } | ||
201 | |||
158 | for (i = 0; subsystems[i].name; i++) { | 202 | for (i = 0; subsystems[i].name; i++) { |
159 | if (strcmp(subsystems[i].name, argv[0])) | 203 | if (strcmp(subsystems[i].name, argv[0])) |
160 | continue; | 204 | continue; |
@@ -165,6 +209,11 @@ int cmd_bench(int argc, const char **argv, const char *prefix __used) | |||
165 | goto end; | 209 | goto end; |
166 | } | 210 | } |
167 | 211 | ||
212 | if (!strcmp(argv[1], "all")) { | ||
213 | all_suite(&subsystems[i]); | ||
214 | goto end; | ||
215 | } | ||
216 | |||
168 | for (j = 0; subsystems[i].suites[j].name; j++) { | 217 | for (j = 0; subsystems[i].suites[j].name; j++) { |
169 | if (strcmp(subsystems[i].suites[j].name, argv[1])) | 218 | if (strcmp(subsystems[i].suites[j].name, argv[1])) |
170 | continue; | 219 | continue; |