darshan-log-format.h 2.83 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
35
typedef uint64_t darshan_record_id;

36
37
38
39
40
41
42
43
#define DARSHAN_MAX_MODS 16
#define DARSHAN_MODULE_IDS \
    X(DARSHAN_NULL_MOD,     "NULL") \
    X(DARSHAN_POSIX_MOD,    "POSIX") \
    X(DARSHAN_MPIIO_MOD,    "MPI-IO") \
    X(DARSHAN_HDF5_MOD,     "HDF5") \
    X(DARSHAN_PNETCDF_MOD,  "PNETCDF")

44
45
46
47
/* 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)
 */
48
#define X(a, b) a,
49
50
typedef enum
{
51
    DARSHAN_MODULE_IDS
52
} darshan_module_id;
53
#undef X
54

55
56
/* module name strings */
#define X(a, b) b,
Shane Snyder's avatar
Shane Snyder committed
57
static char * const darshan_module_names[] =
58
{
59
    DARSHAN_MODULE_IDS
60
};
61
#undef X
62

63
64
65
66
67
68
69
/* compression method used on darshan log file */
enum darshan_comp_type
{
    DARSHAN_ZLIB_COMP,
    DARSHAN_BZIP2_COMP,
};

70
71
72
73
74
75
76
/* 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
 * the respective offset and length of the data in the file, in *uncompressed*
 * terms -- this is nonintuitive since the data is compressed, but this is
 * done so we can utilize the gzread interface for all Darshan log reading
 * utilities. 
 */
77
struct darshan_log_map
78
{
79
80
    uint64_t off;
    uint64_t len;
81
82
};

83
84
85
/* the darshan header stores critical metadata needed for correctly
 * reading the contents of the corresponding Darshan log
 */
86
struct darshan_header
87
{
88
89
    char version_string[8];
    int64_t magic_nr;
90
    enum darshan_comp_type comp_type;
91
92
    struct darshan_log_map rec_map;
    struct darshan_log_map mod_map[DARSHAN_MAX_MODS];
93
94
};

95
/* job-level metadata stored for this application */
96
#define DARSHAN_JOB_METADATA_LEN 1024 /* including null terminator! */
97
98
struct darshan_job
{
99
100
101
102
    int64_t uid;
    int64_t start_time;
    int64_t end_time;
    int64_t nprocs;
103
    int64_t jobid;
104
    char metadata[DARSHAN_JOB_METADATA_LEN];
105
106
};

107
/* minimal record stored for each file/object accessed by Darshan */
108
109
110
111
112
113
struct darshan_record
{
    char* name;
    darshan_record_id id;
};

114
#endif /* __DARSHAN_LOG_FORMAT_H */