<html lang='en'>
<head>
<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
<title>
GitLab
</title>
</meta>
</head>
<style>
  img {
    max-width: 100%;
    height: auto;
  }
  p.details {
    font-style:italic;
    color:#777
  }
  .footer p {
    font-size:small;
    color:#777
  }
  pre.commit-message {
    white-space: pre-wrap;
  }
  .file-stats a {
    text-decoration: none;
  }
  .file-stats .new-file {
    color: #090;
  }
  .file-stats .deleted-file {
    color: #B00;
  }
</style>
<body>
<div class='content'>
<h3>
Shane Snyder pushed to branch lustre-mod
at <a href="https://xgitlab.cels.anl.gov/darshan/darshan">darshan / darshan</a>
</h3>
<h4>
Commits:
</h4>
<ul>
<li>
<strong><a href="https://xgitlab.cels.anl.gov/darshan/darshan/commit/62ed332ac6657fb3241e8e31c9fdc0e6ad5f00de">62ed332a</a></strong>
<div>
<span>by Shane Snyder</span>
<i>at 2016-02-23T16:55:27-06:00</i>
</div>
<pre class='commit-message'>add stubbed out lustre source and header files</pre>
</li>
<li>
<strong><a href="https://xgitlab.cels.anl.gov/darshan/darshan/commit/1eecb3b1dcb46a10a3ae1511a35489dbff79a828">1eecb3b1</a></strong>
<div>
<span>by Shane Snyder</span>
<i>at 2016-02-23T16:55:27-06:00</i>
</div>
<pre class='commit-message'>clean up headers for some modules</pre>
</li>
<li>
<strong><a href="https://xgitlab.cels.anl.gov/darshan/darshan/commit/ffeeed89b904d01c077a8b2bbe9adc99a37b2edb">ffeeed89</a></strong>
<div>
<span>by Shane Snyder</span>
<i>at 2016-02-23T16:56:24-06:00</i>
</div>
<pre class='commit-message'>some initial luste mod logic and makefile changes</pre>
</li>
<li>
<strong><a href="https://xgitlab.cels.anl.gov/darshan/darshan/commit/21c1b5d01d78a5709494e3ff3d2fa1d8a2f53a7b">21c1b5d0</a></strong>
<div>
<span>by Shane Snyder</span>
<i>at 2016-02-24T22:27:10-06:00</i>
</div>
<pre class='commit-message'>cleanup bgq module to use fs_info struct</pre>
</li>
<li>
<strong><a href="https://xgitlab.cels.anl.gov/darshan/darshan/commit/657c5b565dd8c7b847c956a39c61f8711ce21833">657c5b56</a></strong>
<div>
<span>by Shane Snyder</span>
<i>at 2016-02-24T22:28:58-06:00</i>
</div>
<pre class='commit-message'>initial runtime lustre module implementation

the POSIX module will call into the Lustre module for each file
record created that corresponds to a file from a Lustre FS. No
counters are currently stored but most of the module strucutre
has been stubbed.</pre>
</li>
</ul>
<h4>13 changed files:</h4>
<ul>
<li class='file-stats'>
<a href='#diff-0'>
darshan-bgq-log-format.h
</a>
</li>
<li class='file-stats'>
<a href='#diff-1'>
darshan-log-format.h
</a>
</li>
<li class='file-stats'>
<a href='#diff-2'>
<span class='new-file'>
+
darshan-lustre-log-format.h
</span>
</a>
</li>
<li class='file-stats'>
<a href='#diff-3'>
darshan-runtime/Makefile.in
</a>
</li>
<li class='file-stats'>
<a href='#diff-4'>
darshan-runtime/darshan.h
</a>
</li>
<li class='file-stats'>
<a href='#diff-5'>
darshan-runtime/lib/darshan-bgq.c
</a>
</li>
<li class='file-stats'>
<a href='#diff-6'>
darshan-runtime/lib/darshan-core-init-finalize.c
</a>
</li>
<li class='file-stats'>
<a href='#diff-7'>
darshan-runtime/lib/darshan-core.c
</a>
</li>
<li class='file-stats'>
<a href='#diff-8'>
darshan-runtime/lib/darshan-hdf5.c
</a>
</li>
<li class='file-stats'>
<a href='#diff-9'>
<span class='new-file'>
+
darshan-runtime/lib/darshan-lustre.c
</span>
</a>
</li>
<li class='file-stats'>
<a href='#diff-10'>
darshan-runtime/lib/darshan-mpiio.c
</a>
</li>
<li class='file-stats'>
<a href='#diff-11'>
darshan-runtime/lib/darshan-pnetcdf.c
</a>
</li>
<li class='file-stats'>
<a href='#diff-12'>
darshan-runtime/lib/darshan-posix.c
</a>
</li>
</ul>
<h4>Changes:</h4>
<li id='diff-0'>
<a href='https://xgitlab.cels.anl.gov/darshan/darshan/compare/d14cd7589d20f229ff43daebd79c980677592e54...657c5b565dd8c7b847c956a39c61f8711ce21833#diff-0'>
<strong>
darshan-bgq-log-format.h
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="color: #000000;background-color: #ffdddd">--- a/darshan-bgq-log-format.h
</span><span style="color: #000000;background-color: #ddffdd">+++ b/darshan-bgq-log-format.h
</span><span style="color: #aaaaaa">@@ -69,7 +69,6 @@ struct darshan_bgq_record
</span> {
     darshan_record_id f_id;
     int64_t rank;
<span style="color: #000000;background-color: #ffdddd">-    int alignment;
</span>     int64_t counters[BGQ_NUM_INDICES];
     double fcounters[BGQ_F_NUM_INDICES];
 };
