Commit fdf5af2d authored by Shane Snyder's avatar Shane Snyder

integrate lustre module into logutils library

parent 7ba0dfe3
......@@ -122,7 +122,7 @@ struct darshan_record
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) \
X(DARSHAN_LUSTRE_MOD, "LUSTRE", DARSHAN_LUSTRE_VER, NULL)
X(DARSHAN_LUSTRE_MOD, "LUSTRE", DARSHAN_LUSTRE_VER, &lustre_logutils)
/* unique identifiers to distinguish between available darshan modules */
/* NOTES: - valid ids range from [0...DARSHAN_MAX_MODS-1]
......
......@@ -39,4 +39,3 @@ struct darshan_lustre_record
};
#endif /* __DARSHAN_LUSTRE_LOG_FORMAT_H */
......@@ -13,10 +13,10 @@ libdir = $(DESTDIR)@libdir@
pkgconfigdir = $(DESTDIR)$(libdir)/pkgconfig
DARSHAN_LOG_FORMAT = $(srcdir)/../darshan-log-format.h
DARSHAN_MOD_LOG_FORMATS = $(srcdir)/../darshan-posix-log-format.h $(srcdir)/../darshan-mpiio-log-format.h $(srcdir)/../darshan-hdf5-log-format.h $(srcdir)/../darshan-pnetcdf-log-format.h
DARSHAN_MOD_LOGUTIL_HEADERS = darshan-posix-logutils.h darshan-mpiio-logutils.h darshan-hdf5-logutils.h darshan-pnetcdf-logutils.h
DARSHAN_STATIC_MOD_OBJS = darshan-posix-logutils.o darshan-mpiio-logutils.o darshan-hdf5-logutils.o darshan-pnetcdf-logutils.o darshan-bgq-logutils.o
DARSHAN_DYNAMIC_MOD_OBJS = darshan-posix-logutils.po darshan-mpiio-logutils.po darshan-hdf5-logutils.po darshan-pnetcdf-logutils.po darshan-bgq-logutils.po
DARSHAN_MOD_LOG_FORMATS = $(srcdir)/../darshan-posix-log-format.h $(srcdir)/../darshan-mpiio-log-format.h $(srcdir)/../darshan-hdf5-log-format.h $(srcdir)/../darshan-pnetcdf-log-format.h $(srcdir)/../darshan-lustre-log-format.h
DARSHAN_MOD_LOGUTIL_HEADERS = darshan-posix-logutils.h darshan-mpiio-logutils.h darshan-hdf5-logutils.h darshan-pnetcdf-logutils.h darshan-lustre-logutils.h
DARSHAN_STATIC_MOD_OBJS = darshan-posix-logutils.o darshan-mpiio-logutils.o darshan-hdf5-logutils.o darshan-pnetcdf-logutils.o darshan-bgq-logutils.o darshan-lustre-logutils.o
DARSHAN_DYNAMIC_MOD_OBJS = darshan-posix-logutils.po darshan-mpiio-logutils.po darshan-hdf5-logutils.po darshan-pnetcdf-logutils.po darshan-bgq-logutils.po darshan-lustre-logutils.po
DARSHAN_ENABLE_SHARED=@DARSHAN_ENABLE_SHARED@
......@@ -81,6 +81,11 @@ darshan-bgq-logutils.o: darshan-bgq-logutils.c darshan-logutils.h darshan-bgq-lo
darshan-bgq-logutils.po: darshan-bgq-logutils.c darshan-logutils.h darshan-bgq-logutils.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-bgq-log-format.h | uthash-1.9.2
$(CC) $(CFLAGS_SHARED) -c $< -o $@
darshan-lustre-logutils.o: darshan-lustre-logutils.c darshan-logutils.h darshan-lustre-logutils.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-lustre-log-format.h | uthash-1.9.2
$(CC) $(CFLAGS) -c $< -o $@
darshan-lustre-logutils.po: darshan-lustre-logutils.c darshan-logutils.h darshan-lustre-logutils.h $(DARSHAN_LOG_FORMAT) $(srcdir)/../darshan-lustre-log-format.h | uthash-1.9.2
$(CC) $(CFLAGS_SHARED) -c $< -o $@
libdarshan-util.a: darshan-logutils.o $(DARSHAN_STATIC_MOD_OBJS)
ar rcs libdarshan-util.a $^
......
......@@ -107,6 +107,7 @@ extern struct darshan_mod_logutil_funcs *mod_logutils[];
#include "darshan-hdf5-logutils.h"
#include "darshan-pnetcdf-logutils.h"
#include "darshan-bgq-logutils.h"
#include "darshan-lustre-logutils.h"
darshan_fd darshan_log_open(const char *name);
darshan_fd darshan_log_create(const char *name, enum darshan_comp_type comp_type,
......
/*
* 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 "darshan-logutils.h"
/* counter name strings for the LUSTRE module */
#define X(a) #a,
char *lustre_counter_names[] = {
LUSTRE_COUNTERS
};
#undef X
static int darshan_log_get_lustre_record(darshan_fd fd, void* lustre_buf,
darshan_record_id* rec_id);
static int darshan_log_put_lustre_record(darshan_fd fd, void* lustre_buf, int ver);
static void darshan_log_print_lustre_record(void *file_rec,
char *file_name, char *mnt_pt, char *fs_type, int ver);
static void darshan_log_print_lustre_description(void);
static void darshan_log_print_lustre_record_diff(void *rec1, char *file_name1,
void *rec2, char *file_name2);
struct darshan_mod_logutil_funcs lustre_logutils =
{
.log_get_record = &darshan_log_get_lustre_record,
.log_put_record = &darshan_log_put_lustre_record,
.log_print_record = &darshan_log_print_lustre_record,
.log_print_description = &darshan_log_print_lustre_description,
.log_print_diff = &darshan_log_print_lustre_record_diff
};
static int darshan_log_get_lustre_record(darshan_fd fd, void* lustre_buf,
darshan_record_id* rec_id)
{
struct darshan_lustre_record *rec;
int i;
int ret;
ret = darshan_log_getmod(fd, DARSHAN_LUSTRE_MOD, lustre_buf,
sizeof(struct darshan_lustre_record));
if(ret < 0)
return(-1);
else if(ret < sizeof(struct darshan_lustre_record))
return(0);
else
{
rec = (struct darshan_lustre_record *)lustre_buf;
if(fd->swap_flag)
{
/* swap bytes if necessary */
DARSHAN_BSWAP64(&rec->rec_id);
DARSHAN_BSWAP64(&rec->rank);
for(i=0; i<LUSTRE_NUM_INDICES; i++)
DARSHAN_BSWAP64(&rec->counters[i]);
}
*rec_id = rec->rec_id;
return(1);
}
}
static int darshan_log_put_lustre_record(darshan_fd fd, void* lustre_buf, int ver)
{
struct darshan_lustre_record *rec = (struct darshan_lustre_record *)lustre_buf;
int ret;
ret = darshan_log_putmod(fd, DARSHAN_LUSTRE_MOD, rec,
sizeof(struct darshan_lustre_record), ver);
if(ret < 0)
return(-1);
return(0);
}
static void darshan_log_print_lustre_record(void *rec, char *file_name,
char *mnt_pt, char *fs_type, int ver)
{
int i;
struct darshan_lustre_record *lustre_rec =
(struct darshan_lustre_record *)rec;
for(i=0; i<LUSTRE_NUM_INDICES; i++)
{
DARSHAN_COUNTER_PRINT(darshan_module_names[DARSHAN_LUSTRE_MOD],
lustre_rec->rank, lustre_rec->rec_id, lustre_counter_names[i],
lustre_rec->counters[i], file_name, mnt_pt, fs_type);
}
return;
}
static void darshan_log_print_lustre_description()
{
/* TODO: add actual counter descriptions here */
printf("\n# description of LUSTRE counters:\n");
printf("# LUSTRE_TEST_COUNTER: counter for testing Lustre module.\n");
DARSHAN_PRINT_HEADER();
return;
}
static void darshan_log_print_lustre_record_diff(void *rec1, char *file_name1,
void *rec2, char *file_name2)
{
struct darshan_lustre_record *lustre_rec1 = (struct darshan_lustre_record *)rec1;
struct darshan_lustre_record *lustre_rec2 = (struct darshan_lustre_record *)rec2;
int i;
/* NOTE: we assume that both input records are the same module format version */
for(i=0; i<LUSTRE_NUM_INDICES; i++)
{
if(!lustre_rec2)
{
printf("- ");
DARSHAN_COUNTER_PRINT(darshan_module_names[DARSHAN_LUSTRE_MOD],
lustre_rec1->rank, lustre_rec1->rec_id, lustre_counter_names[i],
lustre_rec1->counters[i], file_name1, "", "");
}
else if(!lustre_rec1)
{
printf("+ ");
DARSHAN_COUNTER_PRINT(darshan_module_names[DARSHAN_LUSTRE_MOD],
lustre_rec2->rank, lustre_rec2->rec_id, lustre_counter_names[i],
lustre_rec2->counters[i], file_name2, "", "");
}
else if(lustre_rec1->counters[i] != lustre_rec2->counters[i])
{
printf("- ");
DARSHAN_COUNTER_PRINT(darshan_module_names[DARSHAN_LUSTRE_MOD],
lustre_rec1->rank, lustre_rec1->rec_id, lustre_counter_names[i],
lustre_rec1->counters[i], file_name1, "", "");
printf("+ ");
DARSHAN_COUNTER_PRINT(darshan_module_names[DARSHAN_LUSTRE_MOD],
lustre_rec2->rank, lustre_rec2->rec_id, lustre_counter_names[i],
lustre_rec2->counters[i], file_name2, "", "");
}
}
return;
}
/*
* Local variables:
* c-indent-level: 4
* c-basic-offset: 4
* End:
*
* vim: ts=8 sts=4 sw=4 expandtab
*/
/*
* Copyright (C) 2015 University of Chicago.
* See COPYRIGHT notice in top-level directory.
*
*/
#ifndef __DARSHAN_LUSTRE_LOG_UTILS_H
#define __DARSHAN_LUSTRE_LOG_UTILS_H
extern char *lustre_counter_names[];
extern struct darshan_mod_logutil_funcs lustre_logutils;
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment