More code cleanup. No change in functionality.
parent
0b0a450ed9
commit
488ee724a9
172
src/ior.c
172
src/ior.c
|
@ -64,41 +64,18 @@ ior_aiori_t *available_aiori[] = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static void AioriBind(char *);
|
|
||||||
static void CheckForOutliers(IOR_param_t *, double **, int, int);
|
|
||||||
static void CheckFileSize(IOR_test_t *test, IOR_offset_t dataMoved, int rep);
|
|
||||||
static size_t CompareBuffers(void *, void *, size_t,
|
|
||||||
IOR_offset_t, IOR_param_t *, int);
|
|
||||||
static int CountErrors(IOR_param_t *, int, int);
|
|
||||||
static void *CreateBuffer(size_t);
|
|
||||||
static void DelaySecs(int);
|
|
||||||
static void DestroyTests(IOR_test_t *tests_head);
|
static void DestroyTests(IOR_test_t *tests_head);
|
||||||
static void DisplayFreespace(IOR_param_t *);
|
|
||||||
static void DisplayOutliers(int, double, char *, int, int);
|
|
||||||
static void DisplayUsage(char **);
|
static void DisplayUsage(char **);
|
||||||
static void DistributeHints(void);
|
|
||||||
static void FillBuffer(void *, IOR_param_t *, unsigned long long, int);
|
|
||||||
static void FreeBuffers(int, void *, void *, void *, IOR_offset_t *);
|
|
||||||
static void GetTestFileName(char *, IOR_param_t *);
|
static void GetTestFileName(char *, IOR_param_t *);
|
||||||
static double GetTimeStamp(void);
|
|
||||||
static char *HumanReadable(IOR_offset_t, int);
|
|
||||||
static void PPDouble(int, double, char *);
|
|
||||||
static char *PrependDir(IOR_param_t *, char *);
|
static char *PrependDir(IOR_param_t *, char *);
|
||||||
static char **ParseFileName(char *, int *);
|
static char **ParseFileName(char *, int *);
|
||||||
static void PrintHeader(int argc, char **argv);
|
static void PrintHeader(int argc, char **argv);
|
||||||
static void ReadCheck(void *, void *, void *, void *, IOR_param_t *,
|
|
||||||
IOR_offset_t, IOR_offset_t, IOR_offset_t *,
|
|
||||||
IOR_offset_t *, int, int *);
|
|
||||||
static void RemoveFile(char *, int, IOR_param_t *);
|
|
||||||
static void SetupXferBuffers(void **, void **, void **,
|
|
||||||
IOR_param_t *, int, int);
|
|
||||||
static IOR_test_t *SetupTests(int, char **);
|
static IOR_test_t *SetupTests(int, char **);
|
||||||
static void ShowTestInfo(IOR_param_t *);
|
static void ShowTestInfo(IOR_param_t *);
|
||||||
static void ShowSetup(IOR_param_t *params);
|
static void ShowSetup(IOR_param_t *params);
|
||||||
static void ShowTest(IOR_param_t *);
|
static void ShowTest(IOR_param_t *);
|
||||||
static void PrintSummaryAllTests(IOR_test_t *tests_head);
|
static void PrintSummaryAllTests(IOR_test_t *tests_head);
|
||||||
static void TestIoSys(IOR_test_t *);
|
static void TestIoSys(IOR_test_t *);
|
||||||
static double TimeDeviation(void);
|
|
||||||
static void ValidTests(IOR_param_t *);
|
static void ValidTests(IOR_param_t *);
|
||||||
static IOR_offset_t WriteOrRead(IOR_param_t *, void *, int);
|
static IOR_offset_t WriteOrRead(IOR_param_t *, void *, int);
|
||||||
static void WriteTimes(IOR_param_t *, double **, int, int);
|
static void WriteTimes(IOR_param_t *, double **, int, int);
|
||||||
|
@ -512,7 +489,7 @@ static int CountTasksPerNode(int numTasks, MPI_Comm comm)
|
||||||
/*
|
/*
|
||||||
* Allocate a page-aligned (required by O_DIRECT) buffer.
|
* Allocate a page-aligned (required by O_DIRECT) buffer.
|
||||||
*/
|
*/
|
||||||
static void *CreateBuffer(size_t size)
|
static void *aligned_buffer_alloc(size_t size)
|
||||||
{
|
{
|
||||||
size_t pageSize;
|
size_t pageSize;
|
||||||
size_t pageMask;
|
size_t pageMask;
|
||||||
|
@ -535,6 +512,14 @@ static void *CreateBuffer(size_t size)
|
||||||
return (void *)aligned;
|
return (void *)aligned;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free a buffer allocated by aligned_buffer_alloc().
|
||||||
|
*/
|
||||||
|
static void aligned_buffer_free(void *buf)
|
||||||
|
{
|
||||||
|
free(*(void **)((char *)buf - sizeof(char *)));
|
||||||
|
}
|
||||||
|
|
||||||
void AllocResults(IOR_test_t *test)
|
void AllocResults(IOR_test_t *test)
|
||||||
{
|
{
|
||||||
int reps;
|
int reps;
|
||||||
|
@ -805,28 +790,6 @@ FillBuffer(void *buffer,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Free transfer buffers.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
FreeBuffers(int access,
|
|
||||||
void *checkBuffer,
|
|
||||||
void *readCheckBuffer, void *buffer, IOR_offset_t * offsetArray)
|
|
||||||
{
|
|
||||||
/* free() aligned buffers */
|
|
||||||
if (access == WRITECHECK || access == READCHECK) {
|
|
||||||
free(*(void **)((char *)checkBuffer - sizeof(char *)));
|
|
||||||
}
|
|
||||||
if (access == READCHECK) {
|
|
||||||
free(*(void **)((char *)readCheckBuffer - sizeof(char *)));
|
|
||||||
}
|
|
||||||
free(*(void **)((char *)buffer - sizeof(char *)));
|
|
||||||
|
|
||||||
/* nothing special needed to free() this unaligned buffer */
|
|
||||||
free(offsetArray);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return string describing machine name and type.
|
* Return string describing machine name and type.
|
||||||
*/
|
*/
|
||||||
|
@ -1129,10 +1092,12 @@ ReadCheck(void *fd,
|
||||||
IOR_offset_t *amtXferred,
|
IOR_offset_t *amtXferred,
|
||||||
IOR_offset_t *transferCount, int access, int *errors)
|
IOR_offset_t *transferCount, int access, int *errors)
|
||||||
{
|
{
|
||||||
int readCheckToRank, readCheckFromRank;
|
int readCheckToRank;
|
||||||
|
int readCheckFromRank;
|
||||||
MPI_Status status;
|
MPI_Status status;
|
||||||
IOR_offset_t tmpOffset;
|
IOR_offset_t tmpOffset;
|
||||||
IOR_offset_t segmentSize, segmentNum;
|
IOR_offset_t segmentSize;
|
||||||
|
IOR_offset_t segmentNum;
|
||||||
|
|
||||||
memset(buffer, 'a', transfer);
|
memset(buffer, 'a', transfer);
|
||||||
*amtXferred = backend->xfer(access, fd, buffer, transfer, params);
|
*amtXferred = backend->xfer(access, fd, buffer, transfer, params);
|
||||||
|
@ -1184,7 +1149,7 @@ ReadCheck(void *fd,
|
||||||
*errors += CompareBuffers(buffer, readCheckBuffer, transfer,
|
*errors += CompareBuffers(buffer, readCheckBuffer, transfer,
|
||||||
*transferCount, params, READCHECK);
|
*transferCount, params, READCHECK);
|
||||||
return;
|
return;
|
||||||
} /* ReadCheck() */
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
/*
|
/*
|
||||||
|
@ -1287,6 +1252,34 @@ static void RemoveFile(char *testFileName, int filePerProc, IOR_param_t * test)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Determine any spread (range) between node times.
|
||||||
|
*/
|
||||||
|
static double TimeDeviation(void)
|
||||||
|
{
|
||||||
|
double timestamp;
|
||||||
|
double min = 0;
|
||||||
|
double max = 0;
|
||||||
|
double roottimestamp;
|
||||||
|
|
||||||
|
MPI_CHECK(MPI_Barrier(MPI_COMM_WORLD), "barrier error");
|
||||||
|
timestamp = GetTimeStamp();
|
||||||
|
MPI_CHECK(MPI_Reduce(×tamp, &min, 1, MPI_DOUBLE,
|
||||||
|
MPI_MIN, 0, MPI_COMM_WORLD),
|
||||||
|
"cannot reduce tasks' times");
|
||||||
|
MPI_CHECK(MPI_Reduce(×tamp, &max, 1, MPI_DOUBLE,
|
||||||
|
MPI_MAX, 0, MPI_COMM_WORLD),
|
||||||
|
"cannot reduce tasks' times");
|
||||||
|
|
||||||
|
/* delta between individual nodes' time and root node's time */
|
||||||
|
roottimestamp = timestamp;
|
||||||
|
MPI_CHECK(MPI_Bcast(&roottimestamp, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD),
|
||||||
|
"cannot broadcast root's time");
|
||||||
|
wall_clock_delta = timestamp - roottimestamp;
|
||||||
|
|
||||||
|
return max - min;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup tests by parsing commandline and creating test script.
|
* Setup tests by parsing commandline and creating test script.
|
||||||
*/
|
*/
|
||||||
|
@ -1323,22 +1316,36 @@ static IOR_test_t *SetupTests(int argc, char **argv)
|
||||||
/*
|
/*
|
||||||
* Setup transfer buffers, creating and filling as needed.
|
* Setup transfer buffers, creating and filling as needed.
|
||||||
*/
|
*/
|
||||||
static void
|
static void XferBuffersSetup(void **buffer, void **checkBuffer,
|
||||||
SetupXferBuffers(void **buffer,
|
void **readCheckBuffer, int access,
|
||||||
void **checkBuffer,
|
IOR_param_t * test, int pretendRank)
|
||||||
void **readCheckBuffer,
|
|
||||||
IOR_param_t * test, int pretendRank, int access)
|
|
||||||
{
|
{
|
||||||
/* create buffer of filled data */
|
*buffer = aligned_buffer_alloc(test->transferSize);
|
||||||
*buffer = CreateBuffer(test->transferSize);
|
|
||||||
FillBuffer(*buffer, test, 0, pretendRank);
|
FillBuffer(*buffer, test, 0, pretendRank);
|
||||||
if (access == WRITECHECK || access == READCHECK) {
|
if (access == WRITECHECK || access == READCHECK) {
|
||||||
/* this allocates buffer only */
|
*checkBuffer = aligned_buffer_alloc(test->transferSize);
|
||||||
*checkBuffer = CreateBuffer(test->transferSize);
|
|
||||||
if (access == READCHECK) {
|
|
||||||
*readCheckBuffer = CreateBuffer(test->transferSize);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (access == READCHECK) {
|
||||||
|
*readCheckBuffer = aligned_buffer_alloc(test->transferSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free transfer buffers.
|
||||||
|
*/
|
||||||
|
static void XferBuffersFree(void *buffer, void *checkBuffer,
|
||||||
|
void *readCheckBuffer, int access)
|
||||||
|
{
|
||||||
|
aligned_buffer_free(buffer);
|
||||||
|
if (access == WRITECHECK || access == READCHECK) {
|
||||||
|
aligned_buffer_free(checkBuffer);
|
||||||
|
}
|
||||||
|
if (access == READCHECK) {
|
||||||
|
aligned_buffer_free(readCheckBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2178,34 +2185,6 @@ static void TestIoSys(IOR_test_t *test)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Determine any spread (range) between node times.
|
|
||||||
*/
|
|
||||||
static double TimeDeviation(void)
|
|
||||||
{
|
|
||||||
double timestamp;
|
|
||||||
double min = 0;
|
|
||||||
double max = 0;
|
|
||||||
double roottimestamp;
|
|
||||||
|
|
||||||
MPI_CHECK(MPI_Barrier(MPI_COMM_WORLD), "barrier error");
|
|
||||||
timestamp = GetTimeStamp();
|
|
||||||
MPI_CHECK(MPI_Reduce(×tamp, &min, 1, MPI_DOUBLE,
|
|
||||||
MPI_MIN, 0, MPI_COMM_WORLD),
|
|
||||||
"cannot reduce tasks' times");
|
|
||||||
MPI_CHECK(MPI_Reduce(×tamp, &max, 1, MPI_DOUBLE,
|
|
||||||
MPI_MAX, 0, MPI_COMM_WORLD),
|
|
||||||
"cannot reduce tasks' times");
|
|
||||||
|
|
||||||
/* delta between individual nodes' time and root node's time */
|
|
||||||
roottimestamp = timestamp;
|
|
||||||
MPI_CHECK(MPI_Bcast(&roottimestamp, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD),
|
|
||||||
"cannot broadcast root's time");
|
|
||||||
wall_clock_delta = timestamp - roottimestamp;
|
|
||||||
|
|
||||||
return max - min;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine if valid tests from parameters.
|
* Determine if valid tests from parameters.
|
||||||
*/
|
*/
|
||||||
|
@ -2473,8 +2452,11 @@ static IOR_offset_t *GetOffsetArrayRandom(IOR_param_t * test, int pretendRank,
|
||||||
static IOR_offset_t WriteOrRead(IOR_param_t * test, void *fd, int access)
|
static IOR_offset_t WriteOrRead(IOR_param_t * test, void *fd, int access)
|
||||||
{
|
{
|
||||||
int errors = 0;
|
int errors = 0;
|
||||||
IOR_offset_t amtXferred,
|
IOR_offset_t amtXferred;
|
||||||
transfer, transferCount = 0, pairCnt = 0, *offsetArray;
|
IOR_offset_t transfer;
|
||||||
|
IOR_offset_t transferCount = 0;
|
||||||
|
IOR_offset_t pairCnt = 0;
|
||||||
|
IOR_offset_t *offsetArray;
|
||||||
int pretendRank;
|
int pretendRank;
|
||||||
void *buffer = NULL;
|
void *buffer = NULL;
|
||||||
void *checkBuffer = NULL;
|
void *checkBuffer = NULL;
|
||||||
|
@ -2492,8 +2474,8 @@ static IOR_offset_t WriteOrRead(IOR_param_t * test, void *fd, int access)
|
||||||
offsetArray = GetOffsetArraySequential(test, pretendRank);
|
offsetArray = GetOffsetArraySequential(test, pretendRank);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetupXferBuffers(&buffer, &checkBuffer, &readCheckBuffer,
|
XferBuffersSetup(&buffer, &checkBuffer, &readCheckBuffer,
|
||||||
test, pretendRank, access);
|
access, test, pretendRank);
|
||||||
|
|
||||||
/* check for stonewall */
|
/* check for stonewall */
|
||||||
startForStonewall = GetTimeStamp();
|
startForStonewall = GetTimeStamp();
|
||||||
|
@ -2548,7 +2530,9 @@ static IOR_offset_t WriteOrRead(IOR_param_t * test, void *fd, int access)
|
||||||
|
|
||||||
totalErrorCount += CountErrors(test, access, errors);
|
totalErrorCount += CountErrors(test, access, errors);
|
||||||
|
|
||||||
FreeBuffers(access, checkBuffer, readCheckBuffer, buffer, offsetArray);
|
XferBuffersFree(buffer, checkBuffer, readCheckBuffer, access);
|
||||||
|
|
||||||
|
free(offsetArray);
|
||||||
|
|
||||||
if (access == WRITE && test->fsync == TRUE) {
|
if (access == WRITE && test->fsync == TRUE) {
|
||||||
backend->fsync(fd, test); /*fsync after all accesses */
|
backend->fsync(fd, test); /*fsync after all accesses */
|
||||||
|
|
Loading…
Reference in New Issue