27 # include <sys/time.h> 28 # include <sys/utsname.h> 73 for (tptr = tests_head; tptr !=
NULL; tptr = tptr->
next) {
109 MPI_CHECK(MPI_Init(&argc, &argv),
"cannot initialize MPI");
113 "cannot get number of tasks");
129 for (tptr = tests_head; tptr !=
NULL; tptr = tptr->
next) {
156 MPI_CHECK(MPI_Finalize(),
"cannot finalize MPI");
173 assert (
NULL != default_aiori);
180 p->
api = strdup(default_aiori);
181 p->
platform = strdup(
"HOST(OSTYPE)");
202 hdfs_user = getenv(
"USER");
224 char *timeString,
int access,
int outlierThreshold)
233 (&timerVal, &sum, 1, MPI_DOUBLE, MPI_SUM,
testComm),
236 sqrDiff = pow((mean - timerVal), 2);
238 (&sqrDiff, &var, 1, MPI_DOUBLE, MPI_SUM,
testComm),
243 if (access ==
WRITE) {
244 strcpy(accessString,
"write");
246 strcpy(accessString,
"read");
248 if (fabs(timerVal - mean) > (
double)outlierThreshold) {
249 fprintf(
out_logfile,
"WARNING: for task %d, %s %s is %f\n",
250 rank, accessString, timeString, timerVal);
251 fprintf(
out_logfile,
" (mean=%f, stddev=%f)\n", mean, sd);
264 if (access ==
WRITE) {
273 timer[shift + 1][rep] - timer[shift + 0][rep],
276 timer[shift + 3][rep] - timer[shift + 2][rep],
277 "elapsed transfer time", access,
280 timer[shift + 5][rep] - timer[shift + 4][rep],
296 MPI_CHECK(MPI_Allreduce(&dataMoved, & results[rep].aggFileSizeFromXfer,
297 1, MPI_LONG_LONG_INT, MPI_SUM,
testComm),
298 "cannot total data moved");
300 if (strcasecmp(params->
api,
"HDF5") != 0 && strcasecmp(params->
api,
"NCMPI") != 0) {
307 "WARNING: Expected aggregate file size = %lld.\n",
310 "WARNING: Stat() of aggregate file size = %lld.\n",
311 (
long long) results[rep].aggFileSizeFromStat);
313 "WARNING: Using actual aggregate bytes moved = %lld.\n",
314 (
long long) results[rep].aggFileSizeFromXfer);
317 "WARNING: maybe caused by deadlineForStonewalling\n");
338 size_t i, j, length, first, last;
339 size_t errorCount = 0;
341 unsigned long long *goodbuf = (
unsigned long long *)expectedBuffer;
342 unsigned long long *testbuf = (
unsigned long long *)unknownBuffer;
345 strcpy(bufferLabel1,
"Expected: ");
346 strcpy(bufferLabel2,
"Actual: ");
348 ERR(
"incorrect argument for CompareBuffers()");
355 "[%d] At file byte offset %lld, comparing %llu-byte transfer\n",
358 for (i = 0; i < length; i++) {
359 if (testbuf[i] != goodbuf[i]) {
363 "[%d] At transfer buffer #%lld, index #%lld (file byte offset %lld):\n",
364 rank, transferCount - 1, (
long long)i,
381 "[%d] PASSED offset = %lld bytes, transfer %lld\n",
383 ((i *
sizeof(
unsigned long long)) +
384 test->
offset), transferCount);
386 for (j = 0; j < 4; j++)
389 for (j = 0; j < 4; j++)
398 "[%d] FAILED comparison of buffer containing %d-byte ints:\n",
399 rank, (
int)
sizeof(
unsigned long long int));
404 "%lld errors between buffer indices %lld and %lld.\n",
405 (
long long)errorCount, (
long long)first,
408 ((first *
sizeof(
unsigned long long)) + test->
offset));
411 for (j = first; j < length && j < first + 4; j++)
416 for (j = first; j < length && j < first + 4; j++)
422 ERR(
"data check error, aborting execution");
435 MPI_CHECK(MPI_Reduce(&errors, &allErrors, 1, MPI_INT, MPI_SUM,
436 0,
testComm),
"cannot reduce errors");
438 "cannot broadcast allErrors value");
439 if (allErrors != 0) {
443 if (
rank == 0 && allErrors != 0) {
445 WARN(
"overflow in errors counted");
448 fprintf(
out_logfile,
"WARNING: incorrect data on %s (%d errors found).\n",
449 access ==
WRITECHECK ?
"write" :
"read", allErrors);
451 "Used Time Stamp %u (0x%x) for Data Signature\n",
469 pageSize = getpagesize();
470 pageMask = pageSize - 1;
471 buf = malloc(size + pageSize +
sizeof(
void *));
473 ERR(
"out of memory");
475 tmp = buf +
sizeof(
char *);
476 aligned = tmp + pageSize - ((size_t) tmp & pageMask);
479 tmp = aligned -
sizeof(
void *);
482 return (
void *)aligned;
490 free(*(
void **)((
char *)buf -
sizeof(
char *)));
494 void * d = malloc(size);
496 ERR(
"Could not malloc an array");
529 ERR(
"malloc() of IOR_test_t failed");
530 newTest->
params = *init_params;
549 for (tptr = tests_head; tptr !=
NULL; tptr = next) {
561 int hintCount = 0, i;
565 if (strncmp(
environ[i],
"IOR_HINT", strlen(
"IOR_HINT"))
569 WARN(
"exceeded max hints; reset MAX_HINTS and recompile");
574 strncpy(hint[hintCount - 1],
environ[i],
580 MPI_CHECK(MPI_Bcast(&hintCount,
sizeof(hintCount), MPI_BYTE,
581 0, MPI_COMM_WORLD),
"cannot broadcast hints");
582 for (i = 0; i < hintCount; i++) {
585 "cannot broadcast hints");
586 strcpy(fullHint, hint[i]);
587 strcpy(hintVariable, strtok(fullHint,
"="));
588 if (getenv(hintVariable) ==
NULL) {
590 if (putenv(hint[i]) != 0)
591 WARN(
"cannot set environment variable");
609 unsigned long long hi, lo;
610 unsigned long long *buf = (
unsigned long long *)buffer;
612 for (i = 0; i < test->
transferSize /
sizeof(
unsigned long long); i++) {
626 unsigned long long hi, lo;
627 unsigned long long *buf = (
unsigned long long *)buffer;
640 hi = ((
unsigned long long)fillrank) << 32;
642 for (i = 0; i < test->
transferSize /
sizeof(
unsigned long long); i++) {
648 buf[i] = offset + (i *
sizeof(
unsigned long long));
663 if (uname(&name) != 0) {
664 EWARN(
"cannot get platform name");
665 sprintf(sysName,
"%s",
"Unknown");
666 sprintf(nodeName,
"%s",
"Unknown");
668 sprintf(sysName,
"%s", name.sysname);
669 sprintf(nodeName,
"%s", name.nodename);
673 if (strlen(nodeName) == 0) {
677 p = start + strlen(nodeName) - 1;
684 if (*p < '0' || *p >
'9') {
692 sprintf(platformName,
"%s(%s)", nodeName, sysName);
693 return strdup(platformName);
703 char **fileNames, *tmp, *token;
716 while (*tmp !=
'\0') {
723 fileNames = (
char **)malloc((*count) *
sizeof(
char **));
724 if (fileNames ==
NULL)
725 ERR(
"out of memory");
728 token = strtok(name, delimiterString);
729 while (token !=
NULL) {
730 fileNames[i] = token;
731 token = strtok(
NULL, delimiterString);
746 char testFileNameRoot[
MAX_STR];
754 ERR(
"cannot use multiple file names with unique directories");
756 strcpy(testFileNameRoot,
760 strcpy(testFileNameRoot, fileNames[0]);
770 strcpy(testFileNameRoot,
773 sprintf(testFileName,
"%s.%08d", testFileNameRoot,
776 strcpy(testFileName, testFileNameRoot);
782 strcat(testFileName, tmpString);
798 dir = (
char *)malloc(
MAX_STR + 1);
800 ERR(
"out of memory");
803 strcpy(dir, rootDir);
806 if (dir[i] ==
'\0' || dir[i] ==
'/') {
815 strcpy(fname, rootDir);
818 if (fname[i] ==
'\0' || fname[i] ==
'/') {
829 if (access(dir, F_OK) != 0) {
830 if (mkdir(dir, S_IRWXU) < 0) {
831 ERR(
"cannot create directory");
835 }
else if (access(dir, R_OK) != 0 || access(dir, W_OK) != 0 ||
836 access(dir, X_OK) != 0) {
837 ERR(
"invalid directory permissions");
855 double reduced[12] = { 0 };
863 assert(access ==
WRITE || access ==
READ);
867 for (i = 0; i < 12; i++) {
868 op = i % 2 ? MPI_MAX : MPI_MIN;
869 MPI_CHECK(MPI_Reduce(&timer[i][rep], &reduced[i], 1, MPI_DOUBLE,
879 for (i = 0; i < 6; i++) {
880 diff[i] = reduced[2 * i + 1] - reduced[2 * i];
882 if (access ==
WRITE) {
883 totalTime = reduced[5] - reduced[0];
885 diff_subset = &diff[0];
887 totalTime = reduced[11] - reduced[6];
889 diff_subset = &diff[3];
907 int tmpRankOffset = 0;
915 if (backend->
access(testFileName, F_OK, test) == 0) {
916 backend->
delete(testFileName, test);
923 if ((
rank == 0) && (backend->
access(testFileName, F_OK, test) == 0)) {
924 backend->
delete(testFileName, test);
937 MPI_CHECK(MPI_Comm_size(com, & size),
"MPI_Comm_size() error");
950 while (tests !=
NULL) {
1021 page_size = sysconf(_SC_PAGESIZE);
1023 buf = (
char *)malloc(size);
1027 for (ptr = buf; ptr < buf+
size; ptr += page_size) {
1036 int *rankoffs =
NULL;
1037 int *filecont =
NULL;
1038 int *filehits =
NULL;
1043 rankoffs = (
int *)malloc(params->
numTasks *
sizeof(
int));
1044 filecont = (
int *)malloc(params->
numTasks *
sizeof(
int));
1045 filehits = (
int *)malloc(params->
numTasks *
sizeof(
int));
1050 "MPI_Gather error");
1055 memset((
void *)filecont, 0, params->
numTasks *
sizeof(
int));
1056 for (ifile = 0; ifile < params->
numTasks; ifile++) {
1057 filecont[(ifile + rankoffs[ifile]) % params->
numTasks]++;
1059 memset((
void *)filehits, 0, params->
numTasks *
sizeof(
int));
1060 for (ifile = 0; ifile < params->
numTasks; ifile++)
1061 for (jfile = 0; jfile < params->
numTasks; jfile++) {
1062 if (ifile == filecont[jfile])
1070 jfile += filehits[ifile], ifile++;
1103 fprintf(
out_logfile,
"This node hogging %ld bytes of memory\n",
1111 fprintf(
out_logfile,
"This task hogging %ld bytes of memory\n", size);
1115 ERR(
"malloc of simulated applciation buffer failed");
1133 MPI_Group orig_group, new_group;
1143 "WARNING: More tasks requested (%d) than available (%d),",
1151 "MPI_Comm_group() error");
1155 MPI_CHECK(MPI_Group_range_incl(orig_group, 1, &range, &new_group),
1156 "MPI_Group_range_incl() error");
1158 "MPI_Comm_create() error");
1159 MPI_CHECK(MPI_Group_free(&orig_group),
"MPI_Group_Free() error");
1160 MPI_CHECK(MPI_Group_free(&new_group),
"MPI_Group_Free() error");
1173 "Using reorderTasks '-C' (expecting block, not cyclic, task assignment)\n");
1179 for (i = 0; i < 12; i++) {
1180 timer[i] = (
double *)malloc(params->
repetitions *
sizeof(
double));
1181 if (timer[i] ==
NULL)
1182 ERR(
"malloc failed");
1187 if (backend ==
NULL)
1219 if ((currentTime = time(
NULL)) == -1) {
1220 ERR(
"cannot get current time");
1223 (
unsigned int)currentTime;
1226 "Using Time Stamp %u (0x%x) for Data Signature\n",
1237 testComm),
"cannot broadcast start time value");
1264 fd = backend->
create(testFileName, params);
1271 "Commencing write performance test: %s",
1277 fprintf(
out_logfile,
"* data moved = %llu\n", dataMoved);
1285 backend->
close(fd, params);
1319 "Verifying contents of the file(s) just written.\n");
1334 fd = backend->
open(testFileName, params);
1336 backend->
close(fd, params);
1347 fprintf(
out_logfile,
"WARNING: Could not read back the stonewalling status from the file!");
1351 int operation_flag =
READ;
1368 unsigned int iseed0;
1370 nodeoffset = (nodeoffset < params->
nodes) ? nodeoffset : params->
nodes - 1;
1375 srand(
rank + iseed0);
1403 fd = backend->
open(testFileName, params);
1410 "Commencing read performance test: %s",
1414 dataMoved =
WriteOrRead(params, & results[rep], fd, operation_flag, &ioBuffers);
1420 backend->
close(fd, params);
1442 double start, finish;
1469 if (hog_buf !=
NULL)
1471 for (i = 0; i < 12; i++) {
1490 test, &defaults, repetitions);
1492 ERR(
"too few tasks for testing");
1494 WARN_RESET(
"inter-test delay must be nonnegative value",
1495 test, &defaults, interTestDelay);
1498 ERR(
"test must write, read, or check read/write file");
1500 ERR(
"using readCheck only requires to write a timeStampSignature -- use -G");
1502 ERR(
"segment count must be positive value");
1504 ERR(
"block size must be a multiple of access size");
1506 ERR(
"block size must be non-negative integer");
1508 ERR(
"transfer size must be a multiple of access size");
1510 ERR(
"alignment must be non-negative integer");
1512 ERR(
"transfer size must be non-negative integer");
1514 ERR(
"test will not complete with zero transfer size");
1517 ERR(
"block size must be a multiple of transfer size");
1520 ERR(
"block size must not be smaller than transfer size");
1523 if ((strcasecmp(test->
api,
"MPIIO") == 0)
1526 ERR(
"block/transfer size may not be smaller than IOR_size_t for MPIIO");
1527 if ((strcasecmp(test->
api,
"HDF5") == 0)
1530 ERR(
"block/transfer size may not be smaller than IOR_size_t for HDF5");
1531 if ((strcasecmp(test->
api,
"NCMPI") == 0)
1534 ERR(
"block/transfer size may not be smaller than IOR_size_t for NCMPI");
1536 && (
sizeof(MPI_Aint) < 8)
1539 ERR(
"segment size must be < 2GiB");
1542 test, &defaults, singleXferAttempt);
1543 if (((strcasecmp(test->
api,
"POSIX") != 0)
1544 && (strcasecmp(test->
api,
"MPIIO") != 0)
1545 && (strcasecmp(test->
api,
"MMAP") != 0)
1546 && (strcasecmp(test->
api,
"HDFS") != 0)
1547 && (strcasecmp(test->
api,
"RADOS") != 0)) && test->
fsync)
1548 WARN_RESET(
"fsync() not supported in selected backend",
1549 test, &defaults, fsync);
1551 WARN_RESET(
"preallocation only available in MPIIO",
1552 test, &defaults, preallocate);
1554 WARN_RESET(
"file view only available in MPIIO",
1555 test, &defaults, useFileView);
1557 WARN_RESET(
"shared file pointer only available in MPIIO",
1558 test, &defaults, useSharedFilePointer);
1560 WARN_RESET(
"shared file pointer not implemented",
1561 test, &defaults, useSharedFilePointer);
1563 WARN_RESET(
"strided datatype only available in MPIIO",
1564 test, &defaults, useStridedDatatype);
1566 WARN_RESET(
"strided datatype not implemented",
1567 test, &defaults, useStridedDatatype);
1568 if ((strcasecmp(test->
api,
"MPIIO") == 0)
1572 ERR(
"need larger file size for strided datatype in MPIIO");
1573 if ((strcasecmp(test->
api,
"POSIX") == 0) && test->
showHints)
1575 test, &defaults, showHints);
1576 if ((strcasecmp(test->
api,
"POSIX") == 0) && test->
collective)
1577 WARN_RESET(
"collective not available in POSIX",
1578 test, &defaults, collective);
1581 ERR(
"transfer size must be aligned with PAGESIZE for MMAP with fsyncPerWrite");
1585 ERR(
"Both Constant and Random task re-ordering specified. Choose one and resubmit");
1588 ERR(
"random offset and random reorder tasks specified with single-shared-file. Choose one and resubmit");
1591 ERR(
"random offset and constant reorder tasks specified with single-shared-file. Choose one and resubmit");
1593 ERR(
"random offset not available with read check option (use write check)");
1595 ERR(
"random offset not available with store file offset option)");
1600 ERR(
"random offset not available with collective MPIIO");
1603 ERR(
"random offset not available with MPIIO fileviews");
1605 ERR(
"random offset not available with HDF5");
1607 ERR(
"random offset not available with NCMPI");
1609 WARN_RESET(
"individual datasets only available in HDF5",
1610 test, &defaults, individualDataSets);
1612 WARN_RESET(
"individual data sets not implemented",
1613 test, &defaults, individualDataSets);
1615 ERR(
"file-per-proc not available in current NCMPI");
1617 if (strcasecmp(test->
api,
"HDF5") != 0) {
1618 ERR(
"'no fill' option only available in HDF5");
1621 #if defined (H5_VERS_MAJOR) && defined (H5_VERS_MINOR) 1623 #if (H5_VERS_MAJOR > 0 && H5_VERS_MINOR > 5) 1627 sprintf(errorString,
1628 "'no fill' option not available in %s",
1633 WARN(
"unable to determine HDF5 version for 'no fill' usage");
1638 ERR(
"Lustre stripe options are incompatible with useExistingTestFile");
1647 if (Nto1 && (s != 1) && (b != t)) {
1648 ERR(
"N:1 (strided) requires xfer-size == block-size");
1672 if (offsetArray ==
NULL)
1673 ERR(
"malloc() failed");
1674 offsetArray[offsets] = -1;
1691 return (offsetArray);
1720 if (access ==
WRITE || access ==
READ) {
1737 if ((random() % test->
numTasks) == pretendRank) {
1748 if (offsetArray ==
NULL)
1749 ERR(
"malloc() failed");
1750 offsetArray[offsets] = -1;
1754 for (i = 0; i < offsets; i++) {
1761 if ((random() % test->
numTasks) == pretendRank) {
1762 offsetArray[offsetCnt] = i;
1768 for (i = 0; i < offsets; i++) {
1769 value = random() % offsets;
1770 tmp = offsetArray[value];
1771 offsetArray[value] = offsetArray[i];
1772 offsetArray[i] = tmp;
1776 return (offsetArray);
1784 void *buffer = ioBuffers->
buffer;
1788 test->
offset = offsetArray[pairCnt];
1791 if (access ==
WRITE) {
1798 backend->
xfer(access, fd, buffer, transfer, test);
1799 if (amtXferred != transfer)
1800 ERR(
"cannot write to file");
1801 }
else if (access ==
READ) {
1803 backend->
xfer(access, fd, buffer, transfer, test);
1804 if (amtXferred != transfer)
1805 ERR(
"cannot read from file");
1807 memset(checkBuffer,
'a', transfer);
1813 amtXferred = backend->
xfer(access, fd, checkBuffer, transfer, test);
1814 if (amtXferred != transfer)
1815 ERR(
"cannot read from file write check");
1817 *errors +=
CompareBuffers(readCheckBuffer, checkBuffer, transfer,
1818 *transferCount, test,
1821 amtXferred = backend->
xfer(access, fd, buffer, transfer, test);
1822 if (amtXferred != transfer){
1823 ERR(
"cannot read from file");
1841 uint64_t pairCnt = 0;
1845 double startForStonewall;
1861 while ((offsetArray[pairCnt] != -1) && !hitStonewall ) {
1862 dataMoved +=
WriteOrReadSingle(pairCnt, offsetArray, pretendRank, & transferCount, & errors, test, fd, ioBuffers, access);
1871 fprintf(
out_logfile,
"%d: stonewalling pairs accessed: %lld\n",
rank, (
long long) pairCnt);
1873 long long data_moved_ll = (
long long) dataMoved;
1874 long long pairs_accessed_min = 0;
1876 1, MPI_LONG_LONG_INT, MPI_MAX,
testComm),
"cannot reduce pairs moved");
1877 double stonewall_runtime =
GetTimeStamp() - startForStonewall;
1879 MPI_CHECK(MPI_Reduce(& pairCnt, & pairs_accessed_min,
1880 1, MPI_LONG_LONG_INT, MPI_MIN, 0,
testComm),
"cannot reduce pairs moved");
1882 1, MPI_LONG_LONG_INT, MPI_MIN, 0,
testComm),
"cannot reduce pairs moved");
1884 1, MPI_LONG_LONG_INT, MPI_SUM, 0,
testComm),
"cannot reduce pairs moved");
1887 fprintf(
out_logfile,
"stonewalling pairs accessed min: %lld max: %zu -- min data: %.1f GiB mean data: %.1f GiB time: %.1fs\n",
1892 if(pairs_accessed_min == pairCnt){
1899 dataMoved +=
WriteOrReadSingle(pairCnt, offsetArray, pretendRank, & transferCount, & errors, test, fd, ioBuffers, access);
1912 backend->
fsync(fd, test);
1925 int i, start = 0, stop = 0;
1927 if (writeOrRead ==
WRITE) {
1930 strcpy(accessType,
"WRITE");
1931 }
else if (writeOrRead ==
READ) {
1934 strcpy(accessType,
"READ");
1936 ERR(
"incorrect WRITE/READ option");
1939 for (i = start; i < stop; i++) {
1942 strcpy(timerName,
"write open start");
1945 strcpy(timerName,
"write open stop");
1948 strcpy(timerName,
"write start");
1951 strcpy(timerName,
"write stop");
1954 strcpy(timerName,
"write close start");
1957 strcpy(timerName,
"write close stop");
1960 strcpy(timerName,
"read open start");
1963 strcpy(timerName,
"read open stop");
1966 strcpy(timerName,
"read start");
1969 strcpy(timerName,
"read stop");
1972 strcpy(timerName,
"read close start");
1975 strcpy(timerName,
"read close stop");
1978 strcpy(timerName,
"invalid timer");
1981 fprintf(
out_logfile,
"Test %d: Iter=%d, Task=%d, Time=%f, %s\n",
1982 test->
id, iteration, (
int)
rank, timer[i][iteration],
long long stonewall_min_data_accessed
IOR_offset_t setAlignment
IOR_offset_t(* get_file_size)(IOR_param_t *, MPI_Comm, char *)
int reorderTasksRandomSeed
int ior_main(int argc, char **argv)
void(* delete)(char *, IOR_param_t *)
static void file_hits_histogram(IOR_param_t *params)
static void DisplayOutliers(int numTasks, double timerVal, char *timeString, int access, int outlierThreshold)
unsigned int incompressibleSeed
unsigned int timeStampSignatureValue
static void InitTests(IOR_test_t *, MPI_Comm)
long long stonewall_avg_data_accessed
int64_t ReadStoneWallingIterations(char *const filename)
static void WriteTimes(IOR_param_t *, double **, int, int)
IOR_offset_t segmentCount
static void aligned_buffer_free(void *buf)
int CountTasksPerNode(MPI_Comm comm)
#define WARN_RESET(MSG, TO_STRUCT_PTR, FROM_STRUCT_PTR, MEMBER)
void PrintHeader(int argc, char **argv)
static void XferBuffersFree(IOR_io_buffers *ioBuffers, IOR_param_t *test)
void PrintLongSummaryOneTest(IOR_test_t *test)
int test_time_elapsed(IOR_param_t *params, double startTime)
void FreeResults(IOR_test_t *test)
static void CheckForOutliers(IOR_param_t *test, double **timer, int rep, int access)
static void ValidateTests(IOR_param_t *)
IOR_offset_t transferSize
void PrintLongSummaryHeader()
static IOR_offset_t WriteOrReadSingle(IOR_offset_t pairCnt, IOR_offset_t *offsetArray, int pretendRank, IOR_offset_t *transferCount, int *errors, IOR_param_t *test, int *fd, IOR_io_buffers *ioBuffers, int access)
static int totalErrorCount
static void * HogMemory(IOR_param_t *params)
static void DestroyTest(IOR_test_t *test)
int setTimeStampSignature
int(* access)(const char *path, int mode, IOR_param_t *param)
IOR_test_t * ior_run(int argc, char **argv, MPI_Comm world_com, FILE *world_out)
void(* close)(void *, IOR_param_t *)
char * stoneWallingStatusFile
void ShowTestStart(IOR_param_t *params)
static char ** ParseFileName(char *, int *)
const ior_aiori_t * aiori_select(const char *api)
void *(* open)(char *, IOR_param_t *)
IOR_offset_t aggFileSizeFromXfer
tPort hdfs_name_node_port
static void CheckFileSize(IOR_test_t *test, IOR_offset_t dataMoved, int rep)
void GetTestFileName(char *testFileName, IOR_param_t *test)
unsigned int reseed_incompressible_prng
void(* fsync)(void *, IOR_param_t *)
void ShowSetup(IOR_param_t *params)
void SeedRandGen(MPI_Comm testComm)
static void ReduceIterResults(IOR_test_t *test, double **timer, int rep, int access)
static void XferBuffersSetup(IOR_io_buffers *ioBuffers, IOR_param_t *test, int pretendRank)
char * CurrentTimeString(void)
void PrintRemoveTiming(double start, double finish, int rep)
#define MPI_CHECK(MPI_STATUS, MSG)
static void FillBuffer(void *buffer, IOR_param_t *test, unsigned long long offset, int fillrank)
static void RemoveFile(char *testFileName, int filePerProc, IOR_param_t *test)
IOR_offset_t expectedAggFileSize
IOR_offset_t aggFileSizeFromStat
static void DestroyTests(IOR_test_t *tests_head)
static IOR_offset_t * GetOffsetArrayRandom(IOR_param_t *test, int pretendRank, int access)
IOR_offset_t aggFileSizeForBW
double GetTimeStamp(void)
void PrintShortSummary(IOR_test_t *test)
static const ior_aiori_t * backend
IOR_test_t * CreateTest(IOR_param_t *init_params, int test_num)
static IOR_offset_t WriteOrRead(IOR_param_t *test, IOR_results_t *results, void *fd, int access, IOR_io_buffers *ioBuffers)
static void * safeMalloc(uint64_t size)
static void TestIoSys(IOR_test_t *)
void DistributeHints(void)
void PrintLongSummaryAllTests(IOR_test_t *tests_head)
static size_t CompareBuffers(void *expectedBuffer, void *unknownBuffer, size_t size, IOR_offset_t transferCount, IOR_param_t *test, int access)
enum PACKET_TYPE dataPacketType
void init_IOR_Param_t(IOR_param_t *p)
void *(* create)(char *, IOR_param_t *)
const char * aiori_default(void)
static void * aligned_buffer_alloc(size_t size)
void PrintReducedResult(IOR_test_t *test, int access, double bw, double *diff_subset, double totalTime, int rep)
uint64_t stoneWallingWearOutIterations
static int CountErrors(IOR_param_t *test, int access, int errors)
static void * malloc_and_touch(size_t size)
static void FillIncompressibleBuffer(void *buffer, IOR_param_t *test)
static char * PrependDir(IOR_param_t *, char *)
void DelaySecs(int delay)
IOR_test_t * ParseCommandLine(int argc, char **argv)
int deadlineForStonewalling
#define FILENAME_DELIMITER
long long int IOR_offset_t
static IOR_offset_t * GetOffsetArraySequential(IOR_param_t *test, int pretendRank)
IOR_offset_t(* xfer)(int, void *, IOR_size_t *, IOR_offset_t, IOR_param_t *)
void ShowTestEnd(IOR_test_t *tptr)
const char * hdfs_name_node
void AllocResults(IOR_test_t *test)