From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756752AbZKCEj2 (ORCPT ); Mon, 2 Nov 2009 23:39:28 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756460AbZKCEj1 (ORCPT ); Mon, 2 Nov 2009 23:39:27 -0500 Received: from ns.dcl.info.waseda.ac.jp ([133.9.216.194]:60312 "EHLO ns.dcl.info.waseda.ac.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756263AbZKCEj0 (ORCPT ); Mon, 2 Nov 2009 23:39:26 -0500 Date: Tue, 03 Nov 2009 13:39:27 +0900 (JST) Message-Id: <20091103.133927.580735811043340004.mitake@dcl.info.waseda.ac.jp> To: Ingo Molnar Cc: linux-kernel@vger.kernel.org, Rusty Russell , Thomas Gleixner , Peter Zijlstra , Mike Galbraith , Arnaldo Carvalho de Melo , =?iso-8859-1?Q?Fr=E9d=E9ric=5FWeisbecker?= Subject: [RFC][PATCH 7/7] Adding general performance benchmarking subsystem to perf. From: Hitoshi Mitake X-Mailer: Mew version 5.2 on Emacs 22.2 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Adding general performance benchmarking subsystem to perf. This patch adds builtin-bench-pipe.c builtin-bench-pipe.c is a benchmark program to measure performance of pipe() system call. This benchmark is based on pipe-test-1m.c by Ingo Molnar. http://people.redhat.com/mingo/cfs-scheduler/tools/pipe-test-1m.c Signed-off-by: Hitoshi Mitake Cc: Rusty Russell Cc: Thomas Gleixner Cc: Peter Zijlstra Cc: Mike Galbraith --- tools/perf/builtin-bench-pipe.c | 89 +++++++++++++++++++++++++++++++++++++++ 1 files changed, 89 insertions(+), 0 deletions(-) create mode 100644 tools/perf/builtin-bench-pipe.c diff --git a/tools/perf/builtin-bench-pipe.c b/tools/perf/builtin-bench-pipe.c new file mode 100644 index 0000000..081515e --- /dev/null +++ b/tools/perf/builtin-bench-pipe.c @@ -0,0 +1,89 @@ +/* + * + * builtin-bench-pipe.c + * + * pipe: Benchmark for pipe() + * + * Based on pipe-test-1m.c by Ingo Molnar + * http://people.redhat.com/mingo/cfs-scheduler/tools/pipe-test-1m.c + * Ported to perf by Hitoshi Mitake + * + */ + +#include "perf.h" +#include "util/util.h" +#include "util/parse-options.h" +#include "builtin.h" +#include "bench-suite.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define LOOPS_DEFAULT 1000000 +static int loops = LOOPS_DEFAULT; + +static const struct option options[] = { + OPT_INTEGER('l', "loop", &loops, + "Specify number of loops"), + OPT_END() +}; + +static const char * const bench_sched_pipe_usage[] = { + "perf bench sched pipe ", + NULL +}; + +int bench_sched_pipe(int argc, const char **argv, + const char *prefix __used) +{ + int pipe_1[2], pipe_2[2]; + int m = 0, i; + struct timeval start, stop, diff; + + /* + * why does "ret" exists? + * discarding returned value of read(), write() + * causes error in building environment for perf + */ + int ret; + pid_t pid; + + argc = parse_options(argc, argv, options, + bench_sched_pipe_usage, 0); + + assert(!pipe(pipe_1)); + assert(!pipe(pipe_2)); + + pid = fork(); + assert(pid >= 0); + + gettimeofday(&start, NULL); + + if (!pid) { + for (i = 0; i < loops; i++) { + ret = read(pipe_1[0], &m, sizeof(int)); + ret = write(pipe_2[1], &m, sizeof(int)); + } + } else if (pid > 0) { + for (i = 0; i < loops; i++) { + ret = write(pipe_1[1], &m, sizeof(int)); + ret = read(pipe_2[0], &m, sizeof(int)); + } + } + + gettimeofday(&stop, NULL); + timersub(&stop, &start, &diff); + if (!pid) + printf("%lu.%03lu\n", + diff.tv_sec, diff.tv_usec/1000); + + return 0; +} -- 1.5.6.5