darshan-log-format.h 4.29 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 47 48
/* compression method used on darshan log file */
enum darshan_comp_type
{
    DARSHAN_ZLIB_COMP,
    DARSHAN_BZIP2_COMP,
};

49
typedef uint64_t darshan_record_id;
50

51 52
/* 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
53
 * the respective offset and length of the data in the file, in
54
 * *compressed* terms
55
 */
56
struct darshan_log_map
57
{
58 59
    uint64_t off;
    uint64_t len;
60 61
};

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

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

88
/* minimal record stored for each file/object accessed by Darshan */
89 90 91 92 93 94
struct darshan_record
{
    char* name;
    darshan_record_id id;
};

95 96 97 98 99 100 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

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

152
#endif /* __DARSHAN_LOG_FORMAT_H */