-
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 bench: Add builtin-bench.c: General framework for benchmark suites
This patch adds builtin-bench.c builtin-bench.c is a general framework for benchmark suites. Signed-off-by: Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp> Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Mike Galbraith <efault@gmx.de> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: fweisbec@gmail.com Cc: Jiri Kosina <jkosina@suse.cz> LKML-Reference: <1257381097-4743-5-git-send-email-mitake@dcl.info.waseda.ac.jp> Signed-off-by: Ingo Molnar <mingo@elte.hu>
- Loading branch information
Hitoshi Mitake
authored and
Ingo Molnar
committed
Nov 8, 2009
1 parent
c7d9300
commit 629cc35
Showing
1 changed file
with
128 additions
and
0 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
/* | ||
* | ||
* builtin-bench.c | ||
* | ||
* General benchmarking subsystem provided by perf | ||
* | ||
* Copyright (C) 2009, Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp> | ||
* | ||
*/ | ||
|
||
/* | ||
* | ||
* Available subsystem list: | ||
* sched ... scheduler and IPC mechanism | ||
* | ||
*/ | ||
|
||
#include "perf.h" | ||
#include "util/util.h" | ||
#include "util/parse-options.h" | ||
#include "builtin.h" | ||
#include "bench/bench.h" | ||
|
||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <string.h> | ||
|
||
struct bench_suite { | ||
const char *name; | ||
const char *summary; | ||
int (*fn)(int, const char **, const char *); | ||
}; | ||
|
||
static struct bench_suite sched_suites[] = { | ||
{ "messaging", | ||
"Benchmark for scheduler and IPC mechanisms", | ||
bench_sched_messaging }, | ||
{ "pipe", | ||
"Flood of communication over pipe() between two processes", | ||
bench_sched_pipe }, | ||
{ NULL, | ||
NULL, | ||
NULL } | ||
}; | ||
|
||
struct bench_subsys { | ||
const char *name; | ||
const char *summary; | ||
struct bench_suite *suites; | ||
}; | ||
|
||
static struct bench_subsys subsystems[] = { | ||
{ "sched", | ||
"scheduler and IPC mechanism", | ||
sched_suites }, | ||
{ NULL, | ||
NULL, | ||
NULL } | ||
}; | ||
|
||
static void dump_suites(int subsys_index) | ||
{ | ||
int i; | ||
|
||
printf("List of available suites for %s...\n\n", | ||
subsystems[subsys_index].name); | ||
|
||
for (i = 0; subsystems[subsys_index].suites[i].name; i++) | ||
printf("\t%s: %s\n", | ||
subsystems[subsys_index].suites[i].name, | ||
subsystems[subsys_index].suites[i].summary); | ||
|
||
printf("\n"); | ||
return; | ||
} | ||
|
||
int cmd_bench(int argc, const char **argv, const char *prefix __used) | ||
{ | ||
int i, j, status = 0; | ||
|
||
if (argc < 2) { | ||
/* No subsystem specified. */ | ||
printf("Usage: perf bench <subsystem> <suite> [<options>]\n\n"); | ||
printf("List of available subsystems...\n\n"); | ||
|
||
for (i = 0; subsystems[i].name; i++) | ||
printf("\t%s: %s\n", | ||
subsystems[i].name, subsystems[i].summary); | ||
printf("\n"); | ||
|
||
goto end; | ||
} | ||
|
||
for (i = 0; subsystems[i].name; i++) { | ||
if (strcmp(subsystems[i].name, argv[1])) | ||
continue; | ||
|
||
if (argc < 3) { | ||
/* No suite specified. */ | ||
dump_suites(i); | ||
goto end; | ||
} | ||
|
||
for (j = 0; subsystems[i].suites[j].name; j++) { | ||
if (strcmp(subsystems[i].suites[j].name, argv[2])) | ||
continue; | ||
|
||
status = subsystems[i].suites[j].fn(argc - 2, | ||
argv + 2, prefix); | ||
goto end; | ||
} | ||
|
||
if (!strcmp(argv[2], "-h") || !strcmp(argv[2], "--help")) { | ||
dump_suites(i); | ||
goto end; | ||
} | ||
|
||
printf("Unknown suite:%s for %s\n", argv[2], argv[1]); | ||
status = 1; | ||
goto end; | ||
} | ||
|
||
printf("Unknown subsystem:%s\n", argv[1]); | ||
status = 1; | ||
|
||
end: | ||
return status; | ||
} |