GitLab maintenance scheduled for Tomorrow, 2020-03-31, from 17:00 to 18:00 CT - Services will be unavailable during this time.

darshan-mpiio-logutils.c 5.57 KB
Newer Older
Philip Carns's avatar
Philip Carns 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"
Philip Carns's avatar
Philip Carns committed
21

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

char *mpiio_f_counter_names[] = {
    MPIIO_F_COUNTERS
};
#undef X

33 34
static int darshan_log_get_mpiio_file(darshan_fd fd, void* mpiio_buf,
    darshan_record_id* rec_id);
35
static int darshan_log_put_mpiio_file(darshan_fd fd, void* mpiio_buf, int ver);
36
static void darshan_log_print_mpiio_file(void *file_rec,
37
    char *file_name, char *mnt_pt, char *fs_type, int ver);
38
static void darshan_log_print_mpiio_description(void);
39

40 41 42
struct darshan_mod_logutil_funcs mpiio_logutils =
{
    .log_get_record = &darshan_log_get_mpiio_file,
43
    .log_put_record = &darshan_log_put_mpiio_file,
44
    .log_print_record = &darshan_log_print_mpiio_file,
45
    .log_print_description = &darshan_log_print_mpiio_description
46 47
};

48 49
static int darshan_log_get_mpiio_file(darshan_fd fd, void* mpiio_buf,
    darshan_record_id* rec_id)
Philip Carns's avatar
Philip Carns committed
50
{
51
    struct darshan_mpiio_file *file;
Philip Carns's avatar
Philip Carns committed
52
    int i;
53
    int ret;
Philip Carns's avatar
Philip Carns committed
54

55 56 57
    ret = darshan_log_getmod(fd, DARSHAN_MPIIO_MOD, mpiio_buf,
        sizeof(struct darshan_mpiio_file));
    if(ret < 0)
58
        return(-1);
59 60 61
    else if(ret < sizeof(struct darshan_mpiio_file))
        return(0);
    else
Philip Carns's avatar
Philip Carns committed
62
    {
63 64 65 66 67 68 69 70 71 72 73 74 75 76
        file = (struct darshan_mpiio_file *)mpiio_buf;
        if(fd->swap_flag)
        {
            /* swap bytes if necessary */
            DARSHAN_BSWAP64(&file->f_id);
            DARSHAN_BSWAP64(&file->rank);
            for(i=0; i<MPIIO_NUM_INDICES; i++)
                DARSHAN_BSWAP64(&file->counters[i]);
            for(i=0; i<MPIIO_F_NUM_INDICES; i++)
                DARSHAN_BSWAP64(&file->fcounters[i]);
        }

        *rec_id = file->f_id;
        return(1);
Philip Carns's avatar
Philip Carns committed
77
    }
78
}
Philip Carns's avatar
Philip Carns committed
79

80
static int darshan_log_put_mpiio_file(darshan_fd fd, void* mpiio_buf, int ver)
81 82 83 84 85
{
    struct darshan_mpiio_file *file = (struct darshan_mpiio_file *)mpiio_buf;
    int ret;

    ret = darshan_log_putmod(fd, DARSHAN_MPIIO_MOD, file,
86
        sizeof(struct darshan_mpiio_file), ver);
87 88
    if(ret < 0)
        return(-1);
89 90

    return(0);
Philip Carns's avatar
Philip Carns committed
91 92
}

93
static void darshan_log_print_mpiio_file(void *file_rec, char *file_name,
94
    char *mnt_pt, char *fs_type, int ver)
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
{
    int i;
    struct darshan_mpiio_file *mpiio_file_rec =
        (struct darshan_mpiio_file *)file_rec;

    for(i=0; i<MPIIO_NUM_INDICES; i++)
    {
        DARSHAN_COUNTER_PRINT(darshan_module_names[DARSHAN_MPIIO_MOD],
            mpiio_file_rec->rank, mpiio_file_rec->f_id, mpiio_counter_names[i],
            mpiio_file_rec->counters[i], file_name, mnt_pt, fs_type);
    }

    for(i=0; i<MPIIO_F_NUM_INDICES; i++)
    {
        DARSHAN_F_COUNTER_PRINT(darshan_module_names[DARSHAN_MPIIO_MOD],
            mpiio_file_rec->rank, mpiio_file_rec->f_id, mpiio_f_counter_names[i],
            mpiio_file_rec->fcounters[i], file_name, mnt_pt, fs_type);
    }

    return;
}

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
static void darshan_log_print_mpiio_description()
{
    printf("\n# desription of MPIIO counters:\n");
    printf("#   MPIIO_INDEP_*: MPI independent operation counts.\n");
    printf("#   MPIIO_COLL_*: MPI collective operation counts.\n");
    printf("#   MPIIO_SPLIT_*: MPI split collective operation counts.\n");
    printf("#   MPIIO_NB_*: MPI non blocking operation counts.\n");
    printf("#   READS,WRITES,and OPENS are types of operations.\n");
    printf("#   MPIIO_SYNCS: MPI file sync operation counts.\n");
    printf("#   MPIIO_HINTS: number of times MPI hints were used.\n");
    printf("#   MPIIO_VIEWS: number of times MPI file views were used.\n");
    printf("#   MPIIO_MODE: MPI-IO access mode that file was opened with.\n");
    printf("#   MPIIO_BYTES_*: total bytes read and written at MPI-IO layer.\n");
    printf("#   MPIIO_RW_SWITCHES: number of times access alternated between read and write.\n");
    printf("#   MPIIO_MAX_*_TIME_SIZE: size of the slowest read and write operations.\n");
    printf("#   MPIIO_SIZE_*_AGG_*: histogram of MPI datatype total sizes for read and write operations.\n");
    printf("#   MPIIO_ACCESS*_ACCESS: the four most common total access sizes.\n");
    printf("#   MPIIO_ACCESS*_COUNT: count of the four most common total access sizes.\n");
    printf("#   MPIIO_*_RANK: rank of the processes that were the fastest and slowest at I/O (for shared files).\n");
    printf("#   MPIIO_*_RANK_BYTES: total bytes transferred at MPI-IO layer by the fastest and slowest ranks (for shared files).\n");
    printf("#   MPIIO_F_OPEN_TIMESTAMP: timestamp of first open.\n");
    printf("#   MPIIO_F_*_START_TIMESTAMP: timestamp of first MPI-IO read/write.\n");
    printf("#   MPIIO_F_*_END_TIMESTAMP: timestamp of last MPI-IO read/write.\n");
    printf("#   MPIIO_F_CLOSE_TIMESTAMP: timestamp of last close.\n");
    printf("#   MPIIO_F_READ/WRITE/META_TIME: cumulative time spent in MPI-IO read, write, or metadata operations.\n");
    printf("#   MPIIO_F_MAX_*_TIME: duration of the slowest MPI-IO read and write operations.\n");
    printf("#   MPIIO_F_*_RANK_TIME: fastest and slowest I/O time for a single rank (for shared files).\n");
    printf("#   MPIIO_F_VARIANCE_RANK_*: variance of total I/O time and bytes moved for all ranks (for shared files).\n");

    DARSHAN_PRINT_HEADER();

    return;
}

Philip Carns's avatar
Philip Carns committed
151 152 153 154 155 156 157 158
/*
 * Local variables:
 *  c-indent-level: 4
 *  c-basic-offset: 4
 * End:
 *
 * vim: ts=8 sts=4 sw=4 expandtab
 */