Blame src/mpi/romio/test/file_info.c

Packit Service c5cf8c
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
Packit Service c5cf8c
/*
Packit Service c5cf8c
 *  (C) 2001 by Argonne National Laboratory.
Packit Service c5cf8c
 *      See COPYRIGHT in top-level directory.
Packit Service c5cf8c
 */
Packit Service c5cf8c
Packit Service c5cf8c
/* Change for BG/L made by Hao Yu, yuh@us.ibm.com
Packit Service c5cf8c
 */
Packit Service c5cf8c
Packit Service c5cf8c
#include "mpi.h"
Packit Service c5cf8c
#include <stdio.h>
Packit Service c5cf8c
#include <string.h>
Packit Service c5cf8c
#include <stdlib.h>
Packit Service c5cf8c
Packit Service c5cf8c
static void handle_error(int errcode, const char *str)
Packit Service c5cf8c
{
Packit Service c5cf8c
    char msg[MPI_MAX_ERROR_STRING];
Packit Service c5cf8c
    int resultlen;
Packit Service c5cf8c
    MPI_Error_string(errcode, msg, &resultlen);
Packit Service c5cf8c
    fprintf(stderr, "%s: %s\n", str, msg);
Packit Service c5cf8c
    MPI_Abort(MPI_COMM_WORLD, 1);
Packit Service c5cf8c
}
Packit Service c5cf8c
Packit Service c5cf8c
/* this test wants to compare the hints it gets from a file with a set of
Packit Service c5cf8c
 * default hints.  These hints are specific to the MPI-IO implementation, so if
Packit Service c5cf8c
 * you want to test something besides the default you'll have to use a command
Packit Service c5cf8c
 * line argument */
Packit Service c5cf8c
Packit Service c5cf8c
typedef struct hint_defaults {
Packit Service c5cf8c
    int cb_buffer_size;
Packit Service c5cf8c
    int ind_rd_buffer_size;
Packit Service c5cf8c
    int ind_wr_buffer_size;
Packit Service c5cf8c
    const char *romio_cb_read;
Packit Service c5cf8c
    const char *romio_cb_write;
Packit Service c5cf8c
    const char *cb_config_list;
Packit Service c5cf8c
} hint_defaults;
Packit Service c5cf8c
Packit Service c5cf8c
hint_defaults UFS_DEFAULTS = {
Packit Service c5cf8c
    .cb_buffer_size = 16777216,
Packit Service c5cf8c
    .ind_rd_buffer_size = 4194304,
Packit Service c5cf8c
    .ind_wr_buffer_size = 524288,
Packit Service c5cf8c
    .romio_cb_read = "automatic",
Packit Service c5cf8c
    .romio_cb_write = "automatic",
Packit Service c5cf8c
    .cb_config_list = "*:1"
Packit Service c5cf8c
};
Packit Service c5cf8c
Packit Service c5cf8c
hint_defaults BLUEGENE_DEFAULTS = {
Packit Service c5cf8c
    .cb_buffer_size = 16777216,
Packit Service c5cf8c
    .ind_rd_buffer_size = 4194304,
Packit Service c5cf8c
    .ind_wr_buffer_size = 4194304,
Packit Service c5cf8c
    .romio_cb_read = "enable",
Packit Service c5cf8c
    .romio_cb_write = "enable",
Packit Service c5cf8c
    .cb_config_list = NULL
Packit Service c5cf8c
};
Packit Service c5cf8c
Packit Service c5cf8c
/* #undef INFO_DEBUG */
Packit Service c5cf8c
Packit Service c5cf8c
/* Test will print out information about unexpected hint keys or values that
Packit Service c5cf8c
 * differ from the default.  Since this is often interesting but rarely an
Packit Service c5cf8c
 * error, default will be to increment errror cound for true error conditions
Packit Service c5cf8c
 * but not print out these "interesting" non-error cases. */
