darshan-log-format.h 4.46 KB
Newer Older
1
/*
2
3
4
 * Copyright (C) 2015 University of Chicago.
 * See COPYRIGHT notice in top-level directory.
 *
5
6
 */

7
8
9
10
11
12
#ifndef __DARSHAN_LOG_FORMAT_H
#define __DARSHAN_LOG_FORMAT_H

#include <unistd.h>
#include <sys/types.h>
#include <stdint.h>
13
#include <inttypes.h>
14

15
16
#if !defined PRId64
#error failed to detect PRId64
17
#endif
18
19
#if !defined PRIu64
#error failed to detect PRIu64
Philip Carns's avatar
Philip Carns committed
20
#endif
21

22
/* update this on file format changes */
23
#define DARSHAN_LOG_VERSION "3.00"
24

25
/* magic number for validating output files and checking byte order */
26
#define DARSHAN_MAGIC_NR 6567223
27

28
/* size (in bytes) of job record */
29
#define DARSHAN_JOB_RECORD_SIZE 4096
30
31

/* max length of exe string within job record (not counting '\0') */
32
#define DARSHAN_EXE_LEN (DARSHAN_JOB_RECORD_SIZE - sizeof(struct darshan_job) - 1)
33

34
/* max number of modules that can be used in a darshan log */
35
#define DARSHAN_MAX_MODS 16
36

37
38
39
40
41
/* simple macros for accessing module flag bitfields */
#define DARSHAN_MOD_FLAG_SET(flags, id) flags = (flags | (1 << id))
#define DARSHAN_MOD_FLAG_UNSET(flags, id) flags = (flags & ~(1 << id))
#define DARSHAN_MOD_FLAG_ISSET(flags, id) (flags & (1 << id))

42
43
44
45
46
/* compression method used on darshan log file */
enum darshan_comp_type
{
    DARSHAN_ZLIB_COMP,
    DARSHAN_BZIP2_COMP,
47
    DARSHAN_NO_COMP, 
48
49
};

50
typedef uint64_t darshan_record_id;
51

52
53
/* the darshan_log_map structure is used to indicate the location of
 * specific module data in a Darshan log. Note that 'off' and 'len' are
54
 * the respective offset and length of the data in the file, in
Shane Snyder's avatar
Shane Snyder committed
55
 * *compressed* terms
56
 */
57
struct darshan_log_map
58
{
59
60
    uint64_t off;
    uint64_t len;
61
62
};

63
64
65
/* the darshan header stores critical metadata needed for correctly
 * reading the contents of the corresponding Darshan log
 */
66
struct darshan_header
67
{
68
69
    char version_string[8];
    int64_t magic_nr;
Shane Snyder's avatar
Shane Snyder committed
70
    unsigned char comp_type;
71
    uint32_t partial_flag;
72
    struct darshan_log_map name_map;
73
    struct darshan_log_map mod_map[DARSHAN_MAX_MODS];
74
    uint32_t mod_ver[DARSHAN_MAX_MODS];
75
76
};

77
/* job-level metadata stored for this application */
78
#define DARSHAN_JOB_METADATA_LEN 1024 /* including null terminator! */
79
80
struct darshan_job
{
81
82
83
84
    int64_t uid;
    int64_t start_time;
    int64_t end_time;
    int64_t nprocs;
85
    int64_t jobid;
86
    char metadata[DARSHAN_JOB_METADATA_LEN];
87
88
};

89
90
91
92
93
94
95
96
/* record to store name->darshan_id mapping for each registered record */
struct darshan_name_record
{
    darshan_record_id id;
    char name[1];
};

/* base record definition that can be used by modules */
97
struct darshan_base_record
98
99
{
    darshan_record_id id;
100
    int64_t rank;
101
102
};

103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159

/************************************************
 *** module-specific includes and definitions ***
 ************************************************/

#include "darshan-null-log-format.h"
#include "darshan-posix-log-format.h"
#include "darshan-mpiio-log-format.h"
#include "darshan-hdf5-log-format.h"
#include "darshan-pnetcdf-log-format.h"
#include "darshan-bgq-log-format.h"

/* X-macro for keeping module ordering consistent */
/* NOTE: first val used to define module enum values, 
 * second val used to define module name strings,
 * third val is the log format version for the module,
 * and fourth val is used to provide the name of a 
 * corresponding logutils structure for parsing module
 * data out of the log file (only used in darshan-util
 * component -- NULL can be passed if there are no
 * logutil definitions)
 */
#define DARSHAN_MODULE_IDS \
    X(DARSHAN_NULL_MOD,     "NULL",     DARSHAN_NULL_VER,       NULL) \
    X(DARSHAN_POSIX_MOD,    "POSIX",    DARSHAN_POSIX_VER,      &posix_logutils) \
    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) \
    X(DARSHAN_BGQ_MOD,      "BG/Q",     DARSHAN_BGQ_VER,        &bgq_logutils)

/* unique identifiers to distinguish between available darshan modules */
/* NOTES: - valid ids range from [0...DARSHAN_MAX_MODS-1]
 *        - order of ids control module shutdown order (and consequently, order in log file)
 */
#define X(a, b, c, d) a,
typedef enum
{
    DARSHAN_MODULE_IDS
} darshan_module_id;
#undef X

/* module name strings */
#define X(a, b, c, d) b,
static char * const darshan_module_names[] =
{
    DARSHAN_MODULE_IDS
};
#undef X

/* module version numbers */
#define X(a, b, c, d) c,
static const int darshan_module_versions[] =
{
    DARSHAN_MODULE_IDS
};
#undef X

160
#endif /* __DARSHAN_LOG_FORMAT_H */