[Darshan-commits] [Git][darshan/darshan][dev-stdio-utils] implement file list modes for stdio

Philip Carns xgitlab at cels.anl.gov
Sun Sep 18 09:37:45 CDT 2016


Philip Carns pushed to branch dev-stdio-utils at darshan / darshan


Commits:
cb7397ac by Phil Carns at 2016-09-18T10:36:14-04:00
implement file list modes for stdio

- - - - -


1 changed file:

- darshan-util/darshan-parser.c


Changes:

=====================================
darshan-util/darshan-parser.c
=====================================
--- a/darshan-util/darshan-parser.c
+++ b/darshan-util/darshan-parser.c
@@ -116,6 +116,7 @@ void mpiio_file_list(hash_entry_t *file_hash, struct darshan_name_record_ref *na
 void stdio_accum_perf(struct darshan_stdio_file *pfile, perf_data_t *pdata);
 void stdio_accum_file(struct darshan_stdio_file *pfile, hash_entry_t *hfile, int64_t nprocs);
 void stdio_calc_file(hash_entry_t *file_hash, file_data_t *fdata);
+void stdio_file_list(hash_entry_t *file_hash, struct darshan_name_record_ref *name_hash, int detail_flag);
 
 void calc_perf(perf_data_t *pdata, int64_t nprocs);
 
@@ -643,6 +644,13 @@ int main(int argc, char **argv)
                 else
                     mpiio_file_list(file_hash, name_hash, 0);
             }
+            else if(i == DARSHAN_STDIO_MOD)
+            {
+                if(mask & OPTION_FILE_LIST_DETAILED)
+                    stdio_file_list(file_hash, name_hash, 1);
+                else
+                    stdio_file_list(file_hash, name_hash, 0);
+            }
         }
 
         /* reset data structures for next module */
@@ -1700,6 +1708,90 @@ void mpiio_print_total_file(struct darshan_mpiio_file *mfile)
     return;
 }
 
+void stdio_file_list(hash_entry_t *file_hash,
+                     struct darshan_name_record_ref *name_hash,
+                     int detail_flag)
+{
+    hash_entry_t *curr = NULL;
+    hash_entry_t *tmp = NULL;
+    struct darshan_stdio_file *file_rec = NULL;
+    struct darshan_name_record_ref *ref = NULL;
+    int i;
+
+    /* list of columns:
+     *
+     * normal mode
+     * - file id
+     * - file name
+     * - nprocs
+     * - slowest I/O time
+     * - average cumulative I/O time
+     *
+     * detailed mode
+     * - first open
+     * - first read
+     * - first write
+     * - last read
+     * - last write
+     * - last close
+     * - STDIO opens
+     */
+
+    if(detail_flag)
+        printf("\n# Per-file summary of I/O activity (detailed).\n");
+    else
+        printf("\n# Per-file summary of I/O activity.\n");
+
+    printf("# <record_id>: darshan record id for this file\n");
+    printf("# <file_name>: full file name\n");
+    printf("# <nprocs>: number of processes that opened the file\n");
+    printf("# <slowest>: (estimated) time in seconds consumed in IO by slowest process\n");
+    printf("# <avg>: average time in seconds consumed in IO per process\n");
+    if(detail_flag)
+    {
+        printf("# <start_{open/close/write/read}>: start timestamp of first open, close, write, or read\n");
+        printf("# <end_{open/close/write/read}>: end timestamp of last open, close, write, or read\n");
+        printf("# <stdio_opens>: STDIO open calls\n");
+    }
+    
+    printf("\n# <record_id>\t<file_name>\t<nprocs>\t<slowest>\t<avg>");
+    if(detail_flag)
+    {
+        printf("\t<start_open>\t<start_close>\t<start_write>\t<start_read>");
+        printf("\t<end_open>\t<end_close>\t<end_write>\t<end_read>\t<stdio_opens>");
+    }
+    printf("\n");
+
+    HASH_ITER(hlink, file_hash, curr, tmp)
+    {
+        file_rec = (struct darshan_stdio_file*)curr->rec_dat;
+        assert(file_rec);
+
+        HASH_FIND(hlink, name_hash, &(curr->rec_id), sizeof(darshan_record_id), ref);
+        assert(ref);
+
+        printf("%" PRIu64 "\t%s\t%" PRId64 "\t%f\t%f",
+            curr->rec_id,
+            ref->name_record->name,
+            curr->procs,
+            curr->slowest_time,
+            curr->cumul_time/(double)curr->procs);
+
+        if(detail_flag)
+        {
+            for(i=STDIO_F_OPEN_START_TIMESTAMP; i<=STDIO_F_READ_END_TIMESTAMP; i++)
+            {
+                printf("\t%f", file_rec->fcounters[i]);
+            }
+            printf("\t%" PRId64, file_rec->counters[STDIO_OPENS]);
+        }
+        printf("\n");
+    }
+
+    return;
+}
+
+
 void posix_file_list(hash_entry_t *file_hash,
                      struct darshan_name_record_ref *name_hash,
                      int detail_flag)



View it on GitLab: https://xgitlab.cels.anl.gov/darshan/darshan/commit/cb7397ac971452161194a26d7018d1693e1dd908
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/darshan-commits/attachments/20160918/a8e45d06/attachment-0001.html>


More information about the Darshan-commits mailing list