Packit Service c5cf8c
Packit Service c5cf8c
static int verbose = 0;
Packit Service c5cf8c
static int test_ufs = 0;
Packit Service c5cf8c
static int test_bluegene = 0;
Packit Service c5cf8c
Packit Service c5cf8c
int main(int argc, char **argv)
Packit Service c5cf8c
{
Packit Service c5cf8c
    int i, len, nkeys, flag, mynod, default_striping_factor = 0, nprocs, errs = 0;
Packit Service c5cf8c
    MPI_File fh;
Packit Service c5cf8c
    MPI_Info info, info_used;
Packit Service c5cf8c
    char *filename, key[MPI_MAX_INFO_KEY], value[MPI_MAX_INFO_VAL];
Packit Service c5cf8c
    hint_defaults *defaults;
Packit Service c5cf8c
    int ret;
Packit Service c5cf8c
Packit Service c5cf8c
    MPI_Init(&argc, &argv);
Packit Service c5cf8c
Packit Service c5cf8c
    MPI_Comm_rank(MPI_COMM_WORLD, &mynod);
Packit Service c5cf8c
    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
Packit Service c5cf8c
Packit Service c5cf8c
/* process 0 takes the file name as a command-line argument and
Packit Service c5cf8c
   broadcasts it to other processes */
Packit Service c5cf8c
    if (!mynod) {
Packit Service c5cf8c
        i = 1;
Packit Service c5cf8c
        while ((i < argc) && strcmp("-fname", *argv)) {
Packit Service c5cf8c
            if (!strcmp("-v", *argv))
Packit Service c5cf8c
                verbose = 1;
Packit Service c5cf8c
            else if (!strcmp("-u", *argv))
Packit Service c5cf8c
                test_ufs = 1;
Packit Service c5cf8c
            else if (!strcmp("-b", *argv))
Packit Service c5cf8c
                test_bluegene = 1;
Packit Service c5cf8c
            i++;
Packit Service c5cf8c
            argv++;
Packit Service c5cf8c
        }
Packit Service c5cf8c
        if (i >= argc) {
Packit Service c5cf8c
            fprintf(stderr, "\n*#  Usage: file_info [-v] -fname filename\n\n");
Packit Service c5cf8c
            MPI_Abort(MPI_COMM_WORLD, 1);
Packit Service c5cf8c
        }
Packit Service c5cf8c
        argv++;
Packit Service c5cf8c
        len = strlen(*argv);
Packit Service c5cf8c
        filename = (char *) malloc(len + 1);
Packit Service c5cf8c
        strcpy(filename, *argv);
Packit Service c5cf8c
        MPI_Bcast(&len, 1, MPI_INT, 0, MPI_COMM_WORLD);
Packit Service c5cf8c
        MPI_Bcast(filename, len + 1, MPI_CHAR, 0, MPI_COMM_WORLD);
Packit Service c5cf8c
        MPI_Bcast(&verbose, 1, MPI_INT, 0, MPI_COMM_WORLD);
Packit Service c5cf8c
        MPI_Bcast(&test_ufs, 1, MPI_INT, 0, MPI_COMM_WORLD);
Packit Service c5cf8c
        MPI_Bcast(&test_bluegene, 1, MPI_INT, 0, MPI_COMM_WORLD);
Packit Service c5cf8c
    } else {
Packit Service c5cf8c
        MPI_Bcast(&len, 1, MPI_INT, 0, MPI_COMM_WORLD);
Packit Service c5cf8c
        filename = (char *) malloc(len + 1);
Packit Service c5cf8c
        MPI_Bcast(filename, len + 1, MPI_CHAR, 0, MPI_COMM_WORLD);
Packit Service c5cf8c
        MPI_Bcast(&verbose, 1, MPI_INT, 0, MPI_COMM_WORLD);
Packit Service c5cf8c
        MPI_Bcast(&test_ufs, 1, MPI_INT, 0, MPI_COMM_WORLD);
Packit Service c5cf8c
        MPI_Bcast(&test_bluegene, 1, MPI_INT, 0, MPI_COMM_WORLD);
Packit Service c5cf8c
    }
Packit Service c5cf8c
    if (test_ufs) {
Packit Service c5cf8c
        defaults = &UFS_DEFAULTS;
Packit Service c5cf8c
    } else if (test_bluegene) {
Packit Service c5cf8c
        defaults = &BLUEGENE_DEFAULTS;
Packit Service c5cf8c
    } else {
Packit Service c5cf8c
        defaults = NULL;
Packit Service c5cf8c
    }
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
/* open the file with MPI_INFO_NULL */
Packit Service c5cf8c
    ret = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_CREATE | MPI_MODE_RDWR,
Packit Service c5cf8c
                        MPI_INFO_NULL, &fh;;
Packit Service c5cf8c
    if (ret != MPI_SUCCESS)
Packit Service c5cf8c
        handle_error(ret, "MPI_File_open");
Packit Service c5cf8c
Packit Service c5cf8c
/* check the default values set by ROMIO */
Packit Service c5cf8c
    MPI_File_get_info(fh, &info_used);
Packit Service c5cf8c
    MPI_Info_get_nkeys(info_used, &nkeys);
Packit Service c5cf8c
Packit Service c5cf8c
    if (defaults != NULL) {
Packit Service c5cf8c
        for (i = 0; i < nkeys; i++) {
Packit Service c5cf8c
            MPI_Info_get_nthkey(info_used, i, key);
Packit Service c5cf8c
            MPI_Info_get(info_used, key, MPI_MAX_INFO_VAL - 1, value, &flag;;
Packit Service c5cf8c
#ifdef INFO_DEBUG
Packit Service c5cf8c
            if (!mynod)
Packit Service c5cf8c
                fprintf(stderr, "Process %d, Default:  key = %s, value = %s\n", mynod, key, value);
Packit Service c5cf8c
#endif
Packit Service c5cf8c
            if (!strcmp("striping_factor", key)) {
Packit Service c5cf8c
                default_striping_factor = atoi(value);
Packit Service c5cf8c
                /* no check */
Packit Service c5cf8c
            } else if (!strcmp("cb_buffer_size", key)) {
Packit Service c5cf8c
                if (atoi(value) != defaults->cb_buffer_size) {
Packit Service c5cf8c
                    errs++;
Packit Service c5cf8c
                    if (verbose)
Packit Service c5cf8c
                        fprintf(stderr, "cb_buffer_size is %d; should be %d\n",
Packit Service c5cf8c
                                atoi(value), defaults->cb_buffer_size);
Packit Service c5cf8c
                }
Packit Service c5cf8c
            } else if (!strcmp("romio_cb_read", key)) {
Packit Service c5cf8c
                if (strcmp(defaults->romio_cb_read, value)) {
Packit Service c5cf8c
                    errs++;
Packit Service c5cf8c
                    if (verbose)
Packit Service c5cf8c
                        fprintf(stderr, "romio_cb_read is set to %s; should be %s\n",
Packit Service c5cf8c
                                value, defaults->romio_cb_read);
Packit Service c5cf8c
                }
Packit Service c5cf8c
            } else if (!strcmp("romio_cb_write", key)) {
Packit Service c5cf8c
                if (strcmp(defaults->romio_cb_write, value)) {
Packit Service c5cf8c
                    errs++;
Packit Service c5cf8c
                    if (verbose)
Packit Service c5cf8c
                        fprintf(stderr, "romio_cb_write is set to %s; should be %s\n",
Packit Service c5cf8c
                                value, defaults->romio_cb_write);
Packit Service c5cf8c
                }
Packit Service c5cf8c
            } else if (!strcmp("cb_nodes", key)) {
Packit Service c5cf8c
                /* unreliable test -- just ignore value */
Packit Service c5cf8c
            } else if (!strcmp("romio_no_indep_rw", key)) {
Packit Service c5cf8c
                if (strcmp("false", value)) {
Packit Service c5cf8c
                    errs++;
Packit Service c5cf8c
                    if (verbose)
Packit Service c5cf8c
                        fprintf(stderr, "romio_no_indep_rw is set to %s; should be %s\n",
Packit Service c5cf8c
                                value, "false");
Packit Service c5cf8c
                }
Packit Service c5cf8c
            } else if (!strcmp("ind_rd_buffer_size", key)) {
Packit Service c5cf8c
                if (atoi(value) != defaults->ind_rd_buffer_size) {
Packit Service c5cf8c
                    errs++;
Packit Service c5cf8c
                    if (verbose)
Packit Service c5cf8c
                        fprintf(stderr, "ind_rd_buffer_size is %d; should be %d\n",
Packit Service c5cf8c
                                atoi(value), defaults->ind_rd_buffer_size);
Packit Service c5cf8c
                }
Packit Service c5cf8c
            } else if (!strcmp("ind_wr_buffer_size", key)) {
Packit Service c5cf8c
                if (atoi(value) != defaults->ind_wr_buffer_size) {
Packit Service c5cf8c
                    errs++;
Packit Service c5cf8c
                    if (verbose)
Packit Service c5cf8c
                        fprintf(stderr, "ind_wr_buffer_size is %d; should be %d\n",
Packit Service c5cf8c
                                atoi(value), defaults->ind_wr_buffer_size);
Packit Service c5cf8c
                }
Packit Service c5cf8c
            } else if (!strcmp("romio_ds_read", key)) {
Packit Service c5cf8c
                if (strcmp("automatic", value)) {
Packit Service c5cf8c
                    errs++;
Packit Service c5cf8c
                    if (verbose)
Packit Service c5cf8c
                        fprintf(stderr, "romio_ds_read is set to %s; should be %s\n",
Packit Service c5cf8c
                                value, "automatic");
Packit Service c5cf8c
                }
Packit Service c5cf8c
            } else if (!strcmp("romio_ds_write", key)) {
Packit Service c5cf8c
                /* Unreliable test -- value is file system dependent.  Ignore. */
Packit Service c5cf8c
            } else if (!strcmp("cb_config_list", key)) {
Packit Service c5cf8c
#ifndef SKIP_CB_CONFIG_LIST_TEST
Packit Service c5cf8c
                if (strcmp(defaults->cb_config_list, value)) {
Packit Service c5cf8c
                    errs++;
Packit Service c5cf8c
                    if (verbose)
Packit Service c5cf8c
                        fprintf(stderr, "cb_config_list is set to %s; should be %s\n",
Packit Service c5cf8c
                                value, defaults->cb_config_list);
Packit Service c5cf8c
                }
Packit Service c5cf8c
#endif
Packit Service c5cf8c
            }
Packit Service c5cf8c
            /* don't care about the defaults for these keys */
Packit Service c5cf8c
            else if (!strcmp("romio_cb_pfr", key)) {
Packit Service c5cf8c
            } else if (!strcmp("romio_cb_fr_types", key)) {
Packit Service c5cf8c
            } else if (!strcmp("romio_cb_fr_alignment", key)) {
Packit Service c5cf8c
            } else if (!strcmp("romio_cb_ds_threshold", key)) {
Packit Service c5cf8c
            } else if (!strcmp("romio_cb_alltoall", key)) {
Packit Service c5cf8c
            } else {
Packit Service c5cf8c
                if (verbose)
Packit Service c5cf8c
                    fprintf(stderr, "unexpected key %s (not counted as an error)\n", key);
Packit Service c5cf8c
            }
Packit Service c5cf8c
        }
Packit Service c5cf8c
    }
Packit Service c5cf8c
    MPI_Info_free(&info_used);
Packit Service c5cf8c
Packit Service c5cf8c
    MPI_File_close(&fh;;
Packit Service c5cf8c
Packit Service c5cf8c
    /* delete the file */
Packit Service c5cf8c
    if (!mynod)
Packit Service c5cf8c
        MPI_File_delete(filename, MPI_INFO_NULL);
Packit Service c5cf8c
    MPI_Barrier(MPI_COMM_WORLD);
Packit Service c5cf8c
Packit Service c5cf8c
/* set new info values. */
Packit Service c5cf8c
Packit Service c5cf8c
    MPI_Info_create(&info;;
Packit Service c5cf8c
Packit Service c5cf8c
/* The following four hints are accepted on all machines. They can
Packit Service c5cf8c
   be specified at file-open time or later (any number of times). */
Packit Service c5cf8c
Packit Service c5cf8c
    /* buffer size for collective I/O */
Packit Service c5cf8c
    MPI_Info_set(info, "cb_buffer_size", "8388608");
Packit Service c5cf8c
Packit Service c5cf8c
    /* number of processes that actually perform I/O in collective I/O */
Packit Service c5cf8c
    sprintf(value, "%d", nprocs / 2);
Packit Service c5cf8c
    MPI_Info_set(info, "cb_nodes", value);
Packit Service c5cf8c
Packit Service c5cf8c
    /* buffer size for data sieving in independent reads */
Packit Service c5cf8c
    MPI_Info_set(info, "ind_rd_buffer_size", "2097152");
Packit Service c5cf8c
Packit Service c5cf8c
    /* buffer size for data sieving in independent writes */
Packit Service c5cf8c
    MPI_Info_set(info, "ind_wr_buffer_size", "1048576");
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
/* The following three hints related to file striping are accepted only
Packit Service c5cf8c
   on some parallel file systems and are ignored elsewhere.
Packit Service c5cf8c
   They can be specified only at file-creation time; if specified later
Packit Service c5cf8c
   they will be ignored. */
Packit Service c5cf8c
Packit Service c5cf8c
    /* number of I/O devices across which the file will be striped.
Packit Service c5cf8c
     * accepted only if 0 < value < default_striping_factor;
Packit Service c5cf8c
     * ignored otherwise */
Packit Service c5cf8c
    if (default_striping_factor - 1 > 0) {
Packit Service c5cf8c
        sprintf(value, "%d", default_striping_factor - 1);
Packit Service c5cf8c
        MPI_Info_set(info, "striping_factor", value);
Packit Service c5cf8c
    } else {
Packit Service c5cf8c
        sprintf(value, "%d", default_striping_factor);
Packit Service c5cf8c
        MPI_Info_set(info, "striping_factor", value);
Packit Service c5cf8c
    }
Packit Service c5cf8c
Packit Service c5cf8c
    /* the striping unit in bytes */
Packit Service c5cf8c
    MPI_Info_set(info, "striping_unit", "131072");
Packit Service c5cf8c
Packit Service c5cf8c
#ifndef SKIP_CB_CONFIG_LIST_TEST
Packit Service c5cf8c
    /* set the cb_config_list so we'll get deterministic cb_nodes output */
Packit Service c5cf8c
    MPI_Info_set(info, "cb_config_list", "*:*");
Packit Service c5cf8c
#endif
Packit Service c5cf8c
Packit Service c5cf8c
    /* the I/O device number from which to start striping the file.
Packit Service c5cf8c
     * accepted only if 0 <= value < default_striping_factor;
Packit Service c5cf8c
     * ignored otherwise */
Packit Service c5cf8c
    sprintf(value, "%d", default_striping_factor - 2);
Packit Service c5cf8c
    MPI_Info_set(info, "start_iodevice", value);
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
/* The following hint about PFS server buffering is accepted only on
Packit Service c5cf8c
   Intel PFS. It can be specified anytime. */
Packit Service c5cf8c
    MPI_Info_set(info, "pfs_svr_buf", "true");
Packit Service c5cf8c
Packit Service c5cf8c
/* open the file and set new info */
Packit Service c5cf8c
    ret = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_CREATE | MPI_MODE_RDWR, info, &fh;;
Packit Service c5cf8c
    if (ret != MPI_SUCCESS)
Packit Service c5cf8c
        handle_error(ret, "MPI_File_open");
Packit Service c5cf8c
Packit Service c5cf8c
/* check the values set */
Packit Service c5cf8c
    ret = MPI_File_get_info(fh, &info_used);
Packit Service c5cf8c
    if (ret != MPI_SUCCESS)
Packit Service c5cf8c
        handle_error(ret, "MPI_File_get_info");
Packit Service c5cf8c
    MPI_Info_get_nkeys(info_used, &nkeys);
Packit Service c5cf8c
Packit Service c5cf8c
    for (i = 0; i < nkeys; i++) {
Packit Service c5cf8c
        MPI_Info_get_nthkey(info_used, i, key);
Packit Service c5cf8c
        MPI_Info_get(info_used, key, MPI_MAX_INFO_VAL - 1, value, &flag;;
Packit Service c5cf8c
#ifdef INFO_DEBUG
Packit Service c5cf8c
        if (!mynod)
Packit Service c5cf8c
            fprintf(stderr, "Process %d, key = %s, value = %s\n", mynod, key, value);
Packit Service c5cf8c
#endif
Packit Service c5cf8c
        if (!strcmp("striping_factor", key)) {
Packit Service c5cf8c
            if ((default_striping_factor - 1 > 0) && (atoi(value) != default_striping_factor - 1)) {
Packit Service c5cf8c
                errs++;
Packit Service c5cf8c
                if (verbose)
Packit Service c5cf8c
                    fprintf(stderr, "striping_factor is %d; should be %d\n",
Packit Service c5cf8c
                            atoi(value), default_striping_factor - 1);
Packit Service c5cf8c
            } else if (atoi(value) != default_striping_factor) {
Packit Service c5cf8c
                errs++;
Packit Service c5cf8c
                if (verbose)
Packit Service c5cf8c
                    fprintf(stderr, "striping_factor is %d; should be %d\n",
Packit Service c5cf8c
                            atoi(value), default_striping_factor);
Packit Service c5cf8c
            }
Packit Service c5cf8c
        } else if (!strcmp("cb_buffer_size", key)) {
Packit Service c5cf8c
            if (atoi(value) != 8388608) {
Packit Service c5cf8c
                errs++;
Packit Service c5cf8c
                if (verbose)
Packit Service c5cf8c
                    fprintf(stderr, "cb_buffer_size is %d; should be %d\n", atoi(value), 8388608);
Packit Service c5cf8c
            }
Packit Service c5cf8c
        }
Packit Service c5cf8c
        /* only check the hints we set */
Packit Service c5cf8c
        else if (!strcmp("cb_nodes", key)) {
Packit Service c5cf8c
            /* unreliable test: just skip */
Packit Service c5cf8c
        } else if (!strcmp("romio_no_indep_rw", key)) {
Packit Service c5cf8c
            if (strcmp("false", value)) {
Packit Service c5cf8c
                errs++;
Packit Service c5cf8c
                if (verbose)
Packit Service c5cf8c
                    fprintf(stderr, "romio_no_indep_rw is set to %s; should be %s\n",
Packit Service c5cf8c
                            value, "false");
Packit Service c5cf8c
            }
Packit Service c5cf8c
        } else if (!strcmp("ind_rd_buffer_size", key)) {
Packit Service c5cf8c
            if (atoi(value) != 2097152) {
Packit Service c5cf8c
                errs++;
Packit Service c5cf8c
                if (verbose)
Packit Service c5cf8c
                    fprintf(stderr, "ind_rd_buffer_size is %d; should be %d\n",
Packit Service c5cf8c
                            atoi(value), 2097152);
Packit Service c5cf8c
            }
Packit Service c5cf8c
        } else if (!strcmp("ind_wr_buffer_size", key)) {
Packit Service c5cf8c
            if (atoi(value) != 1048576) {
Packit Service c5cf8c
                errs++;
Packit Service c5cf8c
                if (verbose)
Packit Service c5cf8c
                    fprintf(stderr, "ind_wr_buffer_size is %d; should be %d\n",
Packit Service c5cf8c
                            atoi(value), 1048576);
Packit Service c5cf8c
            }
Packit Service c5cf8c
        } else if (!strcmp("romio_ds_read", key)) {
Packit Service c5cf8c
            if (strcmp("automatic", value)) {
Packit Service c5cf8c
                errs++;
Packit Service c5cf8c
                if (verbose)
Packit Service c5cf8c
                    fprintf(stderr, "romio_ds_read is set to %s; should be %s\n",
Packit Service c5cf8c
                            value, "automatic");
Packit Service c5cf8c
            }
Packit Service c5cf8c
        } else if (!strcmp("romio_ds_write", key)) {
Packit Service c5cf8c
            /* Unreliable test -- value is file system dependent.  Ignore. */
Packit Service c5cf8c
        } else if (!strcmp("cb_config_list", key)) {
Packit Service c5cf8c
#ifndef SKIP_CB_CONFIG_LIST_TEST
Packit Service c5cf8c
            if (strcmp("*:*", value)) {
Packit Service c5cf8c
                errs++;
Packit Service c5cf8c
                if (verbose)
Packit Service c5cf8c
                    fprintf(stderr, "cb_config_list is set to %s; should be %s\n", value, "*:*");
Packit Service c5cf8c
            }
Packit Service c5cf8c
#endif
Packit Service c5cf8c
        } else if (!strcmp("romio_cb_pfr", key)) {
Packit Service c5cf8c
            if (strcmp("disable", value)) {
Packit Service c5cf8c
                errs++;
Packit Service c5cf8c
                if (verbose)
Packit Service c5cf8c
                    fprintf(stderr, "romio_cb_pfr is set to %s; should be %s\n",
Packit Service c5cf8c
                            value, "automatic");
Packit Service c5cf8c
            }
Packit Service c5cf8c
        } else if (!strcmp("romio_cb_fr_types", key)) {
Packit Service c5cf8c
            if (strcmp("aar", value)) {
Packit Service c5cf8c
                errs++;
Packit Service c5cf8c
                if (verbose)
Packit Service c5cf8c
                    fprintf(stderr, "romio_cb_fr_types is set to %s; should be %s\n", value, "aar");
Packit Service c5cf8c
            }
Packit Service c5cf8c
        } else if (!strcmp("romio_cb_fr_alignment", key)) {
Packit Service c5cf8c
            if (strcmp("1", value)) {
Packit Service c5cf8c
                errs++;
Packit Service c5cf8c
                if (verbose)
Packit Service c5cf8c
                    fprintf(stderr, "romio_cb_fr_alignment is set to %s; should be %s\n",
Packit Service c5cf8c
                            value, "1");
Packit Service c5cf8c
            }
Packit Service c5cf8c
        } else if (!strcmp("romio_cb_ds_threshold", key)) {
Packit Service c5cf8c
            if (strcmp("0", value)) {
Packit Service c5cf8c
                errs++;
Packit Service c5cf8c
                if (verbose)
Packit Service c5cf8c
                    fprintf(stderr, "romio_cb_ds_threshold is set to %s; should be %s\n",
Packit Service c5cf8c
                            value, "0");
Packit Service c5cf8c
            }
Packit Service c5cf8c
        } else if (!strcmp("romio_cb_alltoall", key)) {
Packit Service c5cf8c
            if (strcmp("automatic", value)) {
Packit Service c5cf8c
                errs++;
Packit Service c5cf8c
                if (verbose)
Packit Service c5cf8c
                    fprintf(stderr, "romio_cb_alltoall is set to %s; should be %s\n",
Packit Service c5cf8c
                            value, "automatic");
Packit Service c5cf8c
            }
Packit Service c5cf8c
        }
Packit Service c5cf8c
Packit Service c5cf8c
        else {
Packit Service c5cf8c
            if (verbose)
Packit Service c5cf8c
                fprintf(stderr, "unexpected key %s (not counted as an error)\n", key);
Packit Service c5cf8c
        }
Packit Service c5cf8c
    }
Packit Service c5cf8c
Packit Service c5cf8c
    /* Q: SHOULD WE BOTHER LOOKING AT THE OTHER PROCESSES? */
Packit Service c5cf8c
    if (!mynod) {
Packit Service c5cf8c
        if (errs)
Packit Service c5cf8c
            fprintf(stderr, "Found %d errors.\n", errs);
Packit Service c5cf8c
        else
Packit Service c5cf8c
            printf(" No Errors\n");
Packit Service c5cf8c
    }
Packit Service c5cf8c
Packit Service c5cf8c
    MPI_File_close(&fh;;
Packit Service c5cf8c
    free(filename);
Packit Service c5cf8c
    MPI_Info_free(&info_used);
Packit Service c5cf8c
    MPI_Info_free(&info;;
Packit Service c5cf8c
    MPI_Finalize();
Packit Service c5cf8c
    return 0;
Packit Service c5cf8c
}