darshan-log-format.h 3.47 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
#define DARSHAN_MAX_MODS 16
35 36 37 38 39 40

/* X-macro for keeping module ordering consistent */
/* NOTE: first val used to define module enum values, 
 * second val used to define module name strings, and
 * third val is used to provide the name of a 
 * corresponding logutils structure for parsing module
Shane Snyder's avatar
Shane Snyder committed
41 42 43
 * data out of the log file (only used in darshan-util
 * component -- NULL can be passed if there are no
 * logutil definitions)
44
 */
45
#define DARSHAN_MODULE_IDS \
46
    X(DARSHAN_NULL_MOD, "NULL", NULL) \
Shane Snyder's avatar
Shane Snyder committed
47 48 49 50 51
    X(DARSHAN_POSIX_MOD, "POSIX", &posix_logutils) \
    X(DARSHAN_MPIIO_MOD, "MPI-IO", &mpiio_logutils) \
    X(DARSHAN_HDF5_MOD, "HDF5", &hdf5_logutils) \
    X(DARSHAN_PNETCDF_MOD, "PNETCDF", &pnetcdf_logutils) \
    X(DARSHAN_BGQ_MOD, "BG/Q", &bgq_logutils)
52

53 54 55 56
/* 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)
 */
57
#define X(a, b, c) a,
58 59
typedef enum
{
60
    DARSHAN_MODULE_IDS
61
} darshan_module_id;
62
#undef X
63

64
/* module name strings */
65
#define X(a, b, c) b,
Shane Snyder's avatar
Shane Snyder committed
66
static char * const darshan_module_names[] =
67
{
68
    DARSHAN_MODULE_IDS
69
};
70
#undef X
71

72 73 74 75 76
/* 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))

77 78 79
/* compression method used on darshan log file */
enum darshan_comp_type
{
80
    DARSHAN_NO_COMP, 
81 82 83 84
    DARSHAN_ZLIB_COMP,
    DARSHAN_BZIP2_COMP,
};

85
typedef uint64_t darshan_record_id;
86

87 88
/* 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
89
 * the respective offset and length of the data in the file, in
Shane Snyder's avatar
Shane Snyder committed
90
 * *compressed* terms
91
 */
92
struct darshan_log_map
93
{
94 95
    uint64_t off;
    uint64_t len;
96 97
};

98 99 100
/* the darshan header stores critical metadata needed for correctly
 * reading the contents of the corresponding Darshan log
 */
101
struct darshan_header
102
{
103 104
    char version_string[8];
    int64_t magic_nr;
Shane Snyder's avatar
Shane Snyder committed
105
    unsigned char comp_type;
106
    uint32_t partial_flag;
107 108
    struct darshan_log_map rec_map;
    struct darshan_log_map mod_map[DARSHAN_MAX_MODS];
109 110
};

111
/* job-level metadata stored for this application */
112
#define DARSHAN_JOB_METADATA_LEN 1024 /* including null terminator! */
113 114
struct darshan_job
{
115 116 117 118
    int64_t uid;
    int64_t start_time;
    int64_t end_time;
    int64_t nprocs;
119
    int64_t jobid;
120
    char metadata[DARSHAN_JOB_METADATA_LEN];
121 122
};

123
/* minimal record stored for each file/object accessed by Darshan */
124 125 126 127 128 129
struct darshan_record
{
    char* name;
    darshan_record_id id;
};

130
#endif /* __DARSHAN_LOG_FORMAT_H */