From 46bb4665b4e9e977c1b990ead01345fb3cade4dc Mon Sep 17 00:00:00 2001 From: Tim Gardner Date: Fri, 13 Aug 2010 12:45:51 -0700 Subject: [PATCH] Count the number of CPUs Allocate buffer_size_kb based on the number of CPUs. Signed-off-by: Tim Gardner --- src/trace.c | 32 ++++++++++++++++++++++++++++++-- 1 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/trace.c b/src/trace.c index 5f2fe97..fc61944 100644 --- a/src/trace.c +++ b/src/trace.c @@ -69,6 +69,8 @@ **/ #define PATH_DEBUGFS "/sys/kernel/debug" +#define PATH_PROCFS "/proc" + /** * PATH_DEBUGFS_TMP: * @@ -117,6 +119,7 @@ trace (int daemonise, int timeout) { int dfd; + FILE *fp; int unmount = FALSE; int old_sys_open_enabled = 0; int old_open_exec_enabled = 0; @@ -129,6 +132,7 @@ trace (int daemonise, struct timeval tv; nih_local PackFile *files = NULL; size_t num_files = 0; + size_t num_cpus=0; /* Mount debugfs if not already mounted */ dfd = open (PATH_DEBUGFS "/tracing", O_RDONLY | O_NOATIME); @@ -149,7 +153,31 @@ trace (int daemonise, unmount = TRUE; } - /* Enable tracing of open() syscalls */ + /* + * Count the number of CPUs, default to 1 on error. + */ + fp = fopen("/proc/cpuinfo", "r"); + if (fp) { + int line_size=1024; + char *processor="processor"; + char *line = malloc(line_size); + if (line) { + num_cpus = 0; + while (fgets(line,line_size,fp) != NULL) { + if (!strncmp(line,processor,strlen(processor))) { + num_cpus++; + } + } + free(line); + nih_message("Counted %d CPUs\n",num_cpus); + } + fclose(fp); + } + if (!num_cpus) { + num_cpus = 1; + } + + /* Enable tracing of open() syscalls */ if (set_value (dfd, "events/fs/do_sys_open/enable", TRUE, &old_sys_open_enabled) < 0) goto error; @@ -166,7 +194,7 @@ trace (int daemonise, old_uselib_enabled = -1; } - if (set_value (dfd, "buffer_size_kb", 128000, &old_buffer_size_kb) < 0) + if (set_value (dfd, "buffer_size_kb", 128000/num_cpus, &old_buffer_size_kb) < 0) goto error; if (set_value (dfd, "tracing_enabled", TRUE, &old_tracing_enabled) < 0) -- 1.7.0.4