</code></pre>

<br>
</li>
<li id='diff-1'>
<a href='https://xgitlab.cels.anl.gov/darshan/darshan/compare/d14cd7589d20f229ff43daebd79c980677592e54...657c5b565dd8c7b847c956a39c61f8711ce21833#diff-1'>
<strong>
darshan-log-format.h
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="color: #000000;background-color: #ffdddd">--- a/darshan-log-format.h
</span><span style="color: #000000;background-color: #ddffdd">+++ b/darshan-log-format.h
</span><span style="color: #aaaaaa">@@ -103,6 +103,7 @@ struct darshan_record
</span> #include "darshan-hdf5-log-format.h"
 #include "darshan-pnetcdf-log-format.h"
 #include "darshan-bgq-log-format.h"
<span style="color: #000000;background-color: #ddffdd">+#include "darshan-lustre-log-format.h"
</span> 
 /* X-macro for keeping module ordering consistent */
 /* NOTE: first val used to define module enum values, 
<span style="color: #aaaaaa">@@ -120,7 +121,8 @@ struct darshan_record
</span>     X(DARSHAN_MPIIO_MOD,    "MPI-IO",   DARSHAN_MPIIO_VER,      &mpiio_logutils) \
     X(DARSHAN_HDF5_MOD,     "HDF5",     DARSHAN_HDF5_VER,       &hdf5_logutils) \
     X(DARSHAN_PNETCDF_MOD,  "PNETCDF",  DARSHAN_PNETCDF_VER,    &pnetcdf_logutils) \
<span style="color: #000000;background-color: #ffdddd">-    X(DARSHAN_BGQ_MOD,      "BG/Q",     DARSHAN_BGQ_VER,        &bgq_logutils)
</span><span style="color: #000000;background-color: #ddffdd">+    X(DARSHAN_BGQ_MOD,      "BG/Q",     DARSHAN_BGQ_VER,        &bgq_logutils) \
+    X(DARSHAN_LUSTRE_MOD,   "LUSTRE",   DARSHAN_LUSTRE_VER,     NULL)
</span> 
 /* unique identifiers to distinguish between available darshan modules */
 /* NOTES: - valid ids range from [0...DARSHAN_MAX_MODS-1]
</code></pre>

<br>
</li>
<li id='diff-2'>
<a href='https://xgitlab.cels.anl.gov/darshan/darshan/compare/d14cd7589d20f229ff43daebd79c980677592e54...657c5b565dd8c7b847c956a39c61f8711ce21833#diff-2'>
<strong>
darshan-lustre-log-format.h
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="color: #000000;background-color: #ffdddd">--- /dev/null
</span><span style="color: #000000;background-color: #ddffdd">+++ b/darshan-lustre-log-format.h
</span><span style="color: #aaaaaa">@@ -0,0 +1,40 @@
</span><span style="color: #000000;background-color: #ddffdd">+/*
+ * Copyright (C) 2015 University of Chicago.
+ * See COPYRIGHT notice in top-level directory.
+ *
+ */
+
+#ifndef __DARSHAN_LUSTRE_LOG_FORMAT_H
+#define __DARSHAN_LUSTRE_LOG_FORMAT_H
+
+/* current Lustre log format version */
+#define DARSHAN_LUSTRE_VER 1
+
+/* TODO: add integer counters here (e.g., counter for stripe width, stripe size, etc etc) */
+#define LUSTRE_COUNTERS \
+    /* end of counters */\
+    X(LUSTRE_NUM_INDICES)
+
+#define X(a) a,
+/* integer statistics for Lustre file records */
+enum darshan_lustre_indices
+{
+    LUSTRE_COUNTERS
+};
+#undef X
+
+/* record structure for the Lustre module. a record is created and stored for
+ * every file opened that belongs to a Lustre file system. This record includes:
+ *      - a corresponding record identifier (created by hashing the file path)
+ *      - the rank of the process which opened the file (-1 for shared files)
+ *      - integer file I/O statistics (stripe size, width, # of OSTs, etc.)
+ */
+struct darshan_lustre_record
+{
+    darshan_record_id rec_id;
+    int64_t rank;
+    int64_t counters[LUSTRE_NUM_INDICES];
+};
+
+#endif /* __DARSHAN_LUSTRE_LOG_FORMAT_H */
+
</span></code></pre>

<br>
</li>
<li id='diff-3'>
<a href='https://xgitlab.cels.anl.gov/darshan/darshan/compare/d14cd7589d20f229ff43daebd79c980677592e54...657c5b565dd8c7b847c956a39c61f8711ce21833#diff-3'>
<strong>
darshan-runtime/Makefile.in
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="color: #000000;background-color: #ffdddd">--- a/darshan-runtime/Makefile.in
</span><span style="color: #000000;background-color: #ddffdd">+++ b/darshan-runtime/Makefile.in
</span><span style="color: #aaaaaa">@@ -36,6 +36,10 @@ LIBS = -lz @LIBBZ2@
</span> DARSHAN_STATIC_MOD_OBJS = lib/darshan-posix.o lib/darshan-mpiio.o lib/darshan-hdf5.o lib/darshan-pnetcdf.o
 DARSHAN_DYNAMIC_MOD_OBJS = lib/darshan-posix.po lib/darshan-mpiio.po lib/darshan-hdf5.po lib/darshan-pnetcdf.po
 
