[Darshan-commits] [Git][darshan/darshan][mmap-dev] more mmap logic and instrumentation for testing
Shane Snyder
xgitlab at cels.anl.gov
Tue Oct 13 16:45:05 CDT 2015
Shane Snyder pushed to branch mmap-dev at darshan / darshan
Commits:
c3c5e597 by Shane Snyder at 2015-10-13T16:44:32Z
more mmap logic and instrumentation for testing
- - - - -
4 changed files:
- darshan-runtime/Makefile.in
- darshan-runtime/lib/darshan-core.c
- darshan-runtime/lib/darshan-posix.c
- darshan-util/Makefile.in
Changes:
=====================================
darshan-runtime/Makefile.in
=====================================
--- a/darshan-runtime/Makefile.in
+++ b/darshan-runtime/Makefile.in
@@ -33,15 +33,8 @@ CFLAGS_SHARED = -DDARSHAN_CONFIG_H=\"darshan-runtime-config.h\" -I . -I$(srcdir)
LIBS = -lz @LIBBZ2@
-static-mod-objs = lib/darshan-posix.o lib/darshan-mpiio.o lib/darshan-hdf5.o lib/darshan-pnetcdf.o
-dynamic-mod-objs = lib/darshan-posix.po lib/darshan-mpiio.po lib/darshan-hdf5.po lib/darshan-pnetcdf.po
-
-ifdef DARSHAN_USE_BGQ
-static-mod-objs += lib/darshan-bgq.o
-dynamic-mod-objs += lib/darshan-bgq.po
-CFLAGS += -DDARSHAN_BGQ
-CFLAGS_SHARED += -DDARSHAN_BGQ
-endif
+static-mod-objs = lib/darshan-posix.o
+dynamic-mod-objs = lib/darshan-posix.po
lib::
@mkdir -p $@
=====================================
darshan-runtime/lib/darshan-core.c
=====================================
--- a/darshan-runtime/lib/darshan-core.c
+++ b/darshan-runtime/lib/darshan-core.c
@@ -122,7 +122,7 @@ void darshan_core_initialize(int argc, char **argv)
struct darshan_core_runtime *init_core = NULL;
int internal_timing_flag = 0;
double init_start, init_time, init_max;
- char *mmap_log_name = "darshan-log.out";
+ char mmap_log_name[PATH_MAX];
int mmap_fd;
int mmap_size;
int sys_page_size;
@@ -176,6 +176,26 @@ void darshan_core_initialize(int argc, char **argv)
memset(init_core, 0, sizeof(*init_core));
init_core->wtime_offset = DARSHAN_MPI_CALL(PMPI_Wtime)();
+ /* Use DARSHAN_JOBID_OVERRIDE for the env var for __DARSHAN_JOBID */
+ envstr = getenv(DARSHAN_JOBID_OVERRIDE);
+ if(!envstr)
+ {
+ envstr = __DARSHAN_JOBID;
+ }
+
+ /* find a job id */
+ jobid_str = getenv(envstr);
+ if(jobid_str)
+ {
+ /* in cobalt we can find it in env var */
+ ret = sscanf(jobid_str, "%d", &jobid);
+ }
+ if(!jobid_str || ret != 1)
+ {
+ /* use pid as fall back */
+ jobid = getpid();
+ }
+
sys_page_size = sysconf(_SC_PAGESIZE);
assert(sys_page_size > 0);
@@ -187,7 +207,13 @@ void darshan_core_initialize(int argc, char **argv)
if(mmap_size % sys_page_size)
mmap_size = ((mmap_size / sys_page_size) + 1) * sys_page_size;
- /* TODO: logfile name should have process rank in it for uniqueness */
+ /* construct a unique temporary log file name for this process
+ * to write mmap log data to
+ */
+ snprintf(mmap_log_name, PATH_MAX, "/tmp/darshan_job%d.%d",
+ jobid, my_rank);
+
+ /* create the temporary mmapped darshan log */
mmap_fd = open(mmap_log_name, O_CREAT|O_RDWR|O_EXCL , 0644);
if(mmap_fd < 0)
{
@@ -238,26 +264,6 @@ void darshan_core_initialize(int argc, char **argv)
init_core->mmap_job_p->uid = getuid();
init_core->mmap_job_p->start_time = time(NULL);
init_core->mmap_job_p->nprocs = nprocs;
-
- /* Use DARSHAN_JOBID_OVERRIDE for the env var for __DARSHAN_JOBID */
- envstr = getenv(DARSHAN_JOBID_OVERRIDE);
- if(!envstr)
- {
- envstr = __DARSHAN_JOBID;
- }
-
- /* find a job id */
- jobid_str = getenv(envstr);
- if(jobid_str)
- {
- /* in cobalt we can find it in env var */
- ret = sscanf(jobid_str, "%d", &jobid);
- }
- if(!jobid_str || ret != 1)
- {
- /* use pid as fall back */
- jobid = getpid();
- }
init_core->mmap_job_p->jobid = (int64_t)jobid;
/* if we are using any hints to write the log file, then record those
@@ -299,42 +305,17 @@ void darshan_core_initialize(int argc, char **argv)
void darshan_core_shutdown()
{
-
- return;
-#if 0
int i;
- char *logfile_name;
struct darshan_core_runtime *final_core;
int internal_timing_flag = 0;
- char *envjobid;
- char *jobid_str;
- int jobid;
- struct tm *start_tm;
- time_t start_time_tmp;
- int ret = 0;
- int all_ret = 0;
- int64_t first_start_time;
- int64_t last_end_time;
- int local_mod_use[DARSHAN_MAX_MODS] = {0};
- int global_mod_use_count[DARSHAN_MAX_MODS] = {0};
- darshan_record_id shared_recs[DARSHAN_CORE_MAX_RECORDS] = {0};
double start_log_time;
- double open1, open2;
- double job1, job2;
- double rec1, rec2;
- double mod1[DARSHAN_MAX_MODS] = {0};
- double mod2[DARSHAN_MAX_MODS] = {0};
- double header1, header2;
double tm_end;
- uint64_t gz_fp = 0;
- unsigned char tmp_partial_flag;
- MPI_File log_fh;
- MPI_Status status;
if(getenv("DARSHAN_INTERNAL_TIMING"))
internal_timing_flag = 1;
- start_log_time = DARSHAN_MPI_CALL(PMPI_Wtime)();
+ if(internal_timing_flag)
+ start_log_time = DARSHAN_MPI_CALL(PMPI_Wtime)();
/* disable darhan-core while we shutdown */
DARSHAN_CORE_LOCK();
@@ -346,413 +327,38 @@ void darshan_core_shutdown()
final_core = darshan_core;
darshan_core = NULL;
- /* we also need to set which modules were registered on this process and
- * call into those modules and give them a chance to perform any necessary
- * pre-shutdown steps.
- */
for(i = 0; i < DARSHAN_MAX_MODS; i++)
{
if(final_core->mod_array[i])
{
- local_mod_use[i] = 1;
final_core->mod_array[i]->mod_funcs.begin_shutdown();
}
}
DARSHAN_CORE_UNLOCK();
- logfile_name = malloc(PATH_MAX);
- if(!logfile_name)
- {
- darshan_core_cleanup(final_core);
- return;
- }
-
- /* set darshan job id/metadata and constuct log file name on rank 0 */
- if(my_rank == 0)
- {
- /* Use DARSHAN_JOBID_OVERRIDE for the env var for __DARSHAN_JOBID */
- envjobid = getenv(DARSHAN_JOBID_OVERRIDE);
- if(!envjobid)
- {
- envjobid = __DARSHAN_JOBID;
- }
-
- /* find a job id */
- jobid_str = getenv(envjobid);
- if(jobid_str)
- {
- /* in cobalt we can find it in env var */
- ret = sscanf(jobid_str, "%d", &jobid);
- }
- if(!jobid_str || ret != 1)
- {
- /* use pid as fall back */
- jobid = getpid();
- }
-
- final_core->log_job.jobid = (int64_t)jobid;
-
- /* if we are using any hints to write the log file, then record those
- * hints with the darshan job information
- */
- darshan_log_record_hints_and_ver(final_core);
-
- /* use human readable start time format in log filename */
- start_time_tmp = final_core->log_job.start_time;
- start_tm = localtime(&start_time_tmp);
-
- /* construct log file name */
- darshan_get_logfile_name(logfile_name, jobid, start_tm);
- }
-
- /* broadcast log file name */
- DARSHAN_MPI_CALL(PMPI_Bcast)(logfile_name, PATH_MAX, MPI_CHAR, 0,
- MPI_COMM_WORLD);
-
- if(strlen(logfile_name) == 0)
- {
- /* failed to generate log file name */
- free(logfile_name);
- darshan_core_cleanup(final_core);
- return;
- }
-
- final_core->log_job.end_time = time(NULL);
-
- /* reduce to report first start time and last end time across all ranks
- * at rank 0
- */
- DARSHAN_MPI_CALL(PMPI_Reduce)(&final_core->log_job.start_time, &first_start_time, 1, MPI_LONG_LONG, MPI_MIN, 0, MPI_COMM_WORLD);
- DARSHAN_MPI_CALL(PMPI_Reduce)(&final_core->log_job.end_time, &last_end_time, 1, MPI_LONG_LONG, MPI_MAX, 0, MPI_COMM_WORLD);
- if(my_rank == 0)
- {
- final_core->log_job.start_time = first_start_time;
- final_core->log_job.end_time = last_end_time;
- }
-
- /* reduce the number of times a module was opened globally and bcast to everyone */
- DARSHAN_MPI_CALL(PMPI_Allreduce)(local_mod_use, global_mod_use_count, DARSHAN_MAX_MODS, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
-
- /* get a list of records which are shared across all processes */
- darshan_get_shared_records(final_core, shared_recs);
-
- if(internal_timing_flag)
- open1 = DARSHAN_MPI_CALL(PMPI_Wtime)();
- /* collectively open the darshan log file */
- ret = darshan_log_open_all(logfile_name, &log_fh);
- if(internal_timing_flag)
- open2 = DARSHAN_MPI_CALL(PMPI_Wtime)();
-
- /* error out if unable to open log file */
- DARSHAN_MPI_CALL(PMPI_Allreduce)(&ret, &all_ret, 1, MPI_INT,
- MPI_LOR, MPI_COMM_WORLD);
- if(all_ret != 0)
- {
- if(my_rank == 0)
- {
- fprintf(stderr, "darshan library warning: unable to open log file %s\n",
- logfile_name);
- unlink(logfile_name);
- }
- free(logfile_name);
- darshan_core_cleanup(final_core);
- return;
- }
-
- if(internal_timing_flag)
- job1 = DARSHAN_MPI_CALL(PMPI_Wtime)();
- /* rank 0 is responsible for writing the compressed darshan job information */
- if(my_rank == 0)
- {
- void *pointers[2] = {&final_core->log_job, final_core->trailing_data};
- int lengths[2] = {sizeof(struct darshan_job), strlen(final_core->trailing_data)};
- int comp_buf_sz = 0;
-
- /* compress the job info and the trailing mount/exe data */
- all_ret = darshan_deflate_buffer(pointers, lengths, 2,
- final_core->comp_buf, &comp_buf_sz);
- if(all_ret)
- {
- fprintf(stderr, "darshan library warning: unable to compress job data\n");
- unlink(logfile_name);
- }
- else
- {
- /* write the job information, preallocing space for the log header */
- gz_fp += sizeof(struct darshan_header);
- all_ret = DARSHAN_MPI_CALL(PMPI_File_write_at)(log_fh, gz_fp,
- final_core->comp_buf, comp_buf_sz, MPI_BYTE, &status);
- if(all_ret != MPI_SUCCESS)
- {
- fprintf(stderr, "darshan library warning: unable to write job data to log file %s\n",
- logfile_name);
- unlink(logfile_name);
-
- }
- gz_fp += comp_buf_sz;
- }
- }
-
- /* error out if unable to write job information */
- DARSHAN_MPI_CALL(PMPI_Bcast)(&all_ret, 1, MPI_INT, 0, MPI_COMM_WORLD);
- if(all_ret != 0)
- {
- free(logfile_name);
- darshan_core_cleanup(final_core);
- return;
- }
- if(internal_timing_flag)
- job2 = DARSHAN_MPI_CALL(PMPI_Wtime)();
-
- if(internal_timing_flag)
- rec1 = DARSHAN_MPI_CALL(PMPI_Wtime)();
- /* write the record name->id hash to the log file */
- final_core->log_header.rec_map.off = gz_fp;
- ret = darshan_log_write_record_hash(log_fh, final_core, &gz_fp);
- final_core->log_header.rec_map.len = gz_fp - final_core->log_header.rec_map.off;
-
- /* error out if unable to write record hash */
- DARSHAN_MPI_CALL(PMPI_Allreduce)(&ret, &all_ret, 1, MPI_INT,
- MPI_LOR, MPI_COMM_WORLD);
- if(all_ret != 0)
- {
- if(my_rank == 0)
- {
- fprintf(stderr, "darshan library warning: unable to write record hash to log file %s\n",
- logfile_name);
- unlink(logfile_name);
- }
- free(logfile_name);
- darshan_core_cleanup(final_core);
- return;
- }
- if(internal_timing_flag)
- rec2 = DARSHAN_MPI_CALL(PMPI_Wtime)();
-
- /* loop over globally used darshan modules and:
- * - perform shared file reductions, if possible
- * - get final output buffer
- * - compress (zlib) provided output buffer
- * - append compressed buffer to log file
- * - add module index info (file offset/length) to log header
- * - shutdown the module
- */
- for(i = 0; i < DARSHAN_MAX_MODS; i++)
- {
- struct darshan_core_module* this_mod = final_core->mod_array[i];
- struct darshan_core_record_ref *ref = NULL;
- darshan_record_id mod_shared_recs[DARSHAN_CORE_MAX_RECORDS];
- int mod_shared_rec_cnt = 0;
- void* mod_buf = NULL;
- int mod_buf_sz = 0;
- int j;
-
- if(global_mod_use_count[i] == 0)
- {
- if(my_rank == 0)
- {
- final_core->log_header.mod_map[i].off = 0;
- final_core->log_header.mod_map[i].len = 0;
- }
- continue;
- }
-
- if(internal_timing_flag)
- mod1[i] = DARSHAN_MPI_CALL(PMPI_Wtime)();
-
- /* set the shared file list for this module */
- memset(mod_shared_recs, 0, DARSHAN_CORE_MAX_RECORDS * sizeof(darshan_record_id));
- for(j = 0; j < DARSHAN_CORE_MAX_RECORDS && shared_recs[j] != 0; j++)
- {
- HASH_FIND(hlink, final_core->rec_hash, &shared_recs[j],
- sizeof(darshan_record_id), ref);
- assert(ref);
- if(DARSHAN_CORE_MOD_ISSET(ref->global_mod_flags, i))
- {
- mod_shared_recs[mod_shared_rec_cnt++] = shared_recs[j];
- }
- }
-
- /* if module is registered locally, get the corresponding output buffer
- *
- * NOTE: this function can be used to run collective operations across
- * modules, if there are file records shared globally.
- */
- if(this_mod)
- {
- this_mod->mod_funcs.get_output_data(MPI_COMM_WORLD, mod_shared_recs,
- mod_shared_rec_cnt, &mod_buf, &mod_buf_sz);
- }
-
- /* append this module's data to the darshan log */
- final_core->log_header.mod_map[i].off = gz_fp;
- ret = darshan_log_append_all(log_fh, final_core, mod_buf, mod_buf_sz, &gz_fp);
- final_core->log_header.mod_map[i].len =
- gz_fp - final_core->log_header.mod_map[i].off;
-
- /* error out if the log append failed */
- DARSHAN_MPI_CALL(PMPI_Allreduce)(&ret, &all_ret, 1, MPI_INT,
- MPI_LOR, MPI_COMM_WORLD);
- if(all_ret != 0)
- {
- if(my_rank == 0)
- {
- fprintf(stderr,
- "darshan library warning: unable to write %s module data to log file %s\n",
- darshan_module_names[i], logfile_name);
- unlink(logfile_name);
- }
- free(logfile_name);
- darshan_core_cleanup(final_core);
- return;
- }
-
- /* shutdown module if registered locally */
- if(this_mod)
- {
- this_mod->mod_funcs.shutdown();
- }
- if(internal_timing_flag)
- mod2[i] = DARSHAN_MPI_CALL(PMPI_Wtime)();
- }
-
- /* run a reduction to determine if any application processes had to set the
- * partial flag. this happens when a process has tracked too many records
- * at once and cannot track new records
- */
- DARSHAN_MPI_CALL(PMPI_Reduce)(&(final_core->log_header.partial_flag),
- &tmp_partial_flag, 1, MPI_UNSIGNED_CHAR, MPI_MAX, 0, MPI_COMM_WORLD);
-
- if(internal_timing_flag)
- header1 = DARSHAN_MPI_CALL(PMPI_Wtime)();
- /* rank 0 is responsible for writing the log header */
- if(my_rank == 0)
- {
- /* initialize the remaining header fields */
- strcpy(final_core->log_header.version_string, DARSHAN_LOG_VERSION);
- final_core->log_header.magic_nr = DARSHAN_MAGIC_NR;
- final_core->log_header.comp_type = DARSHAN_ZLIB_COMP;
- final_core->log_header.partial_flag = tmp_partial_flag;
-
- all_ret = DARSHAN_MPI_CALL(PMPI_File_write_at)(log_fh, 0, &(final_core->log_header),
- sizeof(struct darshan_header), MPI_BYTE, &status);
- if(all_ret != MPI_SUCCESS)
- {
- fprintf(stderr, "darshan library warning: unable to write header to log file %s\n",
- logfile_name);
- unlink(logfile_name);
- }
- }
-
- /* error out if unable to write log header */
- DARSHAN_MPI_CALL(PMPI_Bcast)(&all_ret, 1, MPI_INT, 0, MPI_COMM_WORLD);
- if(all_ret != 0)
- {
- free(logfile_name);
- darshan_core_cleanup(final_core);
- return;
- }
- if(internal_timing_flag)
- header2 = DARSHAN_MPI_CALL(PMPI_Wtime)();
+ final_core->mmap_job_p->end_time = time(NULL);
- DARSHAN_MPI_CALL(PMPI_File_close)(&log_fh);
-
- /* if we got this far, there are no errors, so rename from *.darshan_partial
- * to *-<logwritetime>.darshan, which indicates that this log file is
- * complete and ready for analysis
- */
- if(my_rank == 0)
- {
- if(getenv("DARSHAN_LOGFILE"))
- {
-#ifdef __DARSHAN_GROUP_READABLE_LOGS
- chmod(logfile_name, (S_IRUSR|S_IRGRP));
-#else
- chmod(logfile_name, (S_IRUSR));
-#endif
- }
- else
- {
- char* tmp_index;
- double end_log_time;
- char* new_logfile_name;
-
- new_logfile_name = malloc(PATH_MAX);
- if(new_logfile_name)
- {
- new_logfile_name[0] = '\0';
- end_log_time = DARSHAN_MPI_CALL(PMPI_Wtime)();
- strcat(new_logfile_name, logfile_name);
- tmp_index = strstr(new_logfile_name, ".darshan_partial");
- sprintf(tmp_index, "_%d.darshan", (int)(end_log_time-start_log_time+1));
- rename(logfile_name, new_logfile_name);
- /* set permissions on log file */
-#ifdef __DARSHAN_GROUP_READABLE_LOGS
- chmod(new_logfile_name, (S_IRUSR|S_IRGRP));
-#else
- chmod(new_logfile_name, (S_IRUSR));
-#endif
- free(new_logfile_name);
- }
- }
- }
-
- free(logfile_name);
darshan_core_cleanup(final_core);
if(internal_timing_flag)
{
- double open_tm, open_slowest;
- double header_tm, header_slowest;
- double job_tm, job_slowest;
- double rec_tm, rec_slowest;
- double mod_tm[DARSHAN_MAX_MODS], mod_slowest[DARSHAN_MAX_MODS];
double all_tm, all_slowest;
tm_end = DARSHAN_MPI_CALL(PMPI_Wtime)();
- open_tm = open2 - open1;
- header_tm = header2 - header1;
- job_tm = job2 - job1;
- rec_tm = rec2 - rec1;
all_tm = tm_end - start_log_time;
- for(i = 0;i < DARSHAN_MAX_MODS; i++)
- {
- mod_tm[i] = mod2[i] - mod1[i];
- }
- DARSHAN_MPI_CALL(PMPI_Reduce)(&open_tm, &open_slowest, 1,
- MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
- DARSHAN_MPI_CALL(PMPI_Reduce)(&header_tm, &header_slowest, 1,
- MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
- DARSHAN_MPI_CALL(PMPI_Reduce)(&job_tm, &job_slowest, 1,
- MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
- DARSHAN_MPI_CALL(PMPI_Reduce)(&rec_tm, &rec_slowest, 1,
- MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
DARSHAN_MPI_CALL(PMPI_Reduce)(&all_tm, &all_slowest, 1,
MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
- DARSHAN_MPI_CALL(PMPI_Reduce)(mod_tm, mod_slowest, DARSHAN_MAX_MODS,
- MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
if(my_rank == 0)
{
fprintf(stderr, "#darshan:<op>\t<nprocs>\t<time>\n");
- fprintf(stderr, "darshan:log_open\t%d\t%f\n", nprocs, open_slowest);
- fprintf(stderr, "darshan:job_write\t%d\t%f\n", nprocs, job_slowest);
- fprintf(stderr, "darshan:hash_write\t%d\t%f\n", nprocs, rec_slowest);
- fprintf(stderr, "darshan:header_write\t%d\t%f\n", nprocs, header_slowest);
- for(i = 0; i < DARSHAN_MAX_MODS; i++)
- {
- if(global_mod_use_count[i])
- fprintf(stderr, "darshan:%s_shutdown\t%d\t%f\n", darshan_module_names[i],
- nprocs, mod_slowest[i]);
- }
fprintf(stderr, "darshan:core_shutdown\t%d\t%f\n", nprocs, all_slowest);
}
}
return;
-#endif
}
/* *********************************** */
=====================================
darshan-runtime/lib/darshan-posix.c
=====================================
--- a/darshan-runtime/lib/darshan-posix.c
+++ b/darshan-runtime/lib/darshan-posix.c
@@ -346,6 +346,16 @@ static void posix_shutdown(void);
(__file)->file_record->counters[POSIX_STATS] += 1; \
} while(0)
+static double psx_wrap_time = 0.0;
+
+#define PSX_PRE_WRAP() \
+ double pre_wrap = darshan_core_wtime();
+
+#define PSX_POST_WRAP() \
+ double post_wrap = darshan_core_wtime(); \
+ psx_wrap_time += (post_wrap-pre_wrap);
+
+
/**********************************************************
* Wrappers for POSIX I/O functions of interest *
**********************************************************/
@@ -356,6 +366,8 @@ int DARSHAN_DECL(open)(const char *path, int flags, ...)
int ret;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(open);
if(flags & O_CREAT)
@@ -381,6 +393,8 @@ int DARSHAN_DECL(open)(const char *path, int flags, ...)
POSIX_RECORD_OPEN(ret, path, mode, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -390,6 +404,8 @@ int DARSHAN_DECL(open64)(const char *path, int flags, ...)
int ret;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(open64);
if(flags & O_CREAT)
@@ -415,6 +431,8 @@ int DARSHAN_DECL(open64)(const char *path, int flags, ...)
POSIX_RECORD_OPEN(ret, path, mode, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -423,6 +441,8 @@ int DARSHAN_DECL(creat)(const char* path, mode_t mode)
int ret;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(creat);
tm1 = darshan_core_wtime();
@@ -434,6 +454,8 @@ int DARSHAN_DECL(creat)(const char* path, mode_t mode)
POSIX_RECORD_OPEN(ret, path, mode, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -442,6 +464,8 @@ int DARSHAN_DECL(creat64)(const char* path, mode_t mode)
int ret;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(creat64);
tm1 = darshan_core_wtime();
@@ -453,6 +477,8 @@ int DARSHAN_DECL(creat64)(const char* path, mode_t mode)
POSIX_RECORD_OPEN(ret, path, mode, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -462,6 +488,8 @@ FILE* DARSHAN_DECL(fopen)(const char *path, const char *mode)
int fd;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(fopen);
tm1 = darshan_core_wtime();
@@ -478,6 +506,8 @@ FILE* DARSHAN_DECL(fopen)(const char *path, const char *mode)
POSIX_RECORD_OPEN(fd, path, 0, 1, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -487,6 +517,8 @@ FILE* DARSHAN_DECL(fopen64)(const char *path, const char *mode)
int fd;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(fopen64);
tm1 = darshan_core_wtime();
@@ -503,6 +535,8 @@ FILE* DARSHAN_DECL(fopen64)(const char *path, const char *mode)
POSIX_RECORD_OPEN(fd, path, 0, 1, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -511,6 +545,8 @@ int DARSHAN_DECL(mkstemp)(char* template)
int ret;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(mkstemp);
tm1 = darshan_core_wtime();
@@ -522,6 +558,8 @@ int DARSHAN_DECL(mkstemp)(char* template)
POSIX_RECORD_OPEN(ret, template, 0, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -530,6 +568,8 @@ int DARSHAN_DECL(mkostemp)(char* template, int flags)
int ret;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(mkostemp);
tm1 = darshan_core_wtime();
@@ -541,6 +581,8 @@ int DARSHAN_DECL(mkostemp)(char* template, int flags)
POSIX_RECORD_OPEN(ret, template, 0, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -549,6 +591,8 @@ int DARSHAN_DECL(mkstemps)(char* template, int suffixlen)
int ret;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(mkstemps);
tm1 = darshan_core_wtime();
@@ -560,6 +604,8 @@ int DARSHAN_DECL(mkstemps)(char* template, int suffixlen)
POSIX_RECORD_OPEN(ret, template, 0, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -568,6 +614,8 @@ int DARSHAN_DECL(mkostemps)(char* template, int suffixlen, int flags)
int ret;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(mkostemps);
tm1 = darshan_core_wtime();
@@ -579,6 +627,8 @@ int DARSHAN_DECL(mkostemps)(char* template, int suffixlen, int flags)
POSIX_RECORD_OPEN(ret, template, 0, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -588,6 +638,8 @@ ssize_t DARSHAN_DECL(read)(int fd, void *buf, size_t count)
int aligned_flag = 0;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(read);
if((unsigned long)buf % darshan_mem_alignment == 0) aligned_flag = 1;
@@ -601,6 +653,8 @@ ssize_t DARSHAN_DECL(read)(int fd, void *buf, size_t count)
POSIX_RECORD_READ(ret, fd, 0, 0, aligned_flag, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -610,6 +664,8 @@ ssize_t DARSHAN_DECL(write)(int fd, const void *buf, size_t count)
int aligned_flag = 0;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(write);
if((unsigned long)buf % darshan_mem_alignment == 0) aligned_flag = 1;
@@ -623,6 +679,8 @@ ssize_t DARSHAN_DECL(write)(int fd, const void *buf, size_t count)
POSIX_RECORD_WRITE(ret, fd, 0, 0, aligned_flag, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -632,6 +690,8 @@ ssize_t DARSHAN_DECL(pread)(int fd, void *buf, size_t count, off_t offset)
int aligned_flag = 0;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(pread);
if((unsigned long)buf % darshan_mem_alignment == 0) aligned_flag = 1;
@@ -645,6 +705,8 @@ ssize_t DARSHAN_DECL(pread)(int fd, void *buf, size_t count, off_t offset)
POSIX_RECORD_READ(ret, fd, 1, offset, aligned_flag, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -654,6 +716,8 @@ ssize_t DARSHAN_DECL(pwrite)(int fd, const void *buf, size_t count, off_t offset
int aligned_flag = 0;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(pwrite);
if((unsigned long)buf % darshan_mem_alignment == 0) aligned_flag = 1;
@@ -667,6 +731,8 @@ ssize_t DARSHAN_DECL(pwrite)(int fd, const void *buf, size_t count, off_t offset
POSIX_RECORD_WRITE(ret, fd, 1, offset, aligned_flag, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -676,6 +742,8 @@ ssize_t DARSHAN_DECL(pread64)(int fd, void *buf, size_t count, off64_t offset)
int aligned_flag = 0;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(pread64);
if((unsigned long)buf % darshan_mem_alignment == 0) aligned_flag = 1;
@@ -689,6 +757,8 @@ ssize_t DARSHAN_DECL(pread64)(int fd, void *buf, size_t count, off64_t offset)
POSIX_RECORD_READ(ret, fd, 1, offset, aligned_flag, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -698,6 +768,8 @@ ssize_t DARSHAN_DECL(pwrite64)(int fd, const void *buf, size_t count, off64_t of
int aligned_flag = 0;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(pwrite64);
if((unsigned long)buf % darshan_mem_alignment == 0) aligned_flag = 1;
@@ -711,6 +783,8 @@ ssize_t DARSHAN_DECL(pwrite64)(int fd, const void *buf, size_t count, off64_t of
POSIX_RECORD_WRITE(ret, fd, 1, offset, aligned_flag, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -721,6 +795,8 @@ ssize_t DARSHAN_DECL(readv)(int fd, const struct iovec *iov, int iovcnt)
int i;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(readv);
for(i=0; i<iovcnt; i++)
@@ -738,6 +814,8 @@ ssize_t DARSHAN_DECL(readv)(int fd, const struct iovec *iov, int iovcnt)
POSIX_RECORD_READ(ret, fd, 0, 0, aligned_flag, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -748,6 +826,8 @@ ssize_t DARSHAN_DECL(writev)(int fd, const struct iovec *iov, int iovcnt)
int i;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(writev);
for(i=0; i<iovcnt; i++)
@@ -765,6 +845,8 @@ ssize_t DARSHAN_DECL(writev)(int fd, const struct iovec *iov, int iovcnt)
POSIX_RECORD_WRITE(ret, fd, 0, 0, aligned_flag, 0, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -774,6 +856,8 @@ size_t DARSHAN_DECL(fread)(void *ptr, size_t size, size_t nmemb, FILE *stream)
int aligned_flag = 0;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(fread);
if((unsigned long)ptr % darshan_mem_alignment == 0) aligned_flag = 1;
@@ -796,6 +880,8 @@ size_t DARSHAN_DECL(fread)(void *ptr, size_t size, size_t nmemb, FILE *stream)
}
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -805,6 +891,8 @@ size_t DARSHAN_DECL(fwrite)(const void *ptr, size_t size, size_t nmemb, FILE *st
int aligned_flag = 0;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(fwrite);
if((unsigned long)ptr % darshan_mem_alignment == 0) aligned_flag = 1;
@@ -827,6 +915,8 @@ size_t DARSHAN_DECL(fwrite)(const void *ptr, size_t size, size_t nmemb, FILE *st
}
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -836,6 +926,8 @@ off_t DARSHAN_DECL(lseek)(int fd, off_t offset, int whence)
struct posix_file_runtime* file;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(lseek);
tm1 = darshan_core_wtime();
@@ -858,6 +950,8 @@ off_t DARSHAN_DECL(lseek)(int fd, off_t offset, int whence)
POSIX_UNLOCK();
}
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -867,6 +961,8 @@ off_t DARSHAN_DECL(lseek64)(int fd, off_t offset, int whence)
struct posix_file_runtime* file;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(lseek64);
tm1 = darshan_core_wtime();
@@ -889,6 +985,8 @@ off_t DARSHAN_DECL(lseek64)(int fd, off_t offset, int whence)
POSIX_UNLOCK();
}
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -898,6 +996,8 @@ int DARSHAN_DECL(fseek)(FILE *stream, long offset, int whence)
struct posix_file_runtime* file;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(fseek);
tm1 = darshan_core_wtime();
@@ -920,6 +1020,8 @@ int DARSHAN_DECL(fseek)(FILE *stream, long offset, int whence)
POSIX_UNLOCK();
}
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -928,6 +1030,8 @@ int DARSHAN_DECL(__xstat)(int vers, const char *path, struct stat *buf)
int ret;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(__xstat);
tm1 = darshan_core_wtime();
@@ -942,6 +1046,8 @@ int DARSHAN_DECL(__xstat)(int vers, const char *path, struct stat *buf)
POSIX_LOOKUP_RECORD_STAT(path, buf, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -950,6 +1056,8 @@ int DARSHAN_DECL(__xstat64)(int vers, const char *path, struct stat64 *buf)
int ret;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(__xstat64);
tm1 = darshan_core_wtime();
@@ -964,6 +1072,8 @@ int DARSHAN_DECL(__xstat64)(int vers, const char *path, struct stat64 *buf)
POSIX_LOOKUP_RECORD_STAT(path, buf, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -972,6 +1082,8 @@ int DARSHAN_DECL(__lxstat)(int vers, const char *path, struct stat *buf)
int ret;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(__lxstat);
tm1 = darshan_core_wtime();
@@ -986,6 +1098,8 @@ int DARSHAN_DECL(__lxstat)(int vers, const char *path, struct stat *buf)
POSIX_LOOKUP_RECORD_STAT(path, buf, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -994,6 +1108,8 @@ int DARSHAN_DECL(__lxstat64)(int vers, const char *path, struct stat64 *buf)
int ret;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(__lxstat64);
tm1 = darshan_core_wtime();
@@ -1008,6 +1124,8 @@ int DARSHAN_DECL(__lxstat64)(int vers, const char *path, struct stat64 *buf)
POSIX_LOOKUP_RECORD_STAT(path, buf, tm1, tm2);
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1017,6 +1135,8 @@ int DARSHAN_DECL(__fxstat)(int vers, int fd, struct stat *buf)
struct posix_file_runtime* file;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(__fxstat);
tm1 = darshan_core_wtime();
@@ -1035,6 +1155,8 @@ int DARSHAN_DECL(__fxstat)(int vers, int fd, struct stat *buf)
}
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1044,6 +1166,8 @@ int DARSHAN_DECL(__fxstat64)(int vers, int fd, struct stat64 *buf)
struct posix_file_runtime* file;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(__fxstat64);
tm1 = darshan_core_wtime();
@@ -1062,6 +1186,8 @@ int DARSHAN_DECL(__fxstat64)(int vers, int fd, struct stat64 *buf)
}
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1071,6 +1197,8 @@ void* DARSHAN_DECL(mmap)(void *addr, size_t length, int prot, int flags,
void* ret;
struct posix_file_runtime* file;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(mmap);
ret = __real_mmap(addr, length, prot, flags, fd, offset);
@@ -1086,6 +1214,8 @@ void* DARSHAN_DECL(mmap)(void *addr, size_t length, int prot, int flags,
}
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1095,6 +1225,8 @@ void* DARSHAN_DECL(mmap64)(void *addr, size_t length, int prot, int flags,
void* ret;
struct posix_file_runtime* file;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(mmap64);
ret = __real_mmap64(addr, length, prot, flags, fd, offset);
@@ -1110,6 +1242,8 @@ void* DARSHAN_DECL(mmap64)(void *addr, size_t length, int prot, int flags,
}
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1119,6 +1253,8 @@ int DARSHAN_DECL(fsync)(int fd)
struct posix_file_runtime* file;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(fsync);
tm1 = darshan_core_wtime();
@@ -1140,6 +1276,8 @@ int DARSHAN_DECL(fsync)(int fd)
}
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1149,6 +1287,8 @@ int DARSHAN_DECL(fdatasync)(int fd)
struct posix_file_runtime* file;
double tm1, tm2;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(fdatasync);
tm1 = darshan_core_wtime();
@@ -1170,6 +1310,8 @@ int DARSHAN_DECL(fdatasync)(int fd)
}
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1179,6 +1321,8 @@ int DARSHAN_DECL(close)(int fd)
double tm1, tm2;
int ret;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(close);
tm1 = darshan_core_wtime();
@@ -1201,6 +1345,8 @@ int DARSHAN_DECL(close)(int fd)
}
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1211,6 +1357,8 @@ int DARSHAN_DECL(fclose)(FILE *fp)
double tm1, tm2;
int ret;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(fclose);
tm1 = darshan_core_wtime();
@@ -1233,6 +1381,8 @@ int DARSHAN_DECL(fclose)(FILE *fp)
}
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1240,6 +1390,8 @@ int DARSHAN_DECL(aio_read)(struct aiocb *aiocbp)
{
int ret;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(aio_read);
ret = __real_aio_read(aiocbp);
@@ -1251,6 +1403,8 @@ int DARSHAN_DECL(aio_read)(struct aiocb *aiocbp)
POSIX_UNLOCK();
}
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1258,6 +1412,8 @@ int DARSHAN_DECL(aio_write)(struct aiocb *aiocbp)
{
int ret;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(aio_write);
ret = __real_aio_write(aiocbp);
@@ -1269,6 +1425,8 @@ int DARSHAN_DECL(aio_write)(struct aiocb *aiocbp)
POSIX_UNLOCK();
}
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1276,6 +1434,8 @@ int DARSHAN_DECL(aio_read64)(struct aiocb64 *aiocbp)
{
int ret;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(aio_read64);
ret = __real_aio_read64(aiocbp);
@@ -1287,6 +1447,8 @@ int DARSHAN_DECL(aio_read64)(struct aiocb64 *aiocbp)
POSIX_UNLOCK();
}
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1294,6 +1456,8 @@ int DARSHAN_DECL(aio_write64)(struct aiocb64 *aiocbp)
{
int ret;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(aio_write64);
ret = __real_aio_write64(aiocbp);
@@ -1305,6 +1469,8 @@ int DARSHAN_DECL(aio_write64)(struct aiocb64 *aiocbp)
POSIX_UNLOCK();
}
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1315,6 +1481,8 @@ ssize_t DARSHAN_DECL(aio_return)(struct aiocb *aiocbp)
struct posix_aio_tracker *tmp;
int aligned_flag = 0;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(aio_return);
ret = __real_aio_return(aiocbp);
@@ -1343,6 +1511,8 @@ ssize_t DARSHAN_DECL(aio_return)(struct aiocb *aiocbp)
}
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1353,6 +1523,8 @@ ssize_t DARSHAN_DECL(aio_return64)(struct aiocb64 *aiocbp)
struct posix_aio_tracker *tmp;
int aligned_flag = 0;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(aio_return64);
ret = __real_aio_return64(aiocbp);
@@ -1381,6 +1553,8 @@ ssize_t DARSHAN_DECL(aio_return64)(struct aiocb64 *aiocbp)
}
POSIX_UNLOCK();
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1390,6 +1564,8 @@ int DARSHAN_DECL(lio_listio)(int mode, struct aiocb *const aiocb_list[],
int ret;
int i;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(lio_listio);
ret = __real_lio_listio(mode, aiocb_list, nitems, sevp);
@@ -1404,6 +1580,8 @@ int DARSHAN_DECL(lio_listio)(int mode, struct aiocb *const aiocb_list[],
POSIX_UNLOCK();
}
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -1413,6 +1591,8 @@ int DARSHAN_DECL(lio_listio64)(int mode, struct aiocb64 *const aiocb_list[],
int ret;
int i;
+ PSX_PRE_WRAP();
+
MAP_OR_FAIL(lio_listio64);
ret = __real_lio_listio64(mode, aiocb_list, nitems, sevp);
@@ -1427,6 +1607,8 @@ int DARSHAN_DECL(lio_listio64)(int mode, struct aiocb64 *const aiocb_list[],
POSIX_UNLOCK();
}
+ PSX_POST_WRAP();
+
return(ret);
}
@@ -2054,6 +2236,8 @@ static void posix_begin_shutdown()
instrumentation_disabled = 1;
POSIX_UNLOCK();
+ fprintf(stderr, "POSIX:wrappers\t%f\n", psx_wrap_time);
+
return;
}
=====================================
darshan-util/Makefile.in
=====================================
--- a/darshan-util/Makefile.in
+++ b/darshan-util/Makefile.in
@@ -127,6 +127,19 @@ ifeq ($(DARSHAN_ENABLE_SHARED),1)
install -m 755 libdarshan-util.so $(libdir)
endif
install -m 644 $(srcdir)/darshan-logutils.h $(includedir)
+ install -m 644 $(srcdir)/darshan-posix-logutils.h $(includedir)
+ install -m 644 $(srcdir)/darshan-mpiio-logutils.h $(includedir)
+ install -m 644 $(srcdir)/darshan-hdf5-logutils.h $(includedir)
+ install -m 644 $(srcdir)/darshan-pnetcdf-logutils.h $(includedir)
+ install -m 644 $(srcdir)/darshan-bgq-logutils.h $(includedir)
+ install -m 644 $(srcdir)/../darshan-posix-log-format.h $(includedir)
+ install -m 644 $(srcdir)/../darshan-mpiio-log-format.h $(includedir)
+ install -m 644 $(srcdir)/../darshan-hdf5-log-format.h $(includedir)
+ install -m 644 $(srcdir)/../darshan-pnetcdf-log-format.h $(includedir)
+ install -m 644 $(srcdir)/../darshan-bgq-log-format.h $(includedir)
+ install -d $(includedir)/uthash-1.9.2
+ install -d $(includedir)/uthash-1.9.2/src
+ install -m 644 uthash-1.9.2/src/uthash.h $(includedir)/uthash-1.9.2/src/
install -m 644 $(DARSHAN_LOG_FORMAT) $(includedir)
install -m 755 darshan-job-summary/bin/darshan-job-summary.pl $(bindir)
install -d $(libdir)/TeX
View it on GitLab: https://xgitlab.cels.anl.gov/darshan/darshan/commit/c3c5e59770b89b2d00aeb45a1dccbbf132a0514d
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/darshan-commits/attachments/20151013/82894f25/attachment-0001.html>
More information about the Darshan-commits
mailing list