[Darshan-commits] [Darshan] branch, dev-modular, updated. darshan-2.3.1-76-gd72958d

Service Account git at mcs.anl.gov
Tue Mar 31 17:05:30 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  d72958deef26f9e8b81f83ecd8f0a627e20c5c9e (commit)
      from  6af7ad398b4ba7ce8eb1c571cc00aeb20b6a4d1c (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 d72958deef26f9e8b81f83ecd8f0a627e20c5c9e
Author: Shane Snyder <ssnyder at mcs.anl.gov>
Date:   Tue Mar 31 17:05:04 2015 -0500

    more posix wrappers: stat family

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

Summary of changes:
 darshan-posix-log-format.h            |    6 +-
 darshan-runtime/darshan-posix-ld-opts |    6 +
 darshan-runtime/lib/darshan-posix.c   |  197 ++++++++++++++++++++++++++++++++-
 darshan-util/darshan-posix-parser.c   |    6 +
 4 files changed, 210 insertions(+), 5 deletions(-)


Diff of changes:
diff --git a/darshan-posix-log-format.h b/darshan-posix-log-format.h
index 23e8b29..e699ab5 100644
--- a/darshan-posix-log-format.h
+++ b/darshan-posix-log-format.h
@@ -15,8 +15,8 @@ enum darshan_posix_indices
     POSIX_READS,              /* count of posix reads */
     POSIX_WRITES,             /* count of posix writes */
     POSIX_SEEKS,              /* count of posix seeks */
-#if 0
     POSIX_STATS,              /* count of posix stat/lstat/fstats */
+#if 0
     POSIX_MMAPS,              /* count of posix mmaps */
 #endif
     POSIX_FOPENS,             /* count of posix fopens */
@@ -39,8 +39,8 @@ enum darshan_posix_indices
     MEM_NOT_ALIGNED,          /* count of accesses not mem aligned */
     MEM_ALIGNMENT,            /* mem alignment in bytes */
     FILE_NOT_ALIGNED,         /* count of accesses not file aligned */
-    FILE_ALIGNMENT,           /* file alignment in bytes */
 #endif
+    FILE_ALIGNMENT,           /* file alignment in bytes */
     POSIX_MAX_READ_TIME_SIZE,
     POSIX_MAX_WRITE_TIME_SIZE,
 #if 0
@@ -84,7 +84,9 @@ enum darshan_posix_indices
     ACCESS3_COUNT,
     ACCESS4_COUNT,
     DEVICE,                   /* device id reported by stat */
+#endif
     SIZE_AT_OPEN,
+#if 0
     FASTEST_RANK,
     FASTEST_RANK_BYTES,
     SLOWEST_RANK,
diff --git a/darshan-runtime/darshan-posix-ld-opts b/darshan-runtime/darshan-posix-ld-opts
index 581d6b9..dea658e 100644
--- a/darshan-runtime/darshan-posix-ld-opts
+++ b/darshan-runtime/darshan-posix-ld-opts
@@ -17,6 +17,12 @@
 --wrap=lseek
 --wrap=lseek64
 --wrap=fseek
+--wrap=__xstat
+--wrap=__xstat64
+--wrap=__lxstat
+--wrap=__lxstat64
+--wrap=__fxstat
+--wrap=__fxstat64
 --wrap=fsync
 --wrap=fdatasync
 --wrap=close
diff --git a/darshan-runtime/lib/darshan-posix.c b/darshan-runtime/lib/darshan-posix.c
index 94a800b..41b2838 100644
--- a/darshan-runtime/lib/darshan-posix.c
+++ b/darshan-runtime/lib/darshan-posix.c
@@ -56,12 +56,20 @@ DARSHAN_FORWARD_DECL(fwrite, size_t, (const void *ptr, size_t size, size_t nmemb
 DARSHAN_FORWARD_DECL(lseek, off_t, (int fd, off_t offset, int whence));
 DARSHAN_FORWARD_DECL(lseek64, off64_t, (int fd, off64_t offset, int whence));
 DARSHAN_FORWARD_DECL(fseek, int, (FILE *stream, long offset, int whence));
-/* stats */
-/* mmaps */
+DARSHAN_FORWARD_DECL(__xstat, int, (int vers, const char* path, struct stat *buf));
+DARSHAN_FORWARD_DECL(__xstat64, int, (int vers, const char* path, struct stat64 *buf));
+DARSHAN_FORWARD_DECL(__lxstat, int, (int vers, const char* path, struct stat *buf));
+DARSHAN_FORWARD_DECL(__lxstat64, int, (int vers, const char* path, struct stat64 *buf));
+DARSHAN_FORWARD_DECL(__fxstat, int, (int vers, int fd, struct stat *buf));
+DARSHAN_FORWARD_DECL(__fxstat64, int, (int vers, int fd, struct stat64 *buf));
+/* TODO mmaps */
 DARSHAN_FORWARD_DECL(fsync, int, (int fd));
 DARSHAN_FORWARD_DECL(fdatasync, int, (int fd));
 DARSHAN_FORWARD_DECL(close, int, (int fd));
 DARSHAN_FORWARD_DECL(fclose, int, (FILE *fp));
+/* TODO mkstemp */
+/* TODO aio */
+/* TODO listio */
 
 static void posix_runtime_initialize(void);
 static struct posix_file_runtime* posix_file_by_name(const char *name);
@@ -275,6 +283,33 @@ static int my_rank = -1;
         DARSHAN_COUNTER_SET(file->file_record, POSIX_MAX_WRITE_TIME_SIZE, __ret); } \
 } while(0)
 
+#define POSIX_LOOKUP_RECORD_STAT(__path, __statbuf, __tm1, __tm2) do { \
+    char* exclude; \
+    int tmp_index = 0; \
+    struct posix_file_runtime* file; \
+    while((exclude = darshan_path_exclusions[tmp_index])) { \
+        if(!(strncmp(exclude, __path, strlen(exclude)))) \
+            break; \
+        tmp_index++; \
+    } \
+    if(exclude) break; \
+    file = posix_file_by_name(__path); \
+    if(file) \
+    { \
+        POSIX_RECORD_STAT(file, __statbuf, __tm1, __tm2); \
+    } \
+} while(0)
+
+#define POSIX_RECORD_STAT(__file, __statbuf, __tm1, __tm2) do { \
+    if(!DARSHAN_COUNTER_VALUE((__file)->file_record, POSIX_STATS) && !DARSHAN_COUNTER_VALUE((__file)->file_record, POSIX_OPENS)){ \
+        DARSHAN_COUNTER_SET((__file)->file_record, FILE_ALIGNMENT, (__statbuf)->st_blksize); \
+        DARSHAN_COUNTER_SET((__file)->file_record, SIZE_AT_OPEN, (__statbuf)->st_size); \
+    }\
+    (__file)->file_record->rank = my_rank; \
+    DARSHAN_COUNTER_F_INC_NO_OVERLAP((__file)->file_record, __tm1, __tm2, (__file)->last_meta_end, POSIX_F_META_TIME); \
+    DARSHAN_COUNTER_INC((__file)->file_record, POSIX_STATS, 1); \
+} while(0)
+
 /**********************************************************
  *      Wrappers for POSIX I/O functions of interest      * 
  **********************************************************/