<span style="color: #000000;background-color: #ddffdd">+# TODO: make the lustre module enabled using config options
+DARSHAN_STATIC_MOD_OBJS += lib/darshan-lustre.o
+DARSHAN_DYNAMIC_MOD_OBJS += lib/darshan-lustre.po
+
</span> ifdef DARSHAN_USE_BGQ
 DARSHAN_STATIC_MOD_OBJS += lib/darshan-bgq.o
 DARSHAN_DYNAMIC_MOD_OBJS += lib/darshan-bgq.po
<span style="color: #aaaaaa">@@ -49,63 +53,69 @@ lib::
</span> lib/darshan-core-init-finalize.o: lib/darshan-core-init-finalize.c darshan.h darshan-core.h $(DARSHAN_LOG_FORMAT) | lib
        $(CC) $(CFLAGS) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-core-init-finalize.po: lib/darshan-core-init-finalize.c darshan.h darshan-core.h $(DARSHAN_LOG_FORMAT) | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-core-init-finalize.po: lib/darshan-core-init-finalize.c darshan.h darshan-dynamic.h darshan-core.h $(DARSHAN_LOG_FORMAT) | lib
</span>   $(CC) $(CFLAGS_SHARED) -c $< -o $@
 
 lib/darshan-core.o: lib/darshan-core.c darshan.h darshan-core.h $(DARSHAN_LOG_FORMAT) | lib
        $(CC) $(CFLAGS) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-core.po: lib/darshan-core.c darshan.h darshan-core.h $(DARSHAN_LOG_FORMAT) | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-core.po: lib/darshan-core.c darshan.h darshan-dynamic.h darshan-core.h $(DARSHAN_LOG_FORMAT) | lib
</span>   $(CC) $(CFLAGS_SHARED) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-common.o: lib/darshan-common.c darshan.h $(DARSHAN_LOG_FORMAT) | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-common.o: lib/darshan-common.c darshan.h darshan-common.h $(DARSHAN_LOG_FORMAT) | lib
</span>   $(CC) $(CFLAGS) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-common.po: lib/darshan-common.c darshan.h $(DARSHAN_LOG_FORMAT) | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-common.po: lib/darshan-common.c darshan.h darshan-common.h $(DARSHAN_LOG_FORMAT) | lib
</span>   $(CC) $(CFLAGS_SHARED) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-null.o: lib/darshan-null.c darshan.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-null-log-format.h | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-null.o: lib/darshan-null.c darshan.h darshan-common.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-null-log-format.h | lib
</span>   $(CC) $(CFLAGS) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-null.po: lib/darshan-null.c darshan.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-null-log-format.h | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-null.po: lib/darshan-null.c darshan.h darshan-dynamic.h darshan-common.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-null-log-format.h | lib
</span>   $(CC) $(CFLAGS_SHARED) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-posix.o: lib/darshan-posix.c darshan.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-posix-log-format.h | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-posix.o: lib/darshan-posix.c darshan.h darshan-common.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-posix-log-format.h | lib
</span>   $(CC) $(CFLAGS) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-posix.po: lib/darshan-posix.c darshan.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-posix-log-format.h | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-posix.po: lib/darshan-posix.c darshan.h darshan-dynamic.h darshan-common.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-posix-log-format.h | lib
</span>   $(CC) $(CFLAGS_SHARED) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-mpiio.o: lib/darshan-mpiio.c darshan.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-mpiio-log-format.h | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-mpiio.o: lib/darshan-mpiio.c darshan.h darshan-common.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-mpiio-log-format.h | lib
</span>   $(CC) $(CFLAGS) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-mpiio.po: lib/darshan-mpiio.c darshan.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-mpiio-log-format.h | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-mpiio.po: lib/darshan-mpiio.c darshan.h darshan-dynamic.h darshan-common.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-mpiio-log-format.h | lib
</span>   $(CC) $(CFLAGS_SHARED) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-bgq.o: lib/darshan-bgq.c darshan.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-mpiio-log-format.h | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-bgq.o: lib/darshan-bgq.c darshan.h darshan-common.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-mpiio-log-format.h | lib
</span>   $(CC) $(CFLAGS) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-bgq.po: lib/darshan-bgq.c darshan.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-mpiio-log-format.h | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-bgq.po: lib/darshan-bgq.c darshan.h darshan-dynamic.h darshan-common.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-mpiio-log-format.h | lib
</span>   $(CC) $(CFLAGS_SHARED) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-hdf5.o: lib/darshan-hdf5.c darshan.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-hdf5-log-format.h | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-hdf5.o: lib/darshan-hdf5.c darshan.h darshan-common.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-hdf5-log-format.h | lib
</span>   $(CC) $(CFLAGS) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-hdf5.po: lib/darshan-hdf5.c darshan.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-hdf5-log-format.h | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-hdf5.po: lib/darshan-hdf5.c darshan.h darshan-dynamic.h darshan-common.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-hdf5-log-format.h | lib
</span>   $(CC) $(CFLAGS_SHARED) -c $< -o $@
 
 lib/darshan-hdf5-stubs.o: lib/darshan-hdf5-stubs.c darshan.h $(DARSHAN_LOG_FORMAT) | lib
        $(CC) $(CFLAGS) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-pnetcdf.o: lib/darshan-pnetcdf.c darshan.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-pnetcdf-log-format.h | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-pnetcdf.o: lib/darshan-pnetcdf.c darshan.h darshan-common.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-pnetcdf-log-format.h | lib
