[Darshan-commits] [Darshan] branch, dev-modular, updated. 37d68c1ea108118df1dfd259e96b7c6d33f32110
Service Account
git at mcs.anl.gov
Thu Nov 6 11:02:07 CST 2014
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, dev-modular has been updated
via 37d68c1ea108118df1dfd259e96b7c6d33f32110 (commit)
from 44a058c21369e5e069c87a243e5b59b7e47cbd1a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 37d68c1ea108118df1dfd259e96b7c6d33f32110
Author: Shane Snyder <ssnyder at mcs.anl.gov>
Date: Thu Nov 6 11:01:48 2014 -0600
code cleanup and add darshan-common to build
-----------------------------------------------------------------------
Summary of changes:
darshan-modularization-design-notes.txt | 1 +
darshan-runtime/Makefile.in | 9 ++-
darshan-runtime/darshan.h | 10 ++++
darshan-runtime/lib/darshan-common.c | 83 ++++++++++++++++++++++++++++++
darshan-runtime/lib/darshan-core.c | 50 ++++++++++++------
darshan-runtime/lib/darshan-posix.c | 85 +++---------------------------
6 files changed, 142 insertions(+), 96 deletions(-)
create mode 100644 darshan-runtime/lib/darshan-common.c
Diff of changes:
diff --git a/darshan-modularization-design-notes.txt b/darshan-modularization-design-notes.txt
index 0023903..5b559ed 100644
--- a/darshan-modularization-design-notes.txt
+++ b/darshan-modularization-design-notes.txt
@@ -120,3 +120,4 @@ TODO NOTES:
- fs mount information -- should we export this info from darshan-core?
- would the posix module be the only one to leverage this info?
- it is used to correlate filenames with mount points, but not sure what is needed where
+ - test fortran and c apps to make sure command line args are handled properly (see email with Phil 11/4)
diff --git a/darshan-runtime/Makefile.in b/darshan-runtime/Makefile.in
index a882bab..4343e1d 100644
--- a/darshan-runtime/Makefile.in
+++ b/darshan-runtime/Makefile.in
@@ -1,4 +1,4 @@
-all: lib/libdarshan-core.a
+all: lib/libdarshan.a
#all: lib/libdarshan-posix.a lib/libdarshan-mpi-io.a lib/libdarshan-stubs.a
DESTDIR =
@@ -37,6 +37,9 @@ lib::
lib/darshan-core.o: lib/darshan-core.c darshan-core.h $(DARSHAN_LOG_FORMAT) | lib
$(CC) $(CFLAGS) -c $< -o $@
+lib/darshan-common.o: lib/darshan-common.c darshan.h $(DARSHAN_LOG_FORMAT) | lib
+ $(CC) $(CFLAGS) -c $< -o $@
+
#lib/darshan-mpi-io.o: lib/darshan-mpi-io.c darshan.h darshan-dynamic.h $(DARSHAN_LOG_FORMAT) | lib
# $(CC) $(CFLAGS) -c $< -o $@
@@ -88,7 +91,7 @@ lib/lookup8.o: lib/lookup8.c
#%.i: %.c
# $(CC) -E $(CFLAGS) -c $< -o $@
-lib/libdarshan-core.a: lib/darshan-core.o lib/lookup3.o lib/lookup8.o lib/darshan-posix.o
+lib/libdarshan.a: lib/darshan-posix.o lib/darshan-core.o lib/darshan-common.o lib/lookup3.o lib/lookup8.o
ar rcs $@ $^
#lib/libdarshan-mpi-io.a: lib/darshan-mpi-io.o lib/darshan-mpi-init-finalize.o lib/darshan-pnetcdf.o lib/darshan-hdf5.o
@@ -105,7 +108,7 @@ lib/libdarshan-core.a: lib/darshan-core.o lib/lookup3.o lib/lookup8.o lib/darsha
install:: all
install -d $(libdir)
- install -m 755 lib/libdarshan-core.a $(libdir)
+ install -m 755 lib/libdarshan.a $(libdir)
# install -m 755 lib/libdarshan-posix.a $(libdir)
# install -m 755 lib/libdarshan-mpi-io.a $(libdir)
# install -m 755 lib/libdarshan-stubs.a $(libdir)
diff --git a/darshan-runtime/darshan.h b/darshan-runtime/darshan.h
index e5f2590..34c0741 100644
--- a/darshan-runtime/darshan.h
+++ b/darshan-runtime/darshan.h
@@ -36,6 +36,10 @@ struct darshan_module_funcs
void (*get_output_data)(void **, int);
};
+/*********************************************
+* darshan-core functions for darshan modules *
+*********************************************/
+
void darshan_core_register_module(
char *name,
struct darshan_module_funcs *funcs,
@@ -49,4 +53,10 @@ void darshan_core_lookup_id(
double darshan_core_wtime(void);
+/***********************************************
+* darshan-common functions for darshan modules *
+***********************************************/
+
+char* darshan_clean_file_path(const char* path);
+
#endif /* __DARSHAN_H */
diff --git a/darshan-runtime/lib/darshan-common.c b/darshan-runtime/lib/darshan-common.c
new file mode 100644
index 0000000..e5074b8
--- /dev/null
+++ b/darshan-runtime/lib/darshan-common.c
@@ -0,0 +1,83 @@
+/*
+ * (C) 2009 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "darshan-runtime-config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#include "darshan.h"
+
+/* Allocate a new string that contains a cleaned-up version of the path
+ * passed in as an argument. Converts relative paths to absolute paths and
+ * filters out some potential noise in the path string.
+ */
+char* darshan_clean_file_path(const char* path)
+{
+ char* newpath = NULL;
+ char* cwd = NULL;
+ char* filter = NULL;
+
+ if(!path || strlen(path) < 1)
+ return(NULL);
+
+ if(path[0] == '/')
+ {
+ /* it is already an absolute path */
+ newpath = malloc(strlen(path)+1);
+ if(newpath)
+ {
+ strcpy(newpath, path);
+ }
+ }
+ else
+ {
+ /* handle relative path */
+ cwd = malloc(PATH_MAX);
+ if(cwd)
+ {
+ if(getcwd(cwd, PATH_MAX))
+ {
+ newpath = malloc(strlen(path) + strlen(cwd) + 2);
+ if(newpath)
+ {
+ sprintf(newpath, "%s/%s", cwd, path);
+ }
+ }
+ free(cwd);
+ }
+ }
+
+ if(!newpath)
+ return(NULL);
+
+ /* filter out any double slashes */
+ while((filter = strstr(newpath, "//")))
+ {
+ /* shift down one character */
+ memmove(filter, &filter[1], (strlen(&filter[1]) + 1));
+ }
+
+ /* filter out any /./ instances */
+ while((filter = strstr(newpath, "/./")))
+ {
+ /* shift down two characters */
+ memmove(filter, &filter[2], (strlen(&filter[2]) + 1));
+ }
+
+ /* return result */
+ return(newpath);
+}
+
+/*
+ * Local variables:
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ *
+ * vim: ts=8 sts=4 sw=4 expandtab
+ */
diff --git a/darshan-runtime/lib/darshan-core.c b/darshan-runtime/lib/darshan-core.c
index 5681099..c20cee8 100644
--- a/darshan-runtime/lib/darshan-core.c
+++ b/darshan-runtime/lib/darshan-core.c
@@ -3,7 +3,7 @@
* See COPYRIGHT in top-level directory.
*/
-#define _XOPEN_SOURCE 500
+#define _GNU_SOURCE
#include "darshan-runtime-config.h"
@@ -25,15 +25,17 @@
#include "darshan-core.h"
#include "utlist.h"
-extern char* __progname_full;
-
-static void darshan_core_initialize(int *argc, char ***argv);
-static void darshan_core_shutdown(void);
-static void darshan_core_cleanup(struct darshan_core_job_runtime* job);
+/* TODO is __progname_full needed here */
+extern char* __progname;
/* internal variables */
static struct darshan_core_job_runtime *darshan_core_job = NULL;
static pthread_mutex_t darshan_mutex = PTHREAD_MUTEX_INITIALIZER;
+static int my_rank = -1;
+
+static void darshan_core_initialize(int *argc, char ***argv);
+static void darshan_core_shutdown(void);
+static void darshan_core_cleanup(struct darshan_core_job_runtime* job);
#define DARSHAN_LOCK() pthread_mutex_lock(&darshan_mutex)
#define DARSHAN_UNLOCK() pthread_mutex_unlock(&darshan_mutex)
@@ -47,7 +49,7 @@ static pthread_mutex_t darshan_mutex = PTHREAD_MUTEX_INITIALIZER;
#define DARSHAN_MOD_DELETE(__mod, __job) \
LL_DELETE(__job->mod_list_head, __mod)
-/* intercept MPI initialize and finalize to initialize darshan */
+/* intercept MPI initialize and finalize to manage darshan core runtime */
int MPI_Init(int *argc, char ***argv)
{
int ret;
@@ -94,7 +96,6 @@ static void darshan_core_initialize(int *argc, char ***argv)
{
int i;
int nprocs;
- int rank;
int internal_timing_flag = 0;
double init_start, init_time, init_max;
char* truncate_string = "<TRUNCATED>";
@@ -102,7 +103,7 @@ static void darshan_core_initialize(int *argc, char ***argv)
int chars_left = 0;
DARSHAN_MPI_CALL(PMPI_Comm_size)(MPI_COMM_WORLD, &nprocs);
- DARSHAN_MPI_CALL(PMPI_Comm_rank)(MPI_COMM_WORLD, &rank);
+ DARSHAN_MPI_CALL(PMPI_Comm_rank)(MPI_COMM_WORLD, &my_rank);
if(getenv("DARSHAN_INTERNAL_TIMING"))
internal_timing_flag = 1;
@@ -149,7 +150,7 @@ static void darshan_core_initialize(int *argc, char ***argv)
if(argc == 0)
{
chars_left = CP_EXE_LEN-strlen(darshan_core_job->exe);
- strncat(darshan_core_job->exe, __progname_full, chars_left);
+ strncat(darshan_core_job->exe, __progname, chars_left);
chars_left = CP_EXE_LEN-strlen(darshan_core_job->exe);
strncat(darshan_core_job->exe, " <unknown args>", chars_left);
}
@@ -169,7 +170,7 @@ static void darshan_core_initialize(int *argc, char ***argv)
init_time = DARSHAN_MPI_CALL(PMPI_Wtime)() - init_start;
DARSHAN_MPI_CALL(PMPI_Reduce)(&init_time, &init_max, 1,
MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
- if(rank == 0)
+ if(my_rank == 0)
{
printf("#darshan:<op>\t<nprocs>\t<time>\n");
printf("darshan:init\t%d\t%f\n", nprocs, init_max);
@@ -181,7 +182,6 @@ static void darshan_core_initialize(int *argc, char ***argv)
static void darshan_core_shutdown()
{
- int rank;
char *logfile_name;
struct darshan_core_job_runtime* final_job;
struct darshan_core_module *mod, *tmp;
@@ -191,6 +191,8 @@ static void darshan_core_shutdown()
char* envjobid;
char* logpath;
int ret;
+ int local_ret = 0;
+ int all_ret = 0;
uint64_t hlevel;
char hname[HOST_NAME_MAX];
uint64_t logmod;
@@ -199,6 +201,8 @@ static void darshan_core_shutdown()
char env_check[256];
char* env_tok;
#endif
+ int64_t first_start_time;
+ int64_t last_end_time;
if(getenv("DARSHAN_INTERNAL_TIMING"))
internal_timing_flag = 1;
@@ -223,10 +227,8 @@ static void darshan_core_shutdown()
return;
}
- DARSHAN_MPI_CALL(PMPI_Comm_rank)(MPI_COMM_WORLD, &rank);
-
/* construct log file name */
- if(rank == 0)
+ if(my_rank == 0)
{
char cuser[L_cuserid] = {0};
struct tm* my_tm;
@@ -391,9 +393,22 @@ static void darshan_core_shutdown()
final_job->log_job.end_time = time(NULL);
- /* TODO: coordinate shutdown accross all registered modules */
+ /* reduce to report first start time and last end time across all ranks
+ * at rank 0
+ */
+ DARSHAN_MPI_CALL(PMPI_Reduce)(&final_job->log_job.start_time, &first_start_time, 1, MPI_LONG_LONG, MPI_MIN, 0, MPI_COMM_WORLD);
+ DARSHAN_MPI_CALL(PMPI_Reduce)(&final_job->log_job.end_time, &last_end_time, 1, MPI_LONG_LONG, MPI_MAX, 0, MPI_COMM_WORLD);
+ if(my_rank == 0)
+ {
+ final_job->log_job.start_time = first_start_time;
+ final_job->log_job.end_time = last_end_time;
+ }
+ /* TODO: coordinate shutdown accross all registered modules */
+ DARSHAN_MOD_ITER(mod, tmp, final_job)
+ {
+ }
free(logfile_name);
darshan_core_cleanup(final_job);
@@ -414,7 +429,7 @@ static void darshan_core_cleanup(struct darshan_core_job_runtime* job)
{
DARSHAN_MOD_DELETE(mod, job);
free(mod);
- };
+ }
free(job);
@@ -503,6 +518,7 @@ void darshan_core_lookup_id(
double darshan_core_wtime()
{
+ /* TODO since NOTIMING is the only flag (currently), maybe we just drop 'flags' */
if(!darshan_core_job || darshan_core_job->flags & CP_FLAG_NOTIMING)
{
return(0);
diff --git a/darshan-runtime/lib/darshan-posix.c b/darshan-runtime/lib/darshan-posix.c
index a3bee83..06476fa 100644
--- a/darshan-runtime/lib/darshan-posix.c
+++ b/darshan-runtime/lib/darshan-posix.c
@@ -3,7 +3,10 @@
* See COPYRIGHT in top-level directory.
*/
+#define _GNU_SOURCE
+
#include "darshan-runtime-config.h"
+
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
@@ -19,9 +22,7 @@
#include <search.h>
#include <assert.h>
#include <libgen.h>
-#include <limits.h>
#include <aio.h>
-#define __USE_GNU
#include <pthread.h>
#include "darshan.h"
@@ -188,7 +189,7 @@ struct posix_runtime
static struct posix_runtime *posix_runtime = NULL;
static pthread_mutex_t posix_runtime_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
-static int my_rank = -1; /* TODO */
+static int my_rank = -1;
static int darshan_mem_alignment = 1;
/* these are paths that we will not trace */
@@ -210,12 +211,10 @@ DARSHAN_FORWARD_DECL(open, int, (const char *path, int flags, ...));
DARSHAN_FORWARD_DECL(close, int, (int fd));
static void posix_runtime_initialize(void);
-static void posix_runtime_finalize(void);
static struct posix_runtime_file* posix_file_by_name(const char *name);
static struct posix_runtime_file* posix_file_by_name_setfd(const char* name, int fd);
static void posix_file_close_fd(int fd);
-static char* darshan_clean_file_path(const char* path);
static void posix_prepare_for_shutdown(void);
static void posix_get_output_data(void **buffer, int size);
@@ -391,6 +390,8 @@ static void posix_runtime_initialize()
memset(posix_runtime->file_array, 0, sizeof(struct posix_runtime_file) *
posix_runtime->file_array_size);
+ DARSHAN_MPI_CALL(PMPI_Comm_rank)(MPI_COMM_WORLD, &my_rank);
+
#if 0
/* set the memory alignment according to config or environment variables */
#if (__CP_MEM_ALIGNMENT < 1)
@@ -421,12 +422,6 @@ static void posix_runtime_initialize()
return;
}
-static void posix_runtime_finalize()
-{
-
- return;
-}
-
static struct posix_runtime_file* posix_file_by_name(const char *name)
{
struct posix_runtime_file *file = NULL;
@@ -519,7 +514,7 @@ static void posix_file_close_fd(int fd)
/* search hash table for this fd */
HASH_FIND(hlink, posix_runtime->fd_hash, &fd, sizeof(int), ref);
- if (ref)
+ if(ref)
{
/* we have a reference, delete it */
HASH_DELETE(hlink, posix_runtime->fd_hash, ref);
@@ -529,81 +524,19 @@ static void posix_file_close_fd(int fd)
return;
}
-/* Allocate a new string that contains a cleaned-up version of the path
- * passed in as an argument. Converts relative paths to absolute paths and
- * filters out some potential noise in the path string.
- */
-static char* darshan_clean_file_path(const char* path)
-{
- char* newpath = NULL;
- char* cwd = NULL;
- char* filter = NULL;
-
- if(!path || strlen(path) < 1)
- return(NULL);
-
- if(path[0] == '/')
- {
- /* it is already an absolute path */
- newpath = malloc(strlen(path)+1);
- if(newpath)
- {
- strcpy(newpath, path);
- }
- }
- else
- {
- /* handle relative path */
- cwd = malloc(PATH_MAX);
- if(cwd)
- {
- if(getcwd(cwd, PATH_MAX))
- {
- newpath = malloc(strlen(path) + strlen(cwd) + 2);
- if(newpath)
- {
- sprintf(newpath, "%s/%s", cwd, path);
- }
- }
- free(cwd);
- }
- }
-
- if(!newpath)
- return(NULL);
-
- /* filter out any double slashes */
- while((filter = strstr(newpath, "//")))
- {
- /* shift down one character */
- memmove(filter, &filter[1], (strlen(&filter[1]) + 1));
- }
-
- /* filter out any /./ instances */
- while((filter = strstr(newpath, "/./")))
- {
- /* shift down two characters */
- memmove(filter, &filter[2], (strlen(&filter[2]) + 1));
- }
-
- /* return result */
- return(newpath);
-}
-
/* ***************************************************** */
static void posix_prepare_for_shutdown()
{
+
+
return;
}
static void posix_get_output_data(void **buffer, int size)
{
- /* shutdown the posix runtime module */
- posix_runtime_finalize();
-
return;
}
hooks/post-receive
--
More information about the Darshan-commits
mailing list