GitLab maintenance scheduled for Today, 2019-09-24, from 12:00 to 13:00 CT - Services will be unavailable during this time.

darshan-bgq-logutils.c 6.61 KB
Newer Older
Kevin Harms's avatar
Kevin Harms committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/*
 * Copyright (C) 2015 University of Chicago.
 * See COPYRIGHT notice in top-level directory.
 *
 */

#define _GNU_SOURCE
#include "darshan-util-config.h"
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
#include <unistd.h>
#include <inttypes.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>

20
#include "darshan-logutils.h"
Kevin Harms's avatar
Kevin Harms committed
21

22
/* counter name strings for the BGQ module */
23
#define X(a) #a,
24 25 26 27 28 29 30 31 32
char *bgq_counter_names[] = {
    BGQ_COUNTERS
};

char *bgq_f_counter_names[] = {
    BGQ_F_COUNTERS
};
#undef X

33 34
static int darshan_log_get_bgq_rec(darshan_fd fd, void* bgq_buf,
    darshan_record_id* rec_id);
35
static int darshan_log_put_bgq_rec(darshan_fd fd, void* bgq_buf, int ver);
36
static void darshan_log_print_bgq_rec(void *file_rec,
37
    char *file_name, char *mnt_pt, char *fs_type, int ver);
38
static void darshan_log_print_bgq_description(void);
39 40
static void darshan_log_print_bgq_rec_diff(void *file_rec1, char *file_name1,
    void *file_rec2, char *file_name2);
41 42 43

struct darshan_mod_logutil_funcs bgq_logutils =
{
44 45 46
    .log_get_record = &darshan_log_get_bgq_rec,
    .log_put_record = &darshan_log_put_bgq_rec,
    .log_print_record = &darshan_log_print_bgq_rec,
47 48
    .log_print_description = &darshan_log_print_bgq_description,
    .log_print_diff = &darshan_log_print_bgq_rec_diff
49 50
};

51 52
static int darshan_log_get_bgq_rec(darshan_fd fd, void* bgq_buf,
    darshan_record_id* rec_id)
Kevin Harms's avatar
Kevin Harms committed
53
{
54
    struct darshan_bgq_record *rec;
Kevin Harms's avatar
Kevin Harms committed
55
    int i;
56
    int ret;
57

58 59 60
    ret = darshan_log_getmod(fd, DARSHAN_BGQ_MOD, bgq_buf,
        sizeof(struct darshan_bgq_record));
    if(ret < 0)
61
        return(-1);
62 63 64
    else if(ret < sizeof(struct darshan_bgq_record))
        return(0);
    else
65
    {
66 67 68 69 70 71 72 73 74 75 76 77 78 79
        rec = (struct darshan_bgq_record *)bgq_buf;
        if(fd->swap_flag)
        {
            /* swap bytes if necessary */
            DARSHAN_BSWAP64(&rec->f_id);
            DARSHAN_BSWAP64(&rec->rank);
            for(i=0; i<BGQ_NUM_INDICES; i++)
                DARSHAN_BSWAP64(&rec->counters[i]);
            for(i=0; i<BGQ_F_NUM_INDICES; i++)
                DARSHAN_BSWAP64(&rec->fcounters[i]);
        }

        *rec_id = rec->f_id;
        return(1);
80
    }
81
}
Kevin Harms's avatar
Kevin Harms committed
82

83
static int darshan_log_put_bgq_rec(darshan_fd fd, void* bgq_buf, int ver)
84 85 86 87 88
{
    struct darshan_bgq_record *rec = (struct darshan_bgq_record *)bgq_buf;
    int ret;

    ret = darshan_log_putmod(fd, DARSHAN_BGQ_MOD, rec,
89
        sizeof(struct darshan_bgq_record), ver);
90 91
    if(ret < 0)
        return(-1);
92 93 94 95

    return(0);
}

96
static void darshan_log_print_bgq_rec(void *file_rec, char *file_name,
97
    char *mnt_pt, char *fs_type, int ver)
98 99 100 101 102
{
    int i;
    struct darshan_bgq_record *bgq_file_rec =
        (struct darshan_bgq_record *)file_rec;

Kevin Harms's avatar
Kevin Harms committed
103
    for(i=0; i<BGQ_NUM_INDICES; i++)
104
    {
Kevin Harms's avatar
Kevin Harms committed
105
        DARSHAN_COUNTER_PRINT(darshan_module_names[DARSHAN_BGQ_MOD],
106 107 108
            bgq_file_rec->rank, bgq_file_rec->f_id, bgq_counter_names[i],
            bgq_file_rec->counters[i], file_name, mnt_pt, fs_type);
    }
Kevin Harms's avatar
Kevin Harms committed
109

Kevin Harms's avatar
Kevin Harms committed
110
    for(i=0; i<BGQ_F_NUM_INDICES; i++)
Kevin Harms's avatar
Kevin Harms committed
111
    {
Kevin Harms's avatar
Kevin Harms committed
112
        DARSHAN_F_COUNTER_PRINT(darshan_module_names[DARSHAN_BGQ_MOD],
113 114
            bgq_file_rec->rank, bgq_file_rec->f_id, bgq_f_counter_names[i],
            bgq_file_rec->fcounters[i], file_name, mnt_pt, fs_type);
Kevin Harms's avatar
Kevin Harms committed
115 116
    }

117
    return;
Kevin Harms's avatar
Kevin Harms committed
118 119
}