</span>   $(CC) $(CFLAGS) -c $< -o $@
 
<span style="color: #000000;background-color: #ffdddd">-lib/darshan-pnetcdf.po: lib/darshan-pnetcdf.c darshan.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-pnetcdf-log-format.h | lib
</span><span style="color: #000000;background-color: #ddffdd">+lib/darshan-pnetcdf.po: lib/darshan-pnetcdf.c darshan.h darshan-dynamic.h darshan-common.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-pnetcdf-log-format.h | lib
</span>   $(CC) $(CFLAGS_SHARED) -c $< -o $@
 
 lib/darshan-pnetcdf-stubs.o: lib/darshan-pnetcdf-stubs.c darshan.h $(DARSHAN_LOG_FORMAT) | lib
        $(CC) $(CFLAGS) -c $< -o $@
 
<span style="color: #000000;background-color: #ddffdd">+lib/darshan-lustre.o: lib/darshan-lustre.c darshan.h darshan-common.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-lustre-log-format.h | lib
+       $(CC) $(CFLAGS) -c $< -o $@
+
+lib/darshan-lustre.po: lib/darshan-hdf5.c darshan.h darshan-dynamic.h darshan-common.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-lustre-log-format.h | lib
+       $(CC) $(CFLAGS_SHARED) -c $< -o $@
+
</span> lib/lookup3.o: lib/lookup3.c
        $(CC) $(CFLAGS) -c $< -o $@
 
</code></pre>

<br>
</li>
<li id='diff-4'>
<a href='https://xgitlab.cels.anl.gov/darshan/darshan/compare/d14cd7589d20f229ff43daebd79c980677592e54...657c5b565dd8c7b847c956a39c61f8711ce21833#diff-4'>
<strong>
darshan-runtime/darshan.h
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="color: #000000;background-color: #ffdddd">--- a/darshan-runtime/darshan.h
</span><span style="color: #000000;background-color: #ddffdd">+++ b/darshan-runtime/darshan.h
</span><span style="color: #aaaaaa">@@ -80,6 +80,13 @@ struct darshan_module_funcs
</span>     void (*shutdown)(void);
 };
 
<span style="color: #000000;background-color: #ddffdd">+/* stores FS info from statfs calls for a given mount point */
+struct darshan_fs_info
+{
+    int fs_type;
+    int block_size;
+};
+
</span> /* paths that darshan will not trace */
 extern char* darshan_path_exclusions[]; /* defined in lib/darshan-core.c */
 
<span style="color: #aaaaaa">@@ -134,7 +141,7 @@ void darshan_core_register_record(
</span>     int printable_flag,
     int mod_limit_flag,
     darshan_record_id *rec_id,
<span style="color: #000000;background-color: #ffdddd">-    int *file_alignment);
</span><span style="color: #000000;background-color: #ddffdd">+    struct darshan_fs_info *fs_info);
</span> 
 /* darshan_core_unregister_record()
  *
</code></pre>

<br>
</li>
<li id='diff-5'>
<a href='https://xgitlab.cels.anl.gov/darshan/darshan/compare/d14cd7589d20f229ff43daebd79c980677592e54...657c5b565dd8c7b847c956a39c61f8711ce21833#diff-5'>
<strong>
darshan-runtime/lib/darshan-bgq.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="color: #000000;background-color: #ffdddd">--- a/darshan-runtime/lib/darshan-bgq.c
</span><span style="color: #000000;background-color: #ddffdd">+++ b/darshan-runtime/lib/darshan-bgq.c
</span><span style="color: #aaaaaa">@@ -48,7 +48,6 @@ static int instrumentation_disabled = 0;
</span> 
 /* my_rank indicates the MPI rank of this process */
 static int my_rank = -1;
<span style="color: #000000;background-color: #ffdddd">-static int darshan_mem_alignment = 1;
</span> 
 /* internal helper functions for the BGQ module */
 void bgq_runtime_initialize(void);
<span style="color: #aaaaaa">@@ -127,7 +126,7 @@ void bgq_runtime_initialize()
</span>         &bgq_mod_fns,
         &my_rank,
         &mem_limit,
<span style="color: #000000;background-color: #ffdddd">-        &darshan_mem_alignment);
</span><span style="color: #000000;background-color: #ddffdd">+        NULL);
</span> 
     /* return if no memory assigned by darshan-core */
     if(mem_limit == 0)
<span style="color: #aaaaaa">@@ -162,7 +161,7 @@ void bgq_runtime_initialize()
</span>         1,
         0,
         &bgq_runtime->record.f_id,