@@ -764,7 +799,7 @@ int DARSHAN_DECL(fseek)(FILE *stream, long offset, int whence)
         file = posix_file_by_fd(fileno(stream));
         if(file)
         {
-            file->offset = ftell(stream); /* TODO: this seems wrong. ftell? */
+            file->offset = ftell(stream);
             DARSHAN_COUNTER_F_INC_NO_OVERLAP(file->file_record,
                 tm1, tm2, file->last_meta_end, POSIX_F_META_TIME);
             DARSHAN_COUNTER_INC(file->file_record, POSIX_FSEEKS, 1);
@@ -775,6 +810,162 @@ int DARSHAN_DECL(fseek)(FILE *stream, long offset, int whence)
     return(ret);
 }
 
+int DARSHAN_DECL(__xstat)(int vers, const char *path, struct stat *buf)
+{
+    int ret;
+    double tm1, tm2;
+
+    MAP_OR_FAIL(__xstat);
+
+    tm1 = darshan_core_wtime();
+    ret = __real___xstat(vers, path, buf);
+    tm2 = darshan_core_wtime();
+
+    if(ret < 0 || !S_ISREG(buf->st_mode))
+        return(ret);
+
+    POSIX_LOCK();
+    posix_runtime_initialize();
+    POSIX_LOOKUP_RECORD_STAT(path, buf, tm1, tm2);
+    POSIX_UNLOCK();
+
+    return(ret);
+}
+
+int DARSHAN_DECL(__xstat64)(int vers, const char *path, struct stat64 *buf)
+{
+    int ret;
+    double tm1, tm2;
+
+    MAP_OR_FAIL(__xstat64);
+
+    tm1 = darshan_core_wtime();
+    ret = __real___xstat64(vers, path, buf);
+    tm2 = darshan_core_wtime();
+
+    if(ret < 0 || !S_ISREG(buf->st_mode))
+        return(ret);
+
+    POSIX_LOCK();
+    posix_runtime_initialize();
+    POSIX_LOOKUP_RECORD_STAT(path, buf, tm1, tm2);
+    POSIX_UNLOCK();
+
+    return(ret);
+}
+
+int DARSHAN_DECL(__lxstat)(int vers, const char *path, struct stat *buf)
+{
+    int ret;
+    double tm1, tm2;
+
+    MAP_OR_FAIL(__lxstat);
+
+    tm1 = darshan_core_wtime();
+    ret = __real___lxstat(vers, path, buf);
+    tm2 = darshan_core_wtime();
+
+    if(ret < 0 || !S_ISREG(buf->st_mode))
+        return(ret);
+
+    POSIX_LOCK();
+    posix_runtime_initialize();
+    POSIX_LOOKUP_RECORD_STAT(path, buf, tm1, tm2);
+    POSIX_UNLOCK();
+
+    return(ret);
+}
+
+int DARSHAN_DECL(__lxstat64)(int vers, const char *path, struct stat64 *buf)
+{
+    int ret;
+    double tm1, tm2;
+
+    MAP_OR_FAIL(__lxstat64);
+
+    tm1 = darshan_core_wtime();
+    ret = __real___lxstat64(vers, path, buf);
+    tm2 = darshan_core_wtime();
+
+    if(ret < 0 || !S_ISREG(buf->st_mode))
+        return(ret);
+
+    POSIX_LOCK();
+    posix_runtime_initialize();
+    POSIX_LOOKUP_RECORD_STAT(path, buf, tm1, tm2);
+    POSIX_UNLOCK();
+
+    return(ret);
+}
+
+int DARSHAN_DECL(__fxstat)(int vers, int fd, struct stat *buf)
+{
+    int ret;
+    struct posix_file_runtime* file;
+    double tm1, tm2;
+
+    MAP_OR_FAIL(__fxstat);
+
+    tm1 = darshan_core_wtime();
+    ret = __real___fxstat(vers, fd, buf);
+    tm2 = darshan_core_wtime();
+
+    if(ret < 0 || !S_ISREG(buf->st_mode))
+        return(ret);
+
+    /* TODO */
+#if 0
+    /* skip logging if this was triggered internally */
+    if((void*)buf == (void*)&cp_stat_buf)
+        return(ret);
+#endif
+
+    POSIX_LOCK();
+    posix_runtime_initialize();
+    file = posix_file_by_fd(fd);
+    if(file)
+    {
+        POSIX_RECORD_STAT(file, buf, tm1, tm2);
+    }
+    POSIX_UNLOCK();
+
+    return(ret);
+}
+
+int DARSHAN_DECL(__fxstat64)(int vers, int fd, struct stat64 *buf)
+{
+    int ret;
+    struct posix_file_runtime* file;
+    double tm1, tm2;
+
+    MAP_OR_FAIL(__fxstat64);
+
+    tm1 = darshan_core_wtime();
+    ret = __real___fxstat64(vers, fd, buf);
+    tm2 = darshan_core_wtime();
+
+    if(ret < 0 || !S_ISREG(buf->st_mode))
+        return(ret);
+
+    /* TODO */
+#if 0
+    /* skip logging if this was triggered internally */
+    if((void*)buf == (void*)&cp_stat_buf)
+        return(ret);
+#endif
+
+    POSIX_LOCK();
+    posix_runtime_initialize();
+    file = posix_file_by_fd(fd);
+    if(file)
+    {
+        POSIX_RECORD_STAT(file, buf, tm1, tm2);
+    }
+    POSIX_UNLOCK();
+
+    return(ret);
+}
+
 int DARSHAN_DECL(fsync)(int fd)
 {
     int ret;
diff --git a/darshan-util/darshan-posix-parser.c b/darshan-util/darshan-posix-parser.c
index bc7e324..eddf56c 100644
--- a/darshan-util/darshan-posix-parser.c
+++ b/darshan-util/darshan-posix-parser.c
@@ -174,6 +174,7 @@ int main(int argc, char **argv)
             "\t\tPOSIX_READS:\t%"PRIu64"\n"
             "\t\tPOSIX_WRITES:\t%"PRIu64"\n"
             "\t\tPOSIX_SEEKS:\t%"PRIu64"\n"
+            "\t\tPOSIX_STATS:\t%"PRIu64"\n"
             "\t\tPOSIX_FOPENS:\t%"PRIu64"\n"
             "\t\tPOSIX_FREADS:\t%"PRIu64"\n"
             "\t\tPOSIX_FWRITES:\t%"PRIu64"\n"
@@ -190,8 +191,10 @@ int main(int argc, char **argv)
             "\t\tPOSIX_SEQ_READS:\t%"PRIu64"\n"
             "\t\tPOSIX_SEQ_WRITES:\t%"PRIu64"\n"
             "\t\tPOSIX_RW_SWITCHES:\t%"PRIu64"\n"
+            "\t\tFILE_ALIGNMENT:\t%"PRIu64"\n"
             "\t\tPOSIX_MAX_READ_TIME_SIZE:\t%"PRIu64"\n"
             "\t\tPOSIX_MAX_WRITE_TIME_SIZE:\t%"PRIu64"\n"
+            "\t\tSIZE_AT_OPEN:\t%"PRIu64"\n"
             "\t\tPOSIX_F_OPEN_TIMESTAMP:\t%lf\n"
             "\t\tPOSIX_F_READ_START_TIMESTAMP:\t%lf\n"
             "\t\tPOSIX_F_WRITE_START_TIMESTAMP:\t%lf\n"
@@ -206,6 +209,7 @@ int main(int argc, char **argv)
             next_file.counters[POSIX_READS],
             next_file.counters[POSIX_WRITES],
             next_file.counters[POSIX_SEEKS],
+            next_file.counters[POSIX_STATS],
             next_file.counters[POSIX_FOPENS],
             next_file.counters[POSIX_FREADS],
             next_file.counters[POSIX_FWRITES],
@@ -222,8 +226,10 @@ int main(int argc, char **argv)
             next_file.counters[POSIX_SEQ_READS],
             next_file.counters[POSIX_SEQ_WRITES],
             next_file.counters[POSIX_RW_SWITCHES],
+            next_file.counters[FILE_ALIGNMENT],
             next_file.counters[POSIX_MAX_READ_TIME_SIZE],
             next_file.counters[POSIX_MAX_WRITE_TIME_SIZE],
+            next_file.counters[SIZE_AT_OPEN],
             next_file.fcounters[POSIX_F_OPEN_TIMESTAMP],
             next_file.fcounters[POSIX_F_READ_START_TIMESTAMP],
             next_file.fcounters[POSIX_F_WRITE_START_TIMESTAMP],


hooks/post-receive
--



More information about the Darshan-commits mailing list