120 121
static void darshan_log_print_bgq_description()
{
122
    printf("\n# description of BGQ counters:\n");
123 124 125 126 127 128 129 130 131 132 133 134 135 136
    printf("#   BGQ_CSJOBID: BGQ control system job ID.\n");
    printf("#   BGQ_NNODES: number of BGQ compute nodes for this job.\n");
    printf("#   BGQ_RANKSPERNODE: number of MPI ranks per compute node.\n");
    printf("#   BGQ_DDRPERNODE: size in MB of DDR3 per compute node.\n");
    printf("#   BGQ_INODES: number of BGQ I/O nodes for this job.\n");
    printf("#   BGQ_*NODES: dimension of A, B, C, D, & E dimensions of torus.\n");
    printf("#   BGQ_TORUSENABLED: which dimensions of the torus are enabled.\n");
    printf("#   BGQ_F_TIMESTAMP: timestamp when the BGQ data was collected.\n");

    DARSHAN_PRINT_HEADER();

    return;
}

137 138 139 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 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
static void darshan_log_print_bgq_rec_diff(void *file_rec1, char *file_name1,
    void *file_rec2, char *file_name2)
{
    struct darshan_bgq_record *file1 = (struct darshan_bgq_record *)file_rec1;
    struct darshan_bgq_record *file2 = (struct darshan_bgq_record *)file_rec2;
    int i;

    /* NOTE: we assume that both input records are the same module format version */

    for(i=0; i<BGQ_NUM_INDICES; i++)
    {
        if(!file2)
        {
            printf("- ");
            DARSHAN_COUNTER_PRINT(darshan_module_names[DARSHAN_BGQ_MOD],
                file1->rank, file1->f_id, bgq_counter_names[i],
                file1->counters[i], file_name1, "", "");

        }
        else if(!file1)
        {
            printf("+ ");
            DARSHAN_COUNTER_PRINT(darshan_module_names[DARSHAN_BGQ_MOD],
                file2->rank, file2->f_id, bgq_counter_names[i],
                file2->counters[i], file_name2, "", "");
        }
        else if(file1->counters[i] != file2->counters[i])
        {
            printf("- ");
            DARSHAN_COUNTER_PRINT(darshan_module_names[DARSHAN_BGQ_MOD],
                file1->rank, file1->f_id, bgq_counter_names[i],
                file1->counters[i], file_name1, "", "");
            printf("+ ");
            DARSHAN_COUNTER_PRINT(darshan_module_names[DARSHAN_BGQ_MOD],
                file2->rank, file2->f_id, bgq_counter_names[i],
                file2->counters[i], file_name2, "", "");
        }
    }

    for(i=0; i<BGQ_F_NUM_INDICES; i++)
    {
        if(!file2)
        {
            printf("- ");
            DARSHAN_F_COUNTER_PRINT(darshan_module_names[DARSHAN_BGQ_MOD],
                file1->rank, file1->f_id, bgq_f_counter_names[i],
                file1->fcounters[i], file_name1, "", "");

        }
        else if(!file1)
        {
            printf("+ ");
            DARSHAN_F_COUNTER_PRINT(darshan_module_names[DARSHAN_BGQ_MOD],
                file2->rank, file2->f_id, bgq_f_counter_names[i],
                file2->fcounters[i], file_name2, "", "");
        }
        else if(file1->fcounters[i] != file2->fcounters[i])
        {
            printf("- ");
            DARSHAN_F_COUNTER_PRINT(darshan_module_names[DARSHAN_BGQ_MOD],
                file1->rank, file1->f_id, bgq_f_counter_names[i],
                file1->fcounters[i], file_name1, "", "");
            printf("+ ");
            DARSHAN_F_COUNTER_PRINT(darshan_module_names[DARSHAN_BGQ_MOD],
                file2->rank, file2->f_id, bgq_f_counter_names[i],
                file2->fcounters[i], file_name2, "", "");
        }
    }

    return;
}


Kevin Harms's avatar
Kevin Harms committed
210 211 212 213 214 215 216 217
/*
 * Local variables:
 *  c-indent-level: 4
 *  c-basic-offset: 4
 * End:
 *
 * vim: ts=8 sts=4 sw=4 expandtab
 */