<span style="color: #000000;background-color: #ffdddd">-        &bgq_runtime->record.alignment);
</span><span style="color: #000000;background-color: #ddffdd">+        NULL);
</span> 
     /* if record is set to 0, darshan-core is out of space and will not
      * track this record, so we should avoid tracking it, too
</code></pre>

<br>
</li>
<li id='diff-6'>
<a href='https://xgitlab.cels.anl.gov/darshan/darshan/compare/d14cd7589d20f229ff43daebd79c980677592e54...657c5b565dd8c7b847c956a39c61f8711ce21833#diff-6'>
<strong>
darshan-runtime/lib/darshan-core-init-finalize.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="color: #000000;background-color: #ffdddd">--- a/darshan-runtime/lib/darshan-core-init-finalize.c
</span><span style="color: #000000;background-color: #ddffdd">+++ b/darshan-runtime/lib/darshan-core-init-finalize.c
</span><span style="color: #aaaaaa">@@ -15,6 +15,7 @@
</span> 
 #include "darshan.h"
 #include "darshan-core.h"
<span style="color: #000000;background-color: #ddffdd">+#include "darshan-dynamic.h"
</span> 
 #ifdef DARSHAN_PRELOAD
 
</code></pre>

<br>
</li>
<li id='diff-7'>
<a href='https://xgitlab.cels.anl.gov/darshan/darshan/compare/d14cd7589d20f229ff43daebd79c980677592e54...657c5b565dd8c7b847c956a39c61f8711ce21833#diff-7'>
<strong>
darshan-runtime/lib/darshan-core.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="color: #000000;background-color: #ffdddd">--- a/darshan-runtime/lib/darshan-core.c
</span><span style="color: #000000;background-color: #ddffdd">+++ b/darshan-runtime/lib/darshan-core.c
</span><span style="color: #aaaaaa">@@ -79,9 +79,9 @@ void (*mod_static_init_fns[])(void) =
</span> #define DARSHAN_MAX_MNT_TYPE 32
 struct mnt_data
 {
<span style="color: #000000;background-color: #ffdddd">-    int block_size;
</span>     char path[DARSHAN_MAX_MNT_PATH];
     char type[DARSHAN_MAX_MNT_TYPE];
<span style="color: #000000;background-color: #ddffdd">+    struct darshan_fs_info fs_info;
</span> };
 static struct mnt_data mnt_data_array[DARSHAN_MAX_MNTS];
 static int mnt_data_count = 0;
<span style="color: #aaaaaa">@@ -96,8 +96,8 @@ static void darshan_get_exe_and_mounts_root(
</span>     int space_left);
 static char* darshan_get_exe_and_mounts(
     struct darshan_core_runtime *core);
<span style="color: #000000;background-color: #ffdddd">-static void darshan_block_size_from_path(
-    const char *path, int *block_size);
</span><span style="color: #000000;background-color: #ddffdd">+static void darshan_fs_info_from_path(
+    const char *path, struct darshan_fs_info *fs_info);
</span> static void darshan_get_shared_records(
     struct darshan_core_runtime *core, darshan_record_id **shared_recs,
     int *shared_rec_cnt);
<span style="color: #aaaaaa">@@ -952,12 +952,13 @@ static void add_entry(char* trailing_data, int* space_left, struct mntent *entry
</span> #define LL_SUPER_MAGIC 0x0BD00BD0
 #endif
     ret = statfs(entry->mnt_dir, &statfsbuf);
<span style="color: #000000;background-color: #ddffdd">+    mnt_data_array[mnt_data_count].fs_info.fs_type = statfsbuf.f_type;
</span>     if(ret == 0 && statfsbuf.f_type != LL_SUPER_MAGIC)
<span style="color: #000000;background-color: #ffdddd">-        mnt_data_array[mnt_data_count].block_size = statfsbuf.f_bsize;
</span><span style="color: #000000;background-color: #ddffdd">+        mnt_data_array[mnt_data_count].fs_info.block_size = statfsbuf.f_bsize;
</span>     else if(ret == 0 && statfsbuf.f_type == LL_SUPER_MAGIC)
<span style="color: #000000;background-color: #ffdddd">-        mnt_data_array[mnt_data_count].block_size = 1024*1024;
</span><span style="color: #000000;background-color: #ddffdd">+        mnt_data_array[mnt_data_count].fs_info.block_size = 1024*1024;
</span>     else
<span style="color: #000000;background-color: #ffdddd">-        mnt_data_array[mnt_data_count].block_size = 4096;
</span><span style="color: #000000;background-color: #ddffdd">+        mnt_data_array[mnt_data_count].fs_info.block_size = 4096;
</span> 
     /* store mount information for use in header of darshan log */
     ret = snprintf(tmp_mnt, 256, "\n%s\t%s",
<span style="color: #aaaaaa">@@ -1097,16 +1098,17 @@ static char* darshan_get_exe_and_mounts(struct darshan_core_runtime *core)
</span>     return(trailing_data);
 }
 
