diff options
author | Michael Olbrich <m.olbrich@pengutronix.de> | 2015-12-10 11:19:23 +0100 |
---|---|---|
committer | Michael Olbrich <m.olbrich@pengutronix.de> | 2015-12-10 11:22:02 +0100 |
commit | 40edce6ea991d21839d65667860b43e3eafcbe19 (patch) | |
tree | a0f67c1bd18b9359aa4deb5dcbe89d860eb6ce94 /patches | |
parent | ae33756d3909fdc1a17d950289c269f55c3b5b94 (diff) | |
download | ptxdist-40edce6ea991d21839d65667860b43e3eafcbe19.tar.gz ptxdist-40edce6ea991d21839d65667860b43e3eafcbe19.tar.xz |
cbenchsuite: version bump 1.0 -> 1.1
Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
Diffstat (limited to 'patches')
4 files changed, 0 insertions, 655 deletions
diff --git a/patches/cbenchsuite-1.0/0001-module_manager-Fix-directory-detection.patch b/patches/cbenchsuite-1.0/0001-module_manager-Fix-directory-detection.patch deleted file mode 100644 index 9031399c4..000000000 --- a/patches/cbenchsuite-1.0/0001-module_manager-Fix-directory-detection.patch +++ /dev/null @@ -1,55 +0,0 @@ -From: Markus Pargmann <mpa@devmp.org> -Date: Wed, 3 Jun 2015 11:06:02 +0200 -Subject: [PATCH] module_manager: Fix directory detection - -d_type may be incorrect. Use fstatat as fallback. - -Signed-off-by: Markus Pargmann <mpa@devmp.org> ---- - src/core/module_manager.c | 23 ++++++++++++++++++++++- - 1 file changed, 22 insertions(+), 1 deletion(-) - -diff --git a/src/core/module_manager.c b/src/core/module_manager.c -index 77931ce97727..3f30042d22f1 100644 ---- a/src/core/module_manager.c -+++ b/src/core/module_manager.c -@@ -27,6 +27,7 @@ - #include <stdlib.h> - #include <string.h> - #include <sys/types.h> -+#include <sys/stat.h> - - #include <klib/list.h> - #include <klib/printk.h> -@@ -191,10 +192,30 @@ int mod_mgr_init(struct mod_mgr *mm, const char *mod_dir) - } - - while ((de = readdir(md))) { -- if (de->d_type != DT_DIR) { -+ struct stat st; -+ int ret; -+ -+ if (de->d_type != DT_UNKNOWN && de->d_type != DT_DIR) { - printk(KERN_DEBUG "%s is no directory, continuing\n", - de->d_name); - continue; -+ } else if (de->d_type == DT_UNKNOWN) { -+ /* -+ * d_type may not be available on a filesystem, check -+ * again with fstatat -+ */ -+ ret = fstatat(dirfd(md), de->d_name, &st, 0); -+ if (ret) { -+ printk(KERN_ERR "Failed to stat %s\n", -+ de->d_name); -+ return ret; -+ } -+ -+ if (!S_ISDIR(st.st_mode)) { -+ printk(KERN_DEBUG "%s is no directory, continuing\n", -+ de->d_name); -+ continue; -+ } - } - if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) - continue; diff --git a/patches/cbenchsuite-1.0/0002-module_manager-Ignore-hidden-directories-as-well.patch b/patches/cbenchsuite-1.0/0002-module_manager-Ignore-hidden-directories-as-well.patch deleted file mode 100644 index 6765f8fcd..000000000 --- a/patches/cbenchsuite-1.0/0002-module_manager-Ignore-hidden-directories-as-well.patch +++ /dev/null @@ -1,24 +0,0 @@ -From: Markus Pargmann <mpa@devmp.org> -Date: Wed, 3 Jun 2015 11:06:54 +0200 -Subject: [PATCH] module_manager: Ignore hidden directories as well - -Signed-off-by: Markus Pargmann <mpa@devmp.org> ---- - src/core/module_manager.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/core/module_manager.c b/src/core/module_manager.c -index 3f30042d22f1..2ced58c37ed1 100644 ---- a/src/core/module_manager.c -+++ b/src/core/module_manager.c -@@ -217,7 +217,9 @@ int mod_mgr_init(struct mod_mgr *mm, const char *mod_dir) - continue; - } - } -- if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) -+ -+ /* Ignore fake directories and hidden files */ -+ if (de->d_name[0] == '.') - continue; - - mod = module_create(de->d_name, mod_dir); diff --git a/patches/cbenchsuite-1.0/0003-use-hackbench-from-rt-tests.patch b/patches/cbenchsuite-1.0/0003-use-hackbench-from-rt-tests.patch deleted file mode 100644 index b1c675801..000000000 --- a/patches/cbenchsuite-1.0/0003-use-hackbench-from-rt-tests.patch +++ /dev/null @@ -1,570 +0,0 @@ -From: Michael Olbrich <m.olbrich@pengutronix.de> -Date: Wed, 3 Jun 2015 20:11:09 +0200 -Subject: [PATCH] use hackbench from rt-tests - -Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de> ---- - modules/linux_perf/CMakeLists.txt | 6 - - modules/linux_perf/hackbench.c | 381 ------------------------------------ - modules/linux_perf/perf_hackbench.c | 70 ++++++- - 3 files changed, 60 insertions(+), 397 deletions(-) - delete mode 100644 modules/linux_perf/hackbench.c - -diff --git a/modules/linux_perf/CMakeLists.txt b/modules/linux_perf/CMakeLists.txt -index f179527df315..8b50cd51a8e5 100644 ---- a/modules/linux_perf/CMakeLists.txt -+++ b/modules/linux_perf/CMakeLists.txt -@@ -3,9 +3,3 @@ cbench_module(linux_perf - perf_hackbench.c - sched-pipe.c - ) -- --find_package(Threads) --add_executable(hackbench hackbench.c) --target_link_libraries(hackbench ${CMAKE_THREAD_LIBS_INIT}) -- --install(TARGETS hackbench DESTINATION lib/cbenchsuite/linux_perf) -diff --git a/modules/linux_perf/hackbench.c b/modules/linux_perf/hackbench.c -deleted file mode 100644 -index 1636999403cd..000000000000 ---- a/modules/linux_perf/hackbench.c -+++ /dev/null -@@ -1,381 +0,0 @@ -- --/* -- * This is the latest version of hackbench.c, that tests scheduler and -- * unix-socket (or pipe) performance. -- * -- * Usage: hackbench [-pipe] <num groups> [process|thread] [loops] -- * -- * Build it with: -- * gcc -g -Wall -O2 -o hackbench hackbench.c -lpthread -- */ --#if 0 -- --Date: Fri, 04 Jan 2008 14:06:26 +0800 --From: "Zhang, Yanmin" <yanmin_zhang@linux.intel.com> --To: LKML <linux-kernel@vger.kernel.org> --Subject: Improve hackbench --Cc: Ingo Molnar <mingo@elte.hu>, Arjan van de Ven <arjan@infradead.org> -- --hackbench tests the Linux scheduler. The original program is at --http://devresources.linux-foundation.org/craiger/hackbench/src/hackbench.c --Based on this multi-process version, a nice person created a multi-thread --version. Pls. see --http://www.bullopensource.org/posix/pi-futex/hackbench_pth.c -- --When I integrated them into my automation testing system, I found --a couple of issues and did some improvements. -- --1) Merge hackbench: I integrated hackbench_pth.c into hackbench and added a --new parameter which can be used to choose process mode or thread mode. The --default mode is process. -- --2) It runs too fast and ends in a couple of seconds. Sometimes its too hard to debug --the issues. On my ia64 Montecito machines, the result looks weird when comparing --process mode and thread mode. --I want a stable result and hope the testing could run for a stable longer time, so I --might use performance tools to debug issues. --I added another new parameter,`loops`, which can be used to change variable loops, --so more messages will be passed from writers to receivers. Parameter 'loops' is equal to --100 by default. -- --For example on my 8-core x86_64: --[ymzhang@lkp-st01-x8664 hackbench]$ uname -a --Linux lkp-st01-x8664 2.6.24-rc6 #1 SMP Fri Dec 21 08:32:31 CST 2007 x86_64 x86_64 x86_64 GNU/Linux --[ymzhang@lkp-st01-x8664 hackbench]$ ./hackbench --Usage: hackbench [-pipe] <num groups> [process|thread] [loops] --[ymzhang@lkp-st01-x8664 hackbench]$ ./hackbench 150 process 1000 --Time: 151.533 --[ymzhang@lkp-st01-x8664 hackbench]$ ./hackbench 150 thread 1000 --Time: 153.666 -- -- --With the same new parameters, I did captured the SLUB issue discussed on LKML recently. -- --3) hackbench_pth.c will fail on ia64 machine because pthread_attr_setstacksize always --fails if the stack size is less than 196*1024. I moved this statement within a __ia64__ check. -- -- --This new program could be compiled with command line: --#gcc -g -Wall -o hackbench hackbench.c -lpthread -- -- --Thank Ingo for his great comments! -- ---yanmin -- ----- -- --* Nathan Lynch <ntl@pobox.com> wrote: -- --> Here is a fixlet for the hackbench program found at --> --> http://people.redhat.com/mingo/cfs-scheduler/tools/hackbench.c --> --> When redirecting hackbench output I am seeing multiple copies of the --> "Running with %d*40 (== %d) tasks" line. Need to flush the buffered --> output before forking. -- --#endif -- --/* Test groups of 20 processes spraying to 20 receivers */ --#include <pthread.h> --#include <stdio.h> --#include <stdlib.h> --#include <string.h> --#include <errno.h> --#include <unistd.h> --#include <sys/types.h> --#include <sys/socket.h> --#include <sys/wait.h> --#include <sys/time.h> --#include <sys/poll.h> --#include <limits.h> -- --#define DATASIZE 100 --static unsigned int loops = 100; --/* -- * 0 means thread mode and others mean process (default) -- */ --static unsigned int process_mode = 1; -- --static int use_pipes = 0; -- --struct sender_context { -- unsigned int num_fds; -- int ready_out; -- int wakefd; -- int out_fds[0]; --}; -- --struct receiver_context { -- unsigned int num_packets; -- int in_fds[2]; -- int ready_out; -- int wakefd; --}; -- -- --static void barf(const char *msg) --{ -- fprintf(stderr, "%s (error: %s)\n", msg, strerror(errno)); -- exit(1); --} -- --static void print_usage_exit() --{ -- printf("Usage: hackbench [-pipe] <num groups> [process|thread] [loops]\n"); -- exit(1); --} -- --static void fdpair(int fds[2]) --{ -- if (use_pipes) { -- if (pipe(fds) == 0) -- return; -- } else { -- if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) == 0) -- return; -- } -- barf("Creating fdpair"); --} -- --/* Block until we're ready to go */ --static void ready(int ready_out, int wakefd) --{ -- char dummy; -- struct pollfd pollfd = { .fd = wakefd, .events = POLLIN }; -- -- /* Tell them we're ready. */ -- if (write(ready_out, &dummy, 1) != 1) -- barf("CLIENT: ready write"); -- -- /* Wait for "GO" signal */ -- if (poll(&pollfd, 1, -1) != 1) -- barf("poll"); --} -- --/* Sender sprays loops messages down each file descriptor */ --static void *sender(struct sender_context *ctx) --{ -- char data[DATASIZE]; -- unsigned int i, j; -- -- ready(ctx->ready_out, ctx->wakefd); -- -- /* Now pump to every receiver. */ -- for (i = 0; i < loops; i++) { -- for (j = 0; j < ctx->num_fds; j++) { -- int ret, done = 0; -- --again: -- ret = write(ctx->out_fds[j], data + done, sizeof(data)-done); -- if (ret < 0) -- barf("SENDER: write"); -- done += ret; -- if (done < sizeof(data)) -- goto again; -- } -- } -- -- return NULL; --} -- -- --/* One receiver per fd */ --static void *receiver(struct receiver_context* ctx) --{ -- unsigned int i; -- -- if (process_mode) -- close(ctx->in_fds[1]); -- -- /* Wait for start... */ -- ready(ctx->ready_out, ctx->wakefd); -- -- /* Receive them all */ -- for (i = 0; i < ctx->num_packets; i++) { -- char data[DATASIZE]; -- int ret, done = 0; -- --again: -- ret = read(ctx->in_fds[0], data + done, DATASIZE - done); -- if (ret < 0) -- barf("SERVER: read"); -- done += ret; -- if (done < DATASIZE) -- goto again; -- } -- -- return NULL; --} -- --pthread_t create_worker(void *ctx, void *(*func)(void *)) --{ -- pthread_attr_t attr; -- pthread_t childid; -- int err; -- -- if (process_mode) { -- /* process mode */ -- /* Fork the receiver. */ -- switch (fork()) { -- case -1: barf("fork()"); -- case 0: -- (*func) (ctx); -- exit(0); -- } -- -- return (pthread_t) 0; -- } -- -- if (pthread_attr_init(&attr) != 0) -- barf("pthread_attr_init:"); -- --#ifndef __ia64__ -- if (pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN) != 0) -- barf("pthread_attr_setstacksize"); --#endif -- -- if ((err=pthread_create(&childid, &attr, func, ctx)) != 0) { -- fprintf(stderr, "pthread_create failed: %s (%d)\n", strerror(err), err); -- exit(-1); -- } -- return (childid); --} -- --void reap_worker(pthread_t id) --{ -- int status; -- -- if (process_mode) { -- /* process mode */ -- wait(&status); -- if (!WIFEXITED(status)) -- exit(1); -- } else { -- void *status; -- -- pthread_join(id, &status); -- } --} -- --/* One group of senders and receivers */ --static unsigned int group(pthread_t *pth, -- unsigned int num_fds, -- int ready_out, -- int wakefd) --{ -- unsigned int i; -- struct sender_context* snd_ctx = malloc (sizeof(struct sender_context) -- +num_fds*sizeof(int)); -- -- for (i = 0; i < num_fds; i++) { -- int fds[2]; -- struct receiver_context* ctx = malloc (sizeof(*ctx)); -- -- if (!ctx) -- barf("malloc()"); -- -- -- /* Create the pipe between client and server */ -- fdpair(fds); -- -- ctx->num_packets = num_fds*loops; -- ctx->in_fds[0] = fds[0]; -- ctx->in_fds[1] = fds[1]; -- ctx->ready_out = ready_out; -- ctx->wakefd = wakefd; -- -- pth[i] = create_worker(ctx, (void *)(void *)receiver); -- -- snd_ctx->out_fds[i] = fds[1]; -- if (process_mode) -- close(fds[0]); -- } -- -- /* Now we have all the fds, fork the senders */ -- for (i = 0; i < num_fds; i++) { -- snd_ctx->ready_out = ready_out; -- snd_ctx->wakefd = wakefd; -- snd_ctx->num_fds = num_fds; -- -- pth[num_fds+i] = create_worker(snd_ctx, (void *)(void *)sender); -- } -- -- /* Close the fds we have left */ -- if (process_mode) -- for (i = 0; i < num_fds; i++) -- close(snd_ctx->out_fds[i]); -- -- /* Return number of children to reap */ -- return num_fds * 2; --} -- --int main(int argc, char *argv[]) --{ -- unsigned int i, num_groups = 10, total_children; -- struct timeval start, stop, diff; -- unsigned int num_fds = 20; -- int readyfds[2], wakefds[2]; -- char dummy; -- pthread_t *pth_tab; -- -- if (argv[1] && strcmp(argv[1], "-pipe") == 0) { -- use_pipes = 1; -- argc--; -- argv++; -- } -- -- if (argc >= 2 && (num_groups = atoi(argv[1])) == 0) -- print_usage_exit(); -- -- fflush(NULL); -- -- if (argc > 2) { -- if ( !strcmp(argv[2], "process") ) -- process_mode = 1; -- else if ( !strcmp(argv[2], "thread") ) -- process_mode = 0; -- else -- print_usage_exit(); -- } -- -- if (argc > 3) -- loops = atoi(argv[3]); -- -- pth_tab = malloc(num_fds * 2 * num_groups * sizeof(pthread_t)); -- -- if (!pth_tab) -- barf("main:malloc()"); -- -- fdpair(readyfds); -- fdpair(wakefds); -- -- total_children = 0; -- for (i = 0; i < num_groups; i++) -- total_children += group(pth_tab+total_children, num_fds, readyfds[1], wakefds[0]); -- -- /* Wait for everyone to be ready */ -- for (i = 0; i < total_children; i++) -- if (read(readyfds[0], &dummy, 1) != 1) -- barf("Reading for readyfds"); -- -- gettimeofday(&start, NULL); -- -- /* Kick them off */ -- if (write(wakefds[1], &dummy, 1) != 1) -- barf("Writing to start them"); -- -- /* Reap them all */ -- for (i = 0; i < total_children; i++) -- reap_worker(pth_tab[i]); -- -- gettimeofday(&stop, NULL); -- -- /* Print time... */ -- timersub(&stop, &start, &diff); -- printf("%lu.%03lu\n", diff.tv_sec, diff.tv_usec/1000); -- exit(0); --} -- -- -diff --git a/modules/linux_perf/perf_hackbench.c b/modules/linux_perf/perf_hackbench.c -index e289694c518c..1143caccdd0d 100644 ---- a/modules/linux_perf/perf_hackbench.c -+++ b/modules/linux_perf/perf_hackbench.c -@@ -3,21 +3,33 @@ - - #include <cbench/option.h> - #include <cbench/plugin_id_helper.h> -+#include <cbench/requirement.h> - #include <cbench/version.h> - #include <cbench/exec_helper.h> - - struct header plugin_hackbench_defaults[] = { -- OPTION_BOOL("pipe", NULL, NULL, 0), -+ OPTION_BOOL("pipe", "Use a pipe instead of Unix domain sockets", NULL, 0), - OPTION_BOOL("process", "Use processes instead of threads.", NULL, 0), - OPTION_INT32("groups", "Number of groups used.", NULL, 10), - OPTION_INT32("loops", "Number of loops executed.", NULL, 10000), -+ OPTION_INT32("size", "Number of bytes transfered in each message.", NULL, 100), -+ OPTION_INT32("fds", "Number of file descriptor pair opened.", NULL, 20), - OPTION_SENTINEL - }; - -+static struct requirement hackbench_requirements[] = { -+ { -+ .name = "hackbench", -+ }, { -+ /* Sentinel */ -+ } -+}; -+ - static struct version plugin_hackbench_versions[] = { - { -- .version = "0.1", -+ .version = "0.2", - .default_options = plugin_hackbench_defaults, -+ .requirements = hackbench_requirements, - .nr_independent_values = 1, - }, { - /* Sentinel */ -@@ -25,36 +37,52 @@ static struct version plugin_hackbench_versions[] = { - }; - - static char hackbench_pipe[] = "-pipe"; --static char hackbench_process[] = "process"; --static char hackbench_thread[] = "thread"; -+static char hackbench_process[] = "--process"; -+static char hackbench_thread[] = "--threads"; -+static char hackbench_groups[] = "--groups"; -+static char hackbench_loops[] = "--loops"; -+static char hackbench_size[] = "--datasize"; -+static char hackbench_fds[] = "--fds"; - - struct hackbench_data { - char *hb_bin; -- char loops[32]; - char groups[32]; -- char *args[6]; -+ char loops[32]; -+ char size[32]; -+ char fds[32]; -+ char *args[12]; - - char *result; - }; - -+static int hackbench_init(struct module *mod, const struct plugin_id *plug) -+{ -+ char *args[] = {"hackbench", "-h", NULL}; -+ int ret; -+ -+ ret = subproc_call("hackbench", args); -+ if (WIFEXITED(ret) && WEXITSTATUS(ret) == 1) -+ hackbench_requirements[0].found = 1; -+ -+ return 0; -+} -+ - static int hackbench_install(struct plugin *plug) - { - struct hackbench_data *d = malloc(sizeof(*d)); - const struct header *opts = plugin_get_options(plug); -- const char *bin_path = plugin_get_bin_path(plug); - char *hb_bin; - int argi = 1; - - if (!d) - return -1; - -- hb_bin = malloc(strlen(bin_path) + 24); -+ hb_bin = strdup("/usr/bin/hackbench"); - if (!hb_bin) { - free(d); - return -1; - } - -- sprintf(hb_bin, "%s/hackbench", bin_path); - d->hb_bin = hb_bin; - d->args[0] = hb_bin; - -@@ -63,6 +91,8 @@ static int hackbench_install(struct plugin *plug) - ++argi; - } - -+ d->args[argi] = hackbench_groups; -+ ++argi; - sprintf(d->groups, "%d", option_get_int32(opts, "groups")); - d->args[argi] = d->groups; - ++argi; -@@ -73,10 +103,24 @@ static int hackbench_install(struct plugin *plug) - d->args[argi] = hackbench_thread; - ++argi; - -+ d->args[argi] = hackbench_loops; -+ ++argi; - sprintf(d->loops, "%d", option_get_int32(opts, "loops")); - d->args[argi] = d->loops; - ++argi; - -+ d->args[argi] = hackbench_size; -+ ++argi; -+ sprintf(d->size, "%d", option_get_int32(opts, "size")); -+ d->args[argi] = d->size; -+ ++argi; -+ -+ d->args[argi] = hackbench_fds; -+ ++argi; -+ sprintf(d->fds, "%d", option_get_int32(opts, "fds")); -+ d->args[argi] = d->fds; -+ ++argi; -+ - d->args[argi] = NULL; - - plugin_set_data(plug, d); -@@ -107,8 +151,13 @@ static int hackbench_parse_results(struct plugin *plug) - struct hackbench_data *d = plugin_get_data(plug); - struct data *data = data_alloc(DATA_TYPE_RESULT, 1); - double res; -+ char *c; -+ -+ c = strrchr(d->result, ':'); -+ if (!c) -+ return -1; - -- res = atof(d->result); -+ res = atof(c+2); - data_add_double(data, res); - - plugin_add_results(plug, data); -@@ -150,6 +199,7 @@ static const struct header *hackbench_data_hdr(struct plugin *plug) - const struct plugin_id plugin_hackbench = { - .name = "hackbench", - .description = "Benchmark that spawns a number of groups that internally send/receive packets. Also known within the linux kernel perf tool as sched-messaging.", -+ .module_init = hackbench_init, - .install = hackbench_install, - .uninstall = hackbench_uninstall, - .parse_results = hackbench_parse_results, diff --git a/patches/cbenchsuite-1.0/series b/patches/cbenchsuite-1.0/series deleted file mode 100644 index 68c3cc79c..000000000 --- a/patches/cbenchsuite-1.0/series +++ /dev/null @@ -1,6 +0,0 @@ -# generated by git-ptx-patches -#tag:base --start-number 1 -0001-module_manager-Fix-directory-detection.patch -0002-module_manager-Ignore-hidden-directories-as-well.patch -0003-use-hackbench-from-rt-tests.patch -# 5e6d0b189d0e0b76a94ff73e0956c76b - git-ptx-patches magic |