[Darshan-commits] [Darshan] branch, dev-modular, updated. darshan-2.3.1-91-g1e5a8cb

Service Account git at mcs.anl.gov
Mon Apr 6 16:03:24 CDT 2015


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  1e5a8cb74811c8d5beb93a3409617b3f5466c3f2 (commit)
      from  13b92a1f8d0fc3f3e603424e1686cbbfab1b2282 (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 1e5a8cb74811c8d5beb93a3409617b3f5466c3f2
Author: Phil Carns <carns at mcs.anl.gov>
Date:   Mon Apr 6 17:02:46 2015 -0400

    add mpiio parser

-----------------------------------------------------------------------

Summary of changes:
 darshan-util/Makefile.in            |    9 +-
 darshan-util/darshan-mpiio-parser.c |  214 +++++++++++++++++++++++++++++++++++
 2 files changed, 221 insertions(+), 2 deletions(-)
 create mode 100644 darshan-util/darshan-mpiio-parser.c


Diff of changes:
diff --git a/darshan-util/Makefile.in b/darshan-util/Makefile.in
index c91a434..1f87ea9 100644
--- a/darshan-util/Makefile.in
+++ b/darshan-util/Makefile.in
@@ -1,4 +1,4 @@
-all: libdarshan-util.a darshan-posix-parser
+all: libdarshan-util.a darshan-posix-parser  darshan-mpiio-parser
 
 DESTDIR =
 srcdir = @srcdir@
@@ -68,6 +68,10 @@ jenkins: util/bin/jenkins.o lookup3.o
 darshan-posix-parser: darshan-posix-parser.c darshan-logutils.h darshan-posix-logutils.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-posix-log-format.h libdarshan-util.a | uthash-1.9.2
 	$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@ $(LIBS) 
 
+darshan-mpiio-parser: darshan-mpiio-parser.c darshan-logutils.h darshan-mpiio-logutils.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-mpiio-log-format.h libdarshan-util.a | uthash-1.9.2
+	$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@ $(LIBS) 
+
+
 #darshan-parser: darshan-parser.c $(DARSHAN_LOG_FORMAT) darshan-logutils.h darshan-logutils.o | uthash-1.9.2
 #	$(CC) $(CFLAGS) $(LDFLAGS) $< darshan-logutils.o -o $@ $(LIBS) 
 
@@ -101,6 +105,7 @@ install:: all
 	install -d $(pkgconfigdir)
 #	install -m 755 darshan-parser $(bindir)
 	install -m 755 darshan-posix-parser $(bindir)
+	install -m 755 darshan-mpiio-parser $(bindir)
 #	install -m 755 darshan-convert $(bindir)
 #	install -m 755 darshan-diff $(bindir)
 #	install -m 755 darshan-analyzer $(bindir)
@@ -123,7 +128,7 @@ endif
 
 
 clean::
-	rm -f *.o *.a darshan-posix-parser
+	rm -f *.o *.a darshan-posix-parser darshan-mpiio-parser
 
 distclean:: clean
 	rm -f darshan-runtime-config.h aclocal.m4 autom4te.cache/* config.status config.log Makefile util/bin/darshan-job-summary.pl
diff --git a/darshan-util/darshan-mpiio-parser.c b/darshan-util/darshan-mpiio-parser.c
new file mode 100644
index 0000000..683194f
--- /dev/null
+++ b/darshan-util/darshan-mpiio-parser.c
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2015 University of Chicago.
+ * See COPYRIGHT notice in top-level directory.
+ *
+ */
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <zlib.h>
+#include <time.h>
+#include <stdlib.h>
+#include <getopt.h>
+#include <assert.h>
+
+#include "darshan-logutils.h"
+#include "darshan-mpiio-logutils.h"
+#include "uthash-1.9.2/src/uthash.h"
+
+int main(int argc, char **argv)
+{
+    int ret;
+    int i;
+    char *filename;
+    char tmp_string[4096];
+    darshan_fd fd;
+    struct darshan_header header;
+    struct darshan_job job;
+    struct darshan_record_ref *rec_hash = NULL;
+    struct darshan_record_ref *ref;
+    int mount_count;
+    char** mnt_pts;
+    char** fs_types;
+    time_t tmp_time = 0;
+    char *token;
+    char *save;
+    char buffer[DARSHAN_JOB_METADATA_LEN];
+    struct darshan_mpiio_file next_file;
+
+    assert(argc == 2);
+    filename = argv[1];
+
+    struct stat sbuf;
+    stat(filename, &sbuf);
+
+    fd = darshan_log_open(filename, "r");
+    if(!fd)
+    {
+        fprintf(stderr, "darshan_log_open() failed to open %s\n.", filename);
+        return(-1);
+    }
+
+    /**************************************************************/
+    /* TODO: some of this code should be shared or in a separate executable
+     * instead of repeated in each module parser
+     */
+
+    /* read darshan log header */
+    ret = darshan_log_getheader(fd, &header);
+    if(ret < 0)
+    {
+        fprintf(stderr, "darshan_log_getheader() failed to read log header.\n");
+        darshan_log_close(fd);
+        return(-1);
+    }
+
+    /* read darshan job info */
+    ret = darshan_log_getjob(fd, &job);
+    if(ret < 0)
+    {
+        fprintf(stderr, "darshan_log_getjob() failed to read job data.\n");
+        darshan_log_close(fd);
+        return(-1);
+    }
+
+    /* get the original command line for this job */
+    ret = darshan_log_getexe(fd, tmp_string);
+    if(ret < 0)
+    {
+        fprintf(stderr, "Error: unable to read trailing job information.\n");
+        darshan_log_close(fd);
+        return(-1);
+    }
+
+    /* print job summary */
+    printf("# darshan log version: %s\n", header.version_string);
+    printf("# size of MPIIO file statistics: %zu bytes\n", sizeof(struct darshan_mpiio_file));
+    printf("# size of job statistics: %zu bytes\n", sizeof(struct darshan_job));
+    printf("# exe: %s\n", tmp_string);
+    printf("# uid: %" PRId64 "\n", job.uid);
+    printf("# jobid: %" PRId64 "\n", job.jobid);
+    printf("# start_time: %" PRId64 "\n", job.start_time);
+    tmp_time += job.start_time;
+    printf("# start_time_asci: %s", ctime(&tmp_time));
+    printf("# end_time: %" PRId64 "\n", job.end_time);
+    tmp_time = 0;
+    tmp_time += job.end_time;
+    printf("# end_time_asci: %s", ctime(&tmp_time));
+    printf("# nprocs: %" PRId64 "\n", job.nprocs);
+    printf("# run time: %" PRId64 "\n", job.end_time - job.start_time + 1);
+    for(token=strtok_r(job.metadata, "\n", &save);
+        token != NULL;
+        token=strtok_r(NULL, "\n", &save))
+    {
+        char *key;
+        char *value;
+        /* NOTE: we intentionally only split on the first = character.
+         * There may be additional = characters in the value portion
+         * (for example, when storing mpi-io hints).
+         */
+        strcpy(buffer, token);
+        key = buffer;
+        value = index(buffer, '=');
+        if(!value)
+            continue;
+        /* convert = to a null terminator to split key and value */
+        value[0] = '\0';
+        value++;
+        printf("# metadata: %s = %s\n", key, value);
+    }
+
+    /* get the mount information for this log */
+    ret = darshan_log_getmounts(fd, &mnt_pts, &fs_types, &mount_count);
+    if(ret < 0)
+    {
+        fprintf(stderr, "darshan_log_getmounts() failed to read mount information.\n");
+        darshan_log_close(fd);
+        return(-1);
+    }
+
+    /* print table of mounted file systems */
+    printf("\n# mounted file systems (mount point and fs type)\n");
+    printf("# -------------------------------------------------------\n");
+    for(i=0; i<mount_count; i++)
+    {
+        printf("# mount entry:\t%s\t%s\n", mnt_pts[i], fs_types[i]);
+    }
+
+    /* read hash of darshan records */
+    ret = darshan_log_gethash(fd, &rec_hash);
+    if(ret < 0)
+    {
+        fprintf(stderr, "darshan_log_getmap() failed to read record map.\n");
+        darshan_log_close(fd);
+        return(-1);
+    }
+
+    /* end TODO */
+    /*******************************************/
+
+    printf("\n*** FILE RECORD DATA ***\n");
+ 
+    ret = darshan_log_get_mpiio_file(fd, &next_file);
+    if(ret < 0)
+    {
+        fprintf(stderr, "darshan_log_get_mpiio_file() failed to read next record.\n");
+        darshan_log_close(fd);
+        return(-1);
+    }
+    if(ret == 0)
+    {
+        printf("# no files opened.\n");
+        darshan_log_close(fd);
+        return(0);
+    }
+   
+    /* loop over each stored MPIIO file record and print counters */
+    i = 1;
+    do
+    {
+        /* get the pathname for this record */
+        HASH_FIND(hlink, rec_hash, &next_file.f_id, sizeof(darshan_record_id), ref);
+        assert(ref);
+
+        printf("\tRecord %d: id=%"PRIu64" (path=%s, rank=%"PRId64")\n",
+            i, next_file.f_id, ref->rec.name, next_file.rank);
+        /* TODO: does it make sense to put these in a header or something?
+         * Down side of listing them here is ordering dependency between enum
+         * in header and names here.
+         */
+        printf(
+            "\t\tMPIIO_INDEP_OPENS:\t%"PRIu64"\n"
+            "\t\tMPIIO_COLL_OPENS:\t%"PRIu64"\n"
+            "\t\tMPIIO_HINTS:\t%"PRIu64"\n"
+            "\t\tMPIIO_F_META_TIME:\t%lf\n"
+            "\t\tMPIIO_F_OPEN_TIMESTAMP:\t%lf\n",
+            next_file.counters[DARSHAN_MPIIO_INDEP_OPENS],
+            next_file.counters[DARSHAN_MPIIO_COLL_OPENS],
+            next_file.counters[DARSHAN_MPIIO_HINTS],
+            next_file.fcounters[DARSHAN_MPIIO_F_META_TIME],
+            next_file.fcounters[DARSHAN_MPIIO_F_OPEN_TIMESTAMP]);
+
+        i++;
+    } while((ret = darshan_log_get_mpiio_file(fd, &next_file)) == 1);
+
+    /* free mount info */
+    for(i=0; i<mount_count; i++)
+    {
+        free(mnt_pts[i]);
+        free(fs_types[i]);
+    }
+    if(mount_count > 0)
+    {
+        free(mnt_pts);
+        free(fs_types);
+    }
+
+    darshan_log_close(fd);
+
+    return(0);
+}


hooks/post-receive
--



More information about the Darshan-commits mailing list