<span style="color: #000000;background-color: #ffdddd">-static void darshan_block_size_from_path(const char *path, int *block_size)
</span><span style="color: #000000;background-color: #ddffdd">+static void darshan_fs_info_from_path(const char *path, struct darshan_fs_info *fs_info)
</span> {
     int i;
<span style="color: #000000;background-color: #ffdddd">-    *block_size = -1;
</span><span style="color: #000000;background-color: #ddffdd">+    fs_info->fs_type = -1;
+    fs_info->block_size = -1;
</span> 
     for(i=0; i<mnt_data_count; i++)
     {
         if(!(strncmp(mnt_data_array[i].path, path, strlen(mnt_data_array[i].path))))
         {
<span style="color: #000000;background-color: #ffdddd">-            *block_size = mnt_data_array[i].block_size;
</span><span style="color: #000000;background-color: #ddffdd">+            *fs_info = mnt_data_array[i].fs_info;
</span>             return;
         }
     }
<span style="color: #aaaaaa">@@ -1695,7 +1697,7 @@ void darshan_core_register_record(
</span>     int printable_flag,
     int mod_limit_flag,
     darshan_record_id *rec_id,
<span style="color: #000000;background-color: #ffdddd">-    int *file_alignment)
</span><span style="color: #000000;background-color: #ddffdd">+    struct darshan_fs_info *fs_info)
</span> {
     darshan_record_id tmp_rec_id;
     struct darshan_core_record_ref *ref;
<span style="color: #aaaaaa">@@ -1743,10 +1745,10 @@ void darshan_core_register_record(
</span>     DARSHAN_MOD_FLAG_SET(ref->mod_flags, mod_id);
     DARSHAN_CORE_UNLOCK();
 
<span style="color: #000000;background-color: #ffdddd">-    if(file_alignment)
-        darshan_block_size_from_path(name, file_alignment);
-
</span>     *rec_id = tmp_rec_id;
<span style="color: #000000;background-color: #ddffdd">+    if(fs_info)
+        darshan_fs_info_from_path(name, fs_info);
+
</span>     return;
 }
 
</code></pre>

<br>
</li>
<li id='diff-8'>
<a href='https://xgitlab.cels.anl.gov/darshan/darshan/compare/d14cd7589d20f229ff43daebd79c980677592e54...657c5b565dd8c7b847c956a39c61f8711ce21833#diff-8'>
<strong>
darshan-runtime/lib/darshan-hdf5.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="color: #000000;background-color: #ffdddd">--- a/darshan-runtime/lib/darshan-hdf5.c
</span><span style="color: #000000;background-color: #ddffdd">+++ b/darshan-runtime/lib/darshan-hdf5.c
</span><span style="color: #aaaaaa">@@ -4,6 +4,9 @@
</span>  *
  */
 
<span style="color: #000000;background-color: #ddffdd">+#define _XOPEN_SOURCE 500
+#define _GNU_SOURCE
+
</span> #include "darshan-runtime-config.h"
 #include <stdio.h>
 #include <unistd.h>
<span style="color: #aaaaaa">@@ -16,7 +19,6 @@
</span> #include <errno.h>
 #include <search.h>
 #include <assert.h>
<span style="color: #000000;background-color: #ffdddd">-#define __USE_GNU
</span> #include <pthread.h>
 
 #include "uthash.h"
</code></pre>

<br>
</li>
<li id='diff-9'>
<a href='https://xgitlab.cels.anl.gov/darshan/darshan/compare/d14cd7589d20f229ff43daebd79c980677592e54...657c5b565dd8c7b847c956a39c61f8711ce21833#diff-9'>
<strong>
darshan-runtime/lib/darshan-lustre.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="color: #000000;background-color: #ffdddd">--- /dev/null
</span><span style="color: #000000;background-color: #ddffdd">+++ b/darshan-runtime/lib/darshan-lustre.c
</span><span style="color: #aaaaaa">@@ -0,0 +1,223 @@
</span><span style="color: #000000;background-color: #ddffdd">+/*
+ * Copyright (C) 2015 University of Chicago.
+ * See COPYRIGHT notice in top-level directory.
+ *
+ */
+
+#define _XOPEN_SOURCE 500
+#define _GNU_SOURCE
+
+#include "darshan-runtime-config.h"
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <pthread.h>
+
+#include "uthash.h"
+
+#include "darshan.h"
+#include "darshan-dynamic.h"
+
+/* TODO: once mmap merge is complete, we can just use an array
+ * to store record data rather than a hash table -- in that
+ * branch, register_record() returns whether the record 
+ * already exists, at which point we won't need to instrument
+ * more data, since the Lustre record data is immutable. records
+ * could just be appended to the array if there is no need to
+ * search for a specific record.
+ */
+struct lustre_record_ref
+{
+    struct darshan_lustre_record *record;
+    UT_hash_handle hlink;
+};
+
+struct lustre_runtime
+{
+    struct lustre_record_ref *ref_array;
+    struct darshan_lustre_record *record_array;
+    int record_array_size;
+    int record_array_ndx;
+    struct lustre_record_ref *record_hash;
+};
+
+static struct lustre_runtime *lustre_runtime = NULL;
+static pthread_mutex_t lustre_runtime_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
+static int instrumentation_disabled = 0;
+static int my_rank = -1;
+
+static void lustre_runtime_initialize(void);
+
+static void lustre_begin_shutdown(void);
+static void lustre_get_output_data(MPI_Comm mod_comm, darshan_record_id *shared_recs,
+    int shared_rec_count, void **lustre_buf, int *lustre_buf_sz);
+static void lustre_shutdown(void);
+
+#define LUSTRE_LOCK() pthread_mutex_lock(&lustre_runtime_mutex)
+#define LUSTRE_UNLOCK() pthread_mutex_unlock(&lustre_runtime_mutex)
+
+/* TODO: is there any way we can further compact Lustre data to save space?
+ * e.g., are all files in the same directory guaranteed same striping parameters?
+ * if so, can we store stripe parameters on per-directory basis and the OST
+ * list on a per-file basis? maybe the storage savings are small enough this isn't
+ * worth it, but nice to keep in mind
+ */
+
+void darshan_instrument_lustre_file(char *filepath)
+{
+    struct lustre_record_ref *lustre_ref;
+    darshan_record_id rec_id;
+    int limit_flag;
+
+    LUSTRE_LOCK();
+    /* make sure the lustre module is already initialized */
+    lustre_runtime_initialize();
+
+    limit_flag = (lustre_runtime->record_array_ndx >= lustre_runtime->record_array_size);
+
+    /* register a Lustre file record with Darshan */
+    darshan_core_register_record(
+        (void *)filepath,
+        strlen(filepath),
+        DARSHAN_LUSTRE_MOD,
+        1,
+        limit_flag,
+        &rec_id,
+        NULL);
+
+    /* if record id is 0, darshan has no more memory for instrumenting */
+    if(rec_id == 0)
+        return;
+
+    HASH_FIND(hlink, lustre_runtime->record_hash, &rec_id,
+        sizeof(darshan_record_id), lustre_ref);
+    if(!lustre_ref)
+    {
+        /* no existing record, allocate a new one and add it to the hash */
+        lustre_ref = &(lustre_runtime->ref_array[lustre_runtime->record_array_ndx]);
+        lustre_ref->record = &(lustre_runtime->record_array[lustre_runtime->record_array_ndx]);
+        lustre_ref->record->rec_id = rec_id;
+        lustre_ref->record->rank = my_rank;
+
+        /* TODO: gather lustre data, store in record hash */
+        /* counters in lustre_ref->record->counters */
+
+        HASH_ADD(hlink, lustre_runtime->record_hash, record->rec_id,
+            sizeof(darshan_record_id), lustre_ref);
+        lustre_runtime->record_array_ndx++;
+    }
+
+    LUSTRE_UNLOCK();
+    return;
+}
+
+static void lustre_runtime_initialize()
+{
+    int mem_limit;
+    struct darshan_module_funcs lustre_mod_fns =
+    {
+        .begin_shutdown = &lustre_begin_shutdown,
+        .get_output_data = &lustre_get_output_data,
+        .shutdown = &lustre_shutdown
+    };
+
+    /* don't do anything if already initialized or instrumenation is disabled */
+    if(lustre_runtime || instrumentation_disabled)
+        return;
+
+    /* register the lustre module with darshan-core */
+    darshan_core_register_module(
+        DARSHAN_LUSTRE_MOD,
+        &lustre_mod_fns,
+        &my_rank,
+        &mem_limit,
+        NULL);
+
+    /* return if no memory assigned by darshan core */
+    if(mem_limit == 0)
+        return;
+
+    lustre_runtime = malloc(sizeof(*lustre_runtime));
+    if(!lustre_runtime)
+        return;
+    memset(lustre_runtime, 0, sizeof(*lustre_runtime));
+
+    /* allocate array of Lustre records according to the amount of memory
+     * assigned by Darshan
+     */
+    lustre_runtime->record_array_size = mem_limit / sizeof(struct darshan_lustre_record);
+
+    lustre_runtime->ref_array = malloc(lustre_runtime->record_array_size *
+                                       sizeof(struct lustre_record_ref));
+    lustre_runtime->record_array = malloc(lustre_runtime->record_array_size *
+                                          sizeof(struct darshan_lustre_record));
+    if(!lustre_runtime->ref_array || !lustre_runtime->record_array)
+    {
+        lustre_runtime->record_array_size = 0;
+        return;
+    }
+    memset(lustre_runtime->ref_array, 0, lustre_runtime->record_array_size *
+        sizeof(struct lustre_record_ref));
+    memset(lustre_runtime->record_array, 0, lustre_runtime->record_array_size *
+        sizeof(struct darshan_lustre_record));
+
+    return;
+}
+
+/**************************************************************************
+ * Functions exported by Lustre module for coordinating with darshan-core *
+ **************************************************************************/
+
+static void lustre_begin_shutdown(void)
+{
+    assert(lustre_runtime);
+
+    LUSTRE_LOCK();
+    /* disable further instrumentation while Darshan shuts down */
+    instrumentation_disabled = 1;
+    LUSTRE_UNLOCK();
+
+    return;
+}
+
+static void lustre_get_output_data(
+    MPI_Comm mod_comm,
+    darshan_record_id *shared_recs,
+    int shared_rec_count,
+    void **lustre_buf,
+    int *lustre_buf_sz)
+{
+    assert(lustre_runtime);
+
+    /* TODO: determine lustre record shared across all processes,
+     * and have only rank 0 write these records out. No shared 
+     * reductions should be necessary as the Lustre data for a
+     * given file should be the same on each process
+     */
+
+    return;
+}
+
+static void lustre_shutdown(void)
+{
+    assert(lustre_runtime);
+
+    /* TODO: free data structures */
+
+    lustre_runtime = NULL;
+
+    return;
+}
+
+/*
+ * Local variables:
+ *  c-indent-level: 4
+ *  c-basic-offset: 4
+ * End:
+ *
+ * vim: ts=8 sts=4 sw=4 expandtab
+ */
</span></code></pre>

<br>
</li>
<li id='diff-10'>
<a href='https://xgitlab.cels.anl.gov/darshan/darshan/compare/d14cd7589d20f229ff43daebd79c980677592e54...657c5b565dd8c7b847c956a39c61f8711ce21833#diff-10'>
<strong>
darshan-runtime/lib/darshan-mpiio.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="color: #000000;background-color: #ffdddd">--- a/darshan-runtime/lib/darshan-mpiio.c
</span><span style="color: #000000;background-color: #ddffdd">+++ b/darshan-runtime/lib/darshan-mpiio.c
</span><span style="color: #aaaaaa">@@ -4,6 +4,9 @@
</span>  *
  */
 
<span style="color: #000000;background-color: #ddffdd">+#define _XOPEN_SOURCE 500
+#define _GNU_SOURCE
+
</span> #include "darshan-runtime-config.h"
 #include <stdio.h>
 #include <unistd.h>
<span style="color: #aaaaaa">@@ -17,7 +20,6 @@
</span> #include <errno.h>
 #include <search.h>
 #include <assert.h>
<span style="color: #000000;background-color: #ffdddd">-#define __USE_GNU
</span> #include <pthread.h>
 
 #include "uthash.h"
</code></pre>

<br>
</li>
<li id='diff-11'>
<a href='https://xgitlab.cels.anl.gov/darshan/darshan/compare/d14cd7589d20f229ff43daebd79c980677592e54...657c5b565dd8c7b847c956a39c61f8711ce21833#diff-11'>
<strong>
darshan-runtime/lib/darshan-pnetcdf.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="color: #000000;background-color: #ffdddd">--- a/darshan-runtime/lib/darshan-pnetcdf.c
</span><span style="color: #000000;background-color: #ddffdd">+++ b/darshan-runtime/lib/darshan-pnetcdf.c
</span><span style="color: #aaaaaa">@@ -4,6 +4,9 @@
</span>  *
  */
 
<span style="color: #000000;background-color: #ddffdd">+#define _XOPEN_SOURCE 500
+#define _GNU_SOURCE
+
</span> #include "darshan-runtime-config.h"
 #include <stdio.h>
 #include <unistd.h>
<span style="color: #aaaaaa">@@ -16,7 +19,6 @@
</span> #include <errno.h>
 #include <search.h>
 #include <assert.h>
<span style="color: #000000;background-color: #ffdddd">-#define __USE_GNU
</span> #include <pthread.h>
 
 #include "uthash.h"
</code></pre>

<br>
</li>
<li id='diff-12'>
<a href='https://xgitlab.cels.anl.gov/darshan/darshan/compare/d14cd7589d20f229ff43daebd79c980677592e54...657c5b565dd8c7b847c956a39c61f8711ce21833#diff-12'>
<strong>
darshan-runtime/lib/darshan-posix.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="color: #000000;background-color: #ffdddd">--- a/darshan-runtime/lib/darshan-posix.c
</span><span style="color: #000000;background-color: #ddffdd">+++ b/darshan-runtime/lib/darshan-posix.c
</span><span style="color: #aaaaaa">@@ -176,6 +176,11 @@ struct posix_runtime
</span>     struct posix_file_runtime_ref* fd_hash;
 };
 
