The SVCL argument is being removed from the DAOS API, so conditionally
compile out while maintaining backwards compatibility to versions where
it's still required.
The calculation per iteration first computes the value of the slowest process, i.e., highest time or lowest rate. This is then the value for the iteration.
Secondly, calculate the min/max/mean across iterations.
For tree operations, the value is identical to previous as only Rank 0 is involved.
* HDFS module ported to current AIORI API and extended
* Added instructions how to build and run with a HDFS.
* Replaced read with pread to support offsets.
* Implemented HDFS MDTest API
* Improved sync semantics
ior now expects stat to not be fatal. update the DFS driver to not
exit if stat fails since the file can simply not exist.
Signed-off-by: Mohamad Chaarawi <mohamad.chaarawi@intel.com>
Assigning MPI_STATUS to a local variable and then referring to the
local will ensure that the same value is used in both the conditional
expression and the call to MPI_Error_string.
Otherwise, when MPI_STATUS is a function call, like
MPI_CHECKF(fubar(), "%s", "error in fubar");
fubar() is called twice. If there are underlying intermittent errors,
the error code/message for the first call is lost, with confusing output
like this:
read 2206.18 17.27 145.93 262144 131072
0.272595 291.88 0.290829 292.41
ERROR: cannot access explicit, noncollective, MPI MPI_SUCCESS: no errors, (aiori-MPIIO.c:451)
- remove un-needed libdaos_common lib since DAOS driver is removed
- use default container object class when it's not specified
Signed-off-by: Mohamad Chaarawi <mohamad.chaarawi@intel.com>
Bugfix MDTest calculation of multiple iterations was incorrect.
Fix the bug reported by Rick to increase clarity. The previous offset calculation when using multiple iterations was:
for (i = start; i < stop; i++) // i = table position == test number
for (k=0; k < size; k++)
for (j = 0; j < iterations; j++)
value = all[(k * tableSize * iterations) + (j*tableSize) + i];
Note that the mean and min/max was then computed over these values.
But as the values were stored in memory in the order: iteration, rank, table
the correct term is: value = all[j * tableSize * size + k * tableSize + i];
Assume iterations = 2 and size = 3, the value for the test i=0 was computed from:
all[0 * 2 *tbl + 0 * tbl] = 0tbl
all[0 * 2 *tbl + 1 * tbl] = 1tbl
all[1 * 2 *tbl + 0 * tbl] = 2tbl
all[1 * 2 *tbl + 1 * tbl] = 3tbl
all[2 * 2 *tbl + 0 * tbl] = 4tbl
all[2 * 2 *tbl + 1 * tbl] = 5tbl
A more clear traversal would have been:
all[0 * 3 *tbl + 0 * tbl] = 0tbl
all[0 * 3 *tbl + 1 * tbl] = 1tbl
all[0 * 3 *tbl + 2 * tbl] = 2tbl
all[1 * 3 *tbl + 0 * tbl] = 3tbl
all[1 * 3 *tbl + 1 * tbl] = 4tbl
all[1 * 3 *tbl + 2 * tbl] = 5tbl
In that sense, it wasn't a functional bug but it decreased readability and now that we want to print the performance of the individual ranks, it is useful to fix this.
Refactoring: MDTest
This PR refactors the 50+ static variables to be part of a global option structure to remove ambiguity in which scope the variable is.
In the code, there is at the moment too much dependency to global variables.
Ultimately, the goal was to make stonewalling work with the multi-dir approach but it turned out this requires much more refactoring and therefore, doing it piece by piece.