Merge pull request #105 from hpc/feature-test-scripts-85

Dry-run option to test the configuration / scripts.
master
Glenn K. Lockwood 2018-12-04 15:06:47 -06:00 committed by GitHub
commit e1158daaf2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 82 additions and 24 deletions

View File

@ -241,13 +241,15 @@ static void *HDF5_Open(char *testFileName, IOR_param_t * param)
#endif #endif
/* open file */ /* open file */
if (param->open == WRITE) { /* WRITE */ if(! param->dryRun){
*fd = H5Fcreate(testFileName, fd_mode, if (param->open == WRITE) { /* WRITE */
createPropList, accessPropList); *fd = H5Fcreate(testFileName, fd_mode,
HDF5_CHECK(*fd, "cannot create file"); createPropList, accessPropList);
} else { /* READ or CHECK */ HDF5_CHECK(*fd, "cannot create file");
*fd = H5Fopen(testFileName, fd_mode, accessPropList); } else { /* READ or CHECK */
HDF5_CHECK(*fd, "cannot open file"); *fd = H5Fopen(testFileName, fd_mode, accessPropList);
HDF5_CHECK(*fd, "cannot open file");
}
} }
/* show hints actually attached to file handle */ /* show hints actually attached to file handle */
@ -395,6 +397,9 @@ static IOR_offset_t HDF5_Xfer(int access, void *fd, IOR_size_t * buffer,
} }
} }
if(param->dryRun)
return length;
/* create new data set */ /* create new data set */
if (startNewDataSet == TRUE) { if (startNewDataSet == TRUE) {
/* if just opened this file, no data set to close yet */ /* if just opened this file, no data set to close yet */
@ -440,6 +445,8 @@ static void HDF5_Fsync(void *fd, IOR_param_t * param)
*/ */
static void HDF5_Close(void *fd, IOR_param_t * param) static void HDF5_Close(void *fd, IOR_param_t * param)
{ {
if(param->dryRun)
return;
if (param->fd_fppReadCheck == NULL) { if (param->fd_fppReadCheck == NULL) {
HDF5_CHECK(H5Dclose(dataSet), "cannot close data set"); HDF5_CHECK(H5Dclose(dataSet), "cannot close data set");
HDF5_CHECK(H5Sclose(dataSpace), "cannot close data space"); HDF5_CHECK(H5Sclose(dataSpace), "cannot close data space");
@ -459,7 +466,10 @@ static void HDF5_Close(void *fd, IOR_param_t * param)
*/ */
static void HDF5_Delete(char *testFileName, IOR_param_t * param) static void HDF5_Delete(char *testFileName, IOR_param_t * param)
{ {
return(MPIIO_Delete(testFileName, param)); if(param->dryRun)
return
MPIIO_Delete(testFileName, param);
return;
} }
/* /*
@ -591,7 +601,9 @@ static void SetupDataSet(void *fd, IOR_param_t * param)
static IOR_offset_t static IOR_offset_t
HDF5_GetFileSize(IOR_param_t * test, MPI_Comm testComm, char *testFileName) HDF5_GetFileSize(IOR_param_t * test, MPI_Comm testComm, char *testFileName)
{ {
return(MPIIO_GetFileSize(test, testComm, testFileName)); if(test->dryRun)
return 0;
return(MPIIO_GetFileSize(test, testComm, testFileName));
} }
/* /*
@ -599,5 +611,7 @@ HDF5_GetFileSize(IOR_param_t * test, MPI_Comm testComm, char *testFileName)
*/ */
static int HDF5_Access(const char *path, int mode, IOR_param_t *param) static int HDF5_Access(const char *path, int mode, IOR_param_t *param)
{ {
return(MPIIO_Access(path, mode, param)); if(param->dryRun)
return 0;
return(MPIIO_Access(path, mode, param));
} }

View File

@ -69,6 +69,9 @@ ior_aiori_t mpiio_aiori = {
*/ */
int MPIIO_Access(const char *path, int mode, IOR_param_t *param) int MPIIO_Access(const char *path, int mode, IOR_param_t *param)
{ {
if(param->dryRun){
return MPI_SUCCESS;
}
MPI_File fd; MPI_File fd;
int mpi_mode = MPI_MODE_UNIQUE_OPEN; int mpi_mode = MPI_MODE_UNIQUE_OPEN;
@ -93,7 +96,10 @@ int MPIIO_Access(const char *path, int mode, IOR_param_t *param)
*/ */
static void *MPIIO_Create(char *testFileName, IOR_param_t * param) static void *MPIIO_Create(char *testFileName, IOR_param_t * param)
{ {
return MPIIO_Open(testFileName, param); if(param->dryRun){
return 0;
}
return MPIIO_Open(testFileName, param);
} }
/* /*
@ -171,11 +177,13 @@ static void *MPIIO_Open(char *testFileName, IOR_param_t * param)
ShowHints(&mpiHints); ShowHints(&mpiHints);
fprintf(stdout, "}\n"); fprintf(stdout, "}\n");
} }
MPI_CHECK(MPI_File_open(comm, testFileName, fd_mode, mpiHints, fd), if(! param->dryRun){
MPI_CHECK(MPI_File_open(comm, testFileName, fd_mode, mpiHints, fd),
"cannot open file"); "cannot open file");
}
/* show hints actually attached to file handle */ /* show hints actually attached to file handle */
if (rank == 0 && param->showHints) { if (rank == 0 && param->showHints && ! param->dryRun) {
if (mpiHints != MPI_INFO_NULL) if (mpiHints != MPI_INFO_NULL)
MPI_CHECK(MPI_Info_free(&mpiHints), "MPI_Info_free failed"); MPI_CHECK(MPI_Info_free(&mpiHints), "MPI_Info_free failed");
MPI_CHECK(MPI_File_get_info(*fd, &mpiHints), MPI_CHECK(MPI_File_get_info(*fd, &mpiHints),
@ -186,7 +194,7 @@ static void *MPIIO_Open(char *testFileName, IOR_param_t * param)
} }
/* preallocate space for file */ /* preallocate space for file */
if (param->preallocate && param->open == WRITE) { if (param->preallocate && param->open == WRITE && ! param->dryRun) {
MPI_CHECK(MPI_File_preallocate(*fd, MPI_CHECK(MPI_File_preallocate(*fd,
(MPI_Offset) (param->segmentCount (MPI_Offset) (param->segmentCount
* *
@ -232,11 +240,13 @@ static void *MPIIO_Open(char *testFileName, IOR_param_t * param)
MPI_CHECK(MPI_Type_commit(&param->fileType), MPI_CHECK(MPI_Type_commit(&param->fileType),
"cannot commit datatype"); "cannot commit datatype");
MPI_CHECK(MPI_File_set_view(*fd, (MPI_Offset) 0, if(! param->dryRun){
MPI_CHECK(MPI_File_set_view(*fd, (MPI_Offset) 0,
param->transferType, param->transferType,
param->fileType, "native", param->fileType, "native",
(MPI_Info) MPI_INFO_NULL), (MPI_Info) MPI_INFO_NULL),
"cannot set file view"); "cannot set file view");
}
} }
if (mpiHints != MPI_INFO_NULL) if (mpiHints != MPI_INFO_NULL)
MPI_CHECK(MPI_Info_free(&mpiHints), "MPI_Info_free failed"); MPI_CHECK(MPI_Info_free(&mpiHints), "MPI_Info_free failed");
@ -254,6 +264,9 @@ static IOR_offset_t MPIIO_Xfer(int access, void *fd, IOR_size_t * buffer,
will get "assignment from incompatible pointer-type" warnings, will get "assignment from incompatible pointer-type" warnings,
if we only use this one set of signatures. */ if we only use this one set of signatures. */
if(param->dryRun)
return length;
int (MPIAPI * Access) (MPI_File, void *, int, int (MPIAPI * Access) (MPI_File, void *, int,
MPI_Datatype, MPI_Status *); MPI_Datatype, MPI_Status *);
int (MPIAPI * Access_at) (MPI_File, MPI_Offset, void *, int, int (MPIAPI * Access_at) (MPI_File, MPI_Offset, void *, int,
@ -382,8 +395,10 @@ static IOR_offset_t MPIIO_Xfer(int access, void *fd, IOR_size_t * buffer,
*/ */
static void MPIIO_Fsync(void *fdp, IOR_param_t * param) static void MPIIO_Fsync(void *fdp, IOR_param_t * param)
{ {
if (MPI_File_sync(*(MPI_File *)fdp) != MPI_SUCCESS) if(param->dryRun)
EWARN("fsync() failed"); return;
if (MPI_File_sync(*(MPI_File *)fdp) != MPI_SUCCESS)
EWARN("fsync() failed");
} }
/* /*
@ -391,7 +406,9 @@ static void MPIIO_Fsync(void *fdp, IOR_param_t * param)
*/ */
static void MPIIO_Close(void *fd, IOR_param_t * param) static void MPIIO_Close(void *fd, IOR_param_t * param)
{ {
MPI_CHECK(MPI_File_close((MPI_File *) fd), "cannot close file"); if(! param->dryRun){
MPI_CHECK(MPI_File_close((MPI_File *) fd), "cannot close file");
}
if ((param->useFileView == TRUE) && (param->fd_fppReadCheck == NULL)) { if ((param->useFileView == TRUE) && (param->fd_fppReadCheck == NULL)) {
/* /*
* need to free the datatype, so done in the close process * need to free the datatype, so done in the close process
@ -409,8 +426,10 @@ static void MPIIO_Close(void *fd, IOR_param_t * param)
*/ */
void MPIIO_Delete(char *testFileName, IOR_param_t * param) void MPIIO_Delete(char *testFileName, IOR_param_t * param)
{ {
MPI_CHECK(MPI_File_delete(testFileName, (MPI_Info) MPI_INFO_NULL), if(param->dryRun)
"cannot delete file"); return;
MPI_CHECK(MPI_File_delete(testFileName, (MPI_Info) MPI_INFO_NULL),
"cannot delete file");
} }
/* /*
@ -473,6 +492,8 @@ static IOR_offset_t SeekOffset(MPI_File fd, IOR_offset_t offset,
IOR_offset_t MPIIO_GetFileSize(IOR_param_t * test, MPI_Comm testComm, IOR_offset_t MPIIO_GetFileSize(IOR_param_t * test, MPI_Comm testComm,
char *testFileName) char *testFileName)
{ {
if(test->dryRun)
return 0;
IOR_offset_t aggFileSizeFromStat, tmpMin, tmpMax, tmpSum; IOR_offset_t aggFileSizeFromStat, tmpMin, tmpMax, tmpSum;
MPI_File fd; MPI_File fd;
MPI_Comm comm; MPI_Comm comm;

View File

@ -278,6 +278,9 @@ void *POSIX_Create(char *testFileName, IOR_param_t * param)
if (param->useO_DIRECT == TRUE) if (param->useO_DIRECT == TRUE)
set_o_direct_flag(&fd_oflag); set_o_direct_flag(&fd_oflag);
if(param->dryRun)
return 0;
#ifdef HAVE_LUSTRE_LUSTRE_USER_H #ifdef HAVE_LUSTRE_LUSTRE_USER_H
if (param->lustre_set_striping) { if (param->lustre_set_striping) {
/* In the single-shared-file case, task 0 has to creat the /* In the single-shared-file case, task 0 has to creat the
@ -383,6 +386,10 @@ void *POSIX_Open(char *testFileName, IOR_param_t * param)
set_o_direct_flag(&fd_oflag); set_o_direct_flag(&fd_oflag);
fd_oflag |= O_RDWR; fd_oflag |= O_RDWR;
if(param->dryRun)
return 0;
*fd = open64(testFileName, fd_oflag); *fd = open64(testFileName, fd_oflag);
if (*fd < 0) if (*fd < 0)
ERR("open64 failed"); ERR("open64 failed");
@ -419,6 +426,9 @@ static IOR_offset_t POSIX_Xfer(int access, void *file, IOR_size_t * buffer,
long long rc; long long rc;
int fd; int fd;
if(param->dryRun)
return length;
fd = *(int *)file; fd = *(int *)file;
#ifdef HAVE_GPFS_FCNTL_H #ifdef HAVE_GPFS_FCNTL_H
@ -500,6 +510,8 @@ static void POSIX_Fsync(void *fd, IOR_param_t * param)
*/ */
void POSIX_Close(void *fd, IOR_param_t * param) void POSIX_Close(void *fd, IOR_param_t * param)
{ {
if(param->dryRun)
return;
if (close(*(int *)fd) != 0) if (close(*(int *)fd) != 0)
ERR("close() failed"); ERR("close() failed");
free(fd); free(fd);
@ -510,11 +522,14 @@ void POSIX_Close(void *fd, IOR_param_t * param)
*/ */
void POSIX_Delete(char *testFileName, IOR_param_t * param) void POSIX_Delete(char *testFileName, IOR_param_t * param)
{ {
char errmsg[256]; if(param->dryRun)
sprintf(errmsg, "[RANK %03d]: unlink() of file \"%s\" failed\n", return;
rank, testFileName); if (unlink(testFileName) != 0){
if (unlink(testFileName) != 0) char errmsg[256];
sprintf(errmsg, "[RANK %03d]: unlink() of file \"%s\" failed\n",
rank, testFileName);
EWARN(errmsg); EWARN(errmsg);
}
} }
/* /*
@ -523,6 +538,8 @@ void POSIX_Delete(char *testFileName, IOR_param_t * param)
IOR_offset_t POSIX_GetFileSize(IOR_param_t * test, MPI_Comm testComm, IOR_offset_t POSIX_GetFileSize(IOR_param_t * test, MPI_Comm testComm,
char *testFileName) char *testFileName)
{ {
if(test->dryRun)
return 0;
struct stat stat_buf; struct stat stat_buf;
IOR_offset_t aggFileSizeFromStat, tmpMin, tmpMax, tmpSum; IOR_offset_t aggFileSizeFromStat, tmpMin, tmpMax, tmpSum;

View File

@ -338,6 +338,7 @@ void ShowTestStart(IOR_param_t *test)
PrintKeyValInt("outlierThreshold", test->outlierThreshold); PrintKeyValInt("outlierThreshold", test->outlierThreshold);
PrintKeyVal("options", test->options); PrintKeyVal("options", test->options);
PrintKeyValInt("dryRun", test->dryRun);
PrintKeyValInt("nodes", test->nodes); PrintKeyValInt("nodes", test->nodes);
PrintKeyValInt("memoryPerTask", (unsigned long) test->memoryPerTask); PrintKeyValInt("memoryPerTask", (unsigned long) test->memoryPerTask);
PrintKeyValInt("memoryPerNode", (unsigned long) test->memoryPerNode); PrintKeyValInt("memoryPerNode", (unsigned long) test->memoryPerNode);
@ -442,6 +443,9 @@ void ShowSetup(IOR_param_t *params)
PrintKeyVal("xfersize", HumanReadable(params->transferSize, BASE_TWO)); PrintKeyVal("xfersize", HumanReadable(params->transferSize, BASE_TWO));
PrintKeyVal("blocksize", HumanReadable(params->blockSize, BASE_TWO)); PrintKeyVal("blocksize", HumanReadable(params->blockSize, BASE_TWO));
PrintKeyVal("aggregate filesize", HumanReadable(params->expectedAggFileSize, BASE_TWO)); PrintKeyVal("aggregate filesize", HumanReadable(params->expectedAggFileSize, BASE_TWO));
if(params->dryRun){
PrintKeyValInt("dryRun", params->dryRun);
}
#ifdef HAVE_LUSTRE_LUSTRE_USER_H #ifdef HAVE_LUSTRE_LUSTRE_USER_H
if (params->lustre_set_striping) { if (params->lustre_set_striping) {

View File

@ -93,6 +93,7 @@ typedef struct
char * testFileName_fppReadCheck;/* filename for fpp read check */ char * testFileName_fppReadCheck;/* filename for fpp read check */
char * hintsFileName; /* full name for hints file */ char * hintsFileName; /* full name for hints file */
char * options; /* options string */ char * options; /* options string */
int dryRun; /* do not perform any I/Os just run evtl. inputs print dummy output */
int numTasks; /* number of tasks for test */ int numTasks; /* number of tasks for test */
int nodes; /* number of nodes for test */ int nodes; /* number of nodes for test */
int tasksPerNode; /* number of tasks per node */ int tasksPerNode; /* number of tasks per node */

View File

@ -530,6 +530,7 @@ IOR_test_t *ParseCommandLine(int argc, char **argv)
{'Z', NULL, "reorderTasksRandom -- changes task ordering to random ordering for readback", OPTION_FLAG, 'd', & initialTestParams.reorderTasksRandom}, {'Z', NULL, "reorderTasksRandom -- changes task ordering to random ordering for readback", OPTION_FLAG, 'd', & initialTestParams.reorderTasksRandom},
{.help=" -O summaryFile=FILE -- store result data into this file", .arg = OPTION_OPTIONAL_ARGUMENT}, {.help=" -O summaryFile=FILE -- store result data into this file", .arg = OPTION_OPTIONAL_ARGUMENT},
{.help=" -O summaryFormat=[default,JSON,CSV] -- use the format for outputing the summary", .arg = OPTION_OPTIONAL_ARGUMENT}, {.help=" -O summaryFormat=[default,JSON,CSV] -- use the format for outputing the summary", .arg = OPTION_OPTIONAL_ARGUMENT},
{0, "dryRun", "do not perform any I/Os just run evtl. inputs print dummy output", OPTION_FLAG, 'd', & initialTestParams.dryRun},
LAST_OPTION, LAST_OPTION,
}; };