<span style="color: #000000;background-color: #ddffdd">+/* XXX modules don't expose an API for other modules, so use extern to get
+ * Lustre instrumentation function
+ */
+extern void darshan_instrument_lustre_file(char *filepath);
+
</span> static struct posix_runtime *posix_runtime = NULL;
 static pthread_mutex_t posix_runtime_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
 static int instrumentation_disabled = 0;
<span style="color: #aaaaaa">@@ -1505,7 +1510,7 @@ static struct posix_file_runtime* posix_file_by_name(const char *name)
</span>     struct posix_file_runtime *file = NULL;
     char *newname = NULL;
     darshan_record_id file_id;
<span style="color: #000000;background-color: #ffdddd">-    int file_alignment;
</span><span style="color: #000000;background-color: #ddffdd">+    struct darshan_fs_info fs_info;
</span>     int limit_flag;
 
     if(!posix_runtime || instrumentation_disabled)
<span style="color: #aaaaaa">@@ -1525,7 +1530,7 @@ static struct posix_file_runtime* posix_file_by_name(const char *name)
</span>         1,
         limit_flag,
         &file_id,
<span style="color: #000000;background-color: #ffdddd">-        &file_alignment);
</span><span style="color: #000000;background-color: #ddffdd">+        &fs_info);
</span> 
     /* the file record id is set to 0 if no memory is available for tracking
      * new records -- just fall through and ignore this record
<span style="color: #aaaaaa">@@ -1552,12 +1557,19 @@ static struct posix_file_runtime* posix_file_by_name(const char *name)
</span>     file->file_record->f_id = file_id;
     file->file_record->rank = my_rank;
     file->file_record->counters[POSIX_MEM_ALIGNMENT] = darshan_mem_alignment;
<span style="color: #000000;background-color: #ffdddd">-    file->file_record->counters[POSIX_FILE_ALIGNMENT] = file_alignment;
</span><span style="color: #000000;background-color: #ddffdd">+    file->file_record->counters[POSIX_FILE_ALIGNMENT] = fs_info.block_size;
</span> 
     /* add new record to file hash table */
     HASH_ADD(hlink, posix_runtime->file_hash, file_record->f_id, sizeof(darshan_record_id), file);
     posix_runtime->file_array_ndx++;
 
<span style="color: #000000;background-color: #ddffdd">+    /* XXX: check for lustre and call in */
+#ifndef LL_SUPER_MAGIC
+#define LL_SUPER_MAGIC 0x0BD00BD0
+#endif
+    if(fs_info.fs_type == LL_SUPER_MAGIC)
+        darshan_instrument_lustre_file(newname);
+
</span>     if(newname != name)
         free(newname);
     return(file);
</code></pre>

<br>
</li>

</div>
<div class='footer' style='margin-top: 10px;'>
<p>

<br>
<a href="https://xgitlab.cels.anl.gov/darshan/darshan/compare/d14cd7589d20f229ff43daebd79c980677592e54...657c5b565dd8c7b847c956a39c61f8711ce21833">View it on GitLab</a>.
<br>
You're receiving this email because of your account on xgitlab.cels.anl.gov.
If you'd like to receive fewer emails, you can
adjust your notification settings.

</p>
</div>
</body>
</html>