Skip to content

Commit 341f12f

Browse files
committed
Take pthread_id out of extra_info[]
1 parent dd64f89 commit 341f12f

File tree

5 files changed

+60
-29
lines changed

5 files changed

+60
-29
lines changed

darshan-runtime/lib/darshan-dxt.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ static struct dxt_file_record_ref *dxt_posix_track_new_file_record(
108108
darshan_record_id rec_id);
109109
static struct dxt_file_record_ref *dxt_mpiio_track_new_file_record(
110110
darshan_record_id rec_id);
111-
void annotate_trace_segment(char *extra_info_str);
111+
static void annotate_trace_segment(char *extra_info_str);
112112

113113
/* DXT output/cleanup routines for darshan-core */
114114
static void dxt_posix_output(
@@ -263,6 +263,7 @@ void dxt_posix_write(darshan_record_id rec_id, int64_t offset,
263263
rec_ref->write_traces[file_rec->write_count].length = length;
264264
rec_ref->write_traces[file_rec->write_count].start_time = start_time;
265265
rec_ref->write_traces[file_rec->write_count].end_time = end_time;
266+
rec_ref->write_traces[file_rec->write_count].pthread_id = (unsigned long)pthread_self();
266267
annotate_trace_segment(rec_ref->write_traces[file_rec->write_count].extra_info);
267268
file_rec->write_count += 1;
268269

@@ -309,6 +310,7 @@ void dxt_posix_read(darshan_record_id rec_id, int64_t offset,
309310
rec_ref->read_traces[file_rec->read_count].length = length;
310311
rec_ref->read_traces[file_rec->read_count].start_time = start_time;
311312
rec_ref->read_traces[file_rec->read_count].end_time = end_time;
313+
rec_ref->read_traces[file_rec->read_count].pthread_id = (unsigned long)pthread_self();
312314
annotate_trace_segment(rec_ref->read_traces[file_rec->read_count].extra_info);
313315
file_rec->read_count += 1;
314316

@@ -355,6 +357,7 @@ void dxt_mpiio_write(darshan_record_id rec_id, int64_t offset,
355357
rec_ref->write_traces[file_rec->write_count].offset = offset;
356358
rec_ref->write_traces[file_rec->write_count].start_time = start_time;
357359
rec_ref->write_traces[file_rec->write_count].end_time = end_time;
360+
rec_ref->write_traces[file_rec->write_count].pthread_id = (unsigned long)pthread_self();
358361
annotate_trace_segment(rec_ref->write_traces[file_rec->write_count].extra_info);
359362
file_rec->write_count += 1;
360363

@@ -401,6 +404,7 @@ void dxt_mpiio_read(darshan_record_id rec_id, int64_t offset,
401404
rec_ref->read_traces[file_rec->read_count].offset = offset;
402405
rec_ref->read_traces[file_rec->read_count].start_time = start_time;
403406
rec_ref->read_traces[file_rec->read_count].end_time = end_time;
407+
rec_ref->read_traces[file_rec->read_count].pthread_id = (unsigned long)pthread_self();
404408
annotate_trace_segment(rec_ref->read_traces[file_rec->read_count].extra_info);
405409
file_rec->read_count += 1;
406410

@@ -765,19 +769,14 @@ static struct dxt_file_record_ref *dxt_mpiio_track_new_file_record(
765769
return(rec_ref);
766770
}
767771

768-
void annotate_trace_segment(char *extra_info_str)
772+
static void annotate_trace_segment(char *extra_info_str)
769773
{
770774
char *extra_info_env = getenv("DARSHAN_DXT_EXTRA_INFO");
771775
if (extra_info_env != NULL) {
772776
strncpy(extra_info_str, extra_info_env, EXTRA_INFO_LEN-1);
773777
} else {
774778
extra_info_str[0] = '\0';
775779
}
776-
unsigned long pthread_id = (unsigned long)pthread_self();
777-
if(strlen(extra_info_str))
778-
strcat(extra_info_str, " ");
779-
snprintf(extra_info_str + strlen(extra_info_str), EXTRA_INFO_LEN-1-strlen(extra_info_str),
780-
"pthread_id=%lu", pthread_id);
781780

782781
return;
783782
}

darshan-util/darshan-dxt-logutils.c

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ static int dxt_log_get_posix_file(darshan_fd fd, void** dxt_posix_buf_p)
131131

132132
/* Check POSIX DXT format version. When > 1, segment_info contains extra info */
133133
if (fd->mod_ver[DXT_POSIX_MOD] == 1) {
134-
io_trace_size = rw_count * (sizeof(segment_info) - EXTRA_INFO_LEN);
134+
io_trace_size = rw_count * (sizeof(segment_info) - sizeof(unsigned long) - EXTRA_INFO_LEN);
135135
buf = (char*) malloc(io_trace_size);
136136
if (!buf) return(-1);
137137
}
@@ -150,7 +150,7 @@ static int dxt_log_get_posix_file(darshan_fd fd, void** dxt_posix_buf_p)
150150
size_t j;
151151
char *src = buf;
152152
char *dest = (char *)rec + sizeof(struct dxt_file_record);
153-
size_t rec_size = sizeof(segment_info) - EXTRA_INFO_LEN;
153+
size_t rec_size = sizeof(segment_info) - sizeof(unsigned long) - EXTRA_INFO_LEN;
154154
for (j=0; j<rw_count; j++) {
155155
memcpy(dest, src, rec_size);
156156
src += rec_size;
@@ -236,7 +236,7 @@ static int dxt_log_get_mpiio_file(darshan_fd fd, void** dxt_mpiio_buf_p)
236236

237237
/* Check MPIIO DXT format version. When > 2, segment_info contains extra info */
238238
if (fd->mod_ver[DXT_MPIIO_MOD] < 3) {
239-
io_trace_size = rw_count * (sizeof(segment_info) - EXTRA_INFO_LEN);
239+
io_trace_size = rw_count * (sizeof(segment_info) - sizeof(unsigned long) - EXTRA_INFO_LEN);
240240
buf = (char*) malloc(io_trace_size);
241241
if (!buf) return(-1);
242242
}
@@ -255,7 +255,7 @@ static int dxt_log_get_mpiio_file(darshan_fd fd, void** dxt_mpiio_buf_p)
255255
size_t j;
256256
char *src = buf;
257257
char *dest = (char *)rec + sizeof(struct dxt_file_record);
258-
size_t rec_size = sizeof(segment_info) - EXTRA_INFO_LEN;
258+
size_t rec_size = sizeof(segment_info) - sizeof(unsigned long) - EXTRA_INFO_LEN;
259259
for (j=0; j<rw_count; j++) {
260260
memcpy(dest, src, rec_size);
261261
src += rec_size;
@@ -351,6 +351,7 @@ void dxt_log_print_posix_file(void *posix_file_rec, char *file_name,
351351
int64_t length;
352352
double start_time;
353353
double end_time;
354+
unsigned long pthread_id;
354355
char *extra_info;
355356
int i, j;
356357

@@ -407,7 +408,10 @@ void dxt_log_print_posix_file(void *posix_file_rec, char *file_name,
407408
}
408409

409410
/* Print header */
410-
printf("# Module Rank Wt/Rd Segment Offset Length Start(s) End(s)");
411+
if (mod_ver[DXT_POSIX_MOD] > 1)
412+
printf("# Module Rank Pthread-ID Wt/Rd Segment Offset Length Start(s) End(s)");
413+
else
414+
printf("# Module Rank Wt/Rd Segment Offset Length Start(s) End(s)");
411415

412416
if (lustreFS) {
413417
printf(" [OST]");
@@ -422,9 +426,14 @@ void dxt_log_print_posix_file(void *posix_file_rec, char *file_name,
422426
length = io_trace[i].length;
423427
start_time = io_trace[i].start_time;
424428
end_time = io_trace[i].end_time;
429+
pthread_id = io_trace[i].pthread_id;
425430
extra_info = io_trace[i].extra_info;
431+
if (extra_info == NULL || *extra_info == '\0') extra_info = "None";
426432

427-
printf("%8s%8" PRId64 "%7s%9d%16" PRId64 "%16" PRId64 "%12.4f%12.4f ", "X_POSIX", rank, "write", i, offset, length, start_time, end_time);
433+
if (mod_ver[DXT_POSIX_MOD] > 1)
434+
printf("%8s%8" PRId64 "%18lu%7s%9d%16" PRId64 "%16" PRId64 "%12.4f%12.4f ", "X_POSIX", rank, pthread_id, "write", i, offset, length, start_time, end_time);
435+
else
436+
printf("%8s%8" PRId64 "%7s%9d%16" PRId64 "%16" PRId64 "%12.4f%12.4f ", "X_POSIX", rank, "write", i, offset, length, start_time, end_time);
428437

429438
if (lustreFS) {
430439
cur_file_offset = offset;
@@ -459,9 +468,10 @@ void dxt_log_print_posix_file(void *posix_file_rec, char *file_name,
459468
}
460469
cur_ost_offset += stripe_count;
461470
}
471+
if (rec->num_comps) printf(" ");
462472
}
463-
if (mod_ver[DXT_POSIX_MOD] > 1 && extra_info != NULL)
464-
printf(" %s\n", extra_info);
473+
if (mod_ver[DXT_POSIX_MOD] > 1)
474+
printf("%s\n", extra_info);
465475
else
466476
printf("\n");
467477
}
@@ -471,9 +481,14 @@ void dxt_log_print_posix_file(void *posix_file_rec, char *file_name,
471481
length = io_trace[i].length;
472482
start_time = io_trace[i].start_time;
473483
end_time = io_trace[i].end_time;
484+
pthread_id = io_trace[i].pthread_id;
474485
extra_info = io_trace[i].extra_info;
486+
if (extra_info == NULL || *extra_info == '\0') extra_info = "None";
475487

476-
printf("%8s%8" PRId64 "%7s%9d%16" PRId64 "%16" PRId64 "%12.4f%12.4f ", "X_POSIX", rank, "read", (int)(i - write_count), offset, length, start_time, end_time);
488+
if (mod_ver[DXT_POSIX_MOD] > 1)
489+
printf("%8s%8" PRId64 "%18lu%7s%9d%16" PRId64 "%16" PRId64 "%12.4f%12.4f ", "X_POSIX", rank, pthread_id, "read", (int)(i - write_count), offset, length, start_time, end_time);
490+
else
491+
printf("%8s%8" PRId64 "%7s%9d%16" PRId64 "%16" PRId64 "%12.4f%12.4f ", "X_POSIX", rank, "read", (int)(i - write_count), offset, length, start_time, end_time);
477492

478493
if (lustreFS) {
479494
cur_file_offset = offset;
@@ -508,10 +523,11 @@ void dxt_log_print_posix_file(void *posix_file_rec, char *file_name,
508523
}
509524
cur_ost_offset += stripe_count;
510525
}
526+
if (rec->num_comps) printf(" ");
511527
}
512528

513-
if (mod_ver[DXT_POSIX_MOD] > 1 && extra_info != NULL)
514-
printf(" %s\n", extra_info);
529+
if (mod_ver[DXT_POSIX_MOD] > 1)
530+
printf("%s\n", extra_info);
515531
else
516532
printf("\n");
517533
}
@@ -528,6 +544,7 @@ void dxt_log_print_mpiio_file(void *mpiio_file_rec, char *file_name,
528544
int64_t offset;
529545
double start_time;
530546
double end_time;
547+
unsigned long pthread_id;
531548
char * extra_info;
532549
int i;
533550

@@ -549,22 +566,23 @@ void dxt_log_print_mpiio_file(void *mpiio_file_rec, char *file_name,
549566
printf("# DXT, mnt_pt: %s, fs_type: %s\n", mnt_pt, fs_type);
550567

551568
/* Print header */
552-
printf("# Module Rank Wt/Rd Segment Offset Length Start(s) End(s)");
553569
if (mod_ver[DXT_MPIIO_MOD] > 2)
554-
printf(" Extra info");
555-
printf("\n");
570+
printf("# Module Rank Pthread-ID Wt/Rd Segment Offset Length Start(s) End(s) Extra info\n");
571+
else
572+
printf("# Module Rank Wt/Rd Segment Offset Length Start(s) End(s)\n");
556573

557574
/* Print IO Traces information */
558575
for (i = 0; i < write_count; i++) {
559576
offset = io_trace[i].offset;
560577
length = io_trace[i].length;
561578
start_time = io_trace[i].start_time;
562579
end_time = io_trace[i].end_time;
580+
pthread_id = io_trace[i].pthread_id;
563581
extra_info = io_trace[i].extra_info;
564-
if (extra_info == NULL) extra_info = "";
582+
if (extra_info == NULL || *extra_info == '\0') extra_info = "None";
565583

566-
if (mod_ver[DXT_MPIIO_MOD] > 2 && extra_info != NULL)
567-
printf("%8s%8" PRId64 "%7s%9d%16" PRId64 "%16" PRId64 "%12.4f%12.4f\t%s\n", "X_MPIIO", rank, "write", i, offset, length, start_time, end_time, extra_info);
584+
if (mod_ver[DXT_MPIIO_MOD] > 2)
585+
printf("%8s%8" PRId64 "%18lu%7s%9d%16" PRId64 "%16" PRId64 "%12.4f%12.4f %s\n", "X_MPIIO", rank, pthread_id, "write", i, offset, length, start_time, end_time, extra_info);
568586
else
569587
printf("%8s%8" PRId64 "%7s%9d%16" PRId64 "%16" PRId64 "%12.4f%12.4f\n", "X_MPIIO", rank, "write", i, offset, length, start_time, end_time);
570588
}
@@ -574,11 +592,12 @@ void dxt_log_print_mpiio_file(void *mpiio_file_rec, char *file_name,
574592
length = io_trace[i].length;
575593
start_time = io_trace[i].start_time;
576594
end_time = io_trace[i].end_time;
595+
pthread_id = io_trace[i].pthread_id;
577596
extra_info = io_trace[i].extra_info;
578-
if (extra_info == NULL) extra_info = "";
597+
if (extra_info == NULL || *extra_info == '\0') extra_info = "None";
579598

580-
if (mod_ver[DXT_MPIIO_MOD] > 2 && extra_info != NULL)
581-
printf("%8s%8" PRId64 "%7s%9d%16" PRId64 "%16" PRId64 "%12.4f%12.4f\t%s\n", "X_MPIIO", rank, "read", (int)(i - write_count), offset, length, start_time, end_time, extra_info);
599+
if (mod_ver[DXT_MPIIO_MOD] > 2)
600+
printf("%8s%8" PRId64 "%18lu%7s%9d%16" PRId64 "%16" PRId64 "%12.4f%12.4f %s\n", "X_MPIIO", rank, pthread_id, "read", (int)(i - write_count), offset, length, start_time, end_time, extra_info);
582601
else
583602
printf("%8s%8" PRId64 "%7s%9d%16" PRId64 "%16" PRId64 "%12.4f%12.4f\n", "X_MPIIO", rank, "read", (int)(i - write_count), offset, length, start_time, end_time);
584603
}

darshan-util/pydarshan/darshan/backend/api_def_c.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@
207207
int64_t length;
208208
double start_time;
209209
double end_time;
210+
unsigned long pthread_id;
210211
char extra_info[EXTRA_INFO_LEN];
211212
} segment_info;
212213

darshan-util/pydarshan/darshan/backend/cffi_backend.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -603,12 +603,15 @@ def log_get_dxt_record(log, mod_name, reads=True, writes=True, dtype='dict'):
603603
# retrieve file's DXT_MPIIO version number
604604
dxt_mpiio_ver = log['modules']['DXT_MPIIO']['ver']
605605

606+
append_pthread_id = True
606607
append_extra_info = True
607608
if mod_name == 'DXT_POSIX' and dxt_posix_ver < 2:
608-
# DXT_POSIX_VER 2 and later has extra_info field added
609+
# DXT_POSIX_VER 2 and later has pthread_id and extra_info field added
610+
append_pthread_id = False
609611
append_extra_info = False
610612
elif mod_name == 'DXT_MPIIO' and dxt_mpiio_ver < 3:
611-
# DXT_MPIIO_VER 3 and later has extra_info field added
613+
# DXT_MPIIO_VER 3 and later has pthread_id and extra_info field added
614+
append_pthread_id = False
612615
append_extra_info = False
613616

614617
rec = {}
@@ -644,6 +647,10 @@ def log_get_dxt_record(log, mod_name, reads=True, writes=True, dtype='dict'):
644647
"end_time": segments[i].end_time
645648
}
646649

650+
if append_pthread_id:
651+
# append field of pthread_id
652+
seg["pthread_id"] = segments[i].pthread_id
653+
647654
if append_extra_info:
648655
# append field of extra_info
649656
info_str = ffi.string(segments[i].extra_info)
@@ -666,6 +673,10 @@ def log_get_dxt_record(log, mod_name, reads=True, writes=True, dtype='dict'):
666673
"end_time": segments[i].end_time
667674
}
668675

676+
if append_pthread_id:
677+
# append field of pthread_id
678+
seg["pthread_id"] = segments[i].pthread_id
679+
669680
if append_extra_info:
670681
# append field of extra_info
671682
info_str = ffi.string(segments[i].extra_info)

include/darshan-dxt-log-format.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ typedef struct segment_info {
2222
int64_t length;
2323
double start_time;
2424
double end_time;
25+
unsigned long pthread_id;
2526
char extra_info[EXTRA_INFO_LEN];
2627
} segment_info;
2728

0 commit comments

Comments
 (0)