darshan-log-format.h 4.89 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 24 25 26
/* NOTE: this should be updated when general changes are made to the
 * log format version, NOT when a new version of a module record is
 * introduced -- we have module-specific versions to handle that
 */
27
#define DARSHAN_LOG_VERSION "3.10"
28

29
/* magic number for validating output files and checking byte order */
30
#define DARSHAN_MAGIC_NR 6567223
31

32
/* size (in bytes) of job record */
33
#define DARSHAN_JOB_RECORD_SIZE 4096
34 35

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

38
/* max number of modules that can be used in a darshan log */
39
#define DARSHAN_MAX_MODS 16
40

41 42 43 44 45
/* 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))

46 47 48 49 50
/* compression method used on darshan log file */
enum darshan_comp_type
{
    DARSHAN_ZLIB_COMP,
    DARSHAN_BZIP2_COMP,
51
    DARSHAN_NO_COMP, 
52 53
};

54
typedef uint64_t darshan_record_id;
55

56 57
/* 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
58
 * the respective offset and length of the data in the file, in
59
 * *compressed* terms
60
 */
61
struct darshan_log_map
62
{
63 64
    uint64_t off;
    uint64_t len;
65 66
};

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

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

93 94 95 96 97 98 99 100
/* 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 */
101
struct darshan_base_record
102 103
{
    darshan_record_id id;
104
    int64_t rank;
105 106
};

107 108 109 110 111 112 113 114 115 116 117

/************************************************
 *** 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"
118
#include "darshan-lustre-log-format.h"
119
#include "darshan-stdio-log-format.h"
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136

/* 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) \
137
    X(DARSHAN_BGQ_MOD,      "BG/Q",     DARSHAN_BGQ_VER,        &bgq_logutils) \
Shane Snyder's avatar
Shane Snyder committed
138
    X(DARSHAN_LUSTRE_MOD,   "LUSTRE",   DARSHAN_LUSTRE_VER,     &lustre_logutils) \
139
    X(DARSHAN_STDIO_MOD,    "STDIO",    DARSHAN_STDIO_VER,      &stdio_logutils)
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167

/* 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

168
#endif /* __DARSHAN_LOG_FORMAT_H */