Merge branch 'master' into daos-devel

Signed-off-by: Mohamad Chaarawi <mohamad.chaarawi@intel.com>

Conflicts:
	configure.ac
	src/Makefile.am
	src/aiori-MPIIO.c
	src/aiori.c
	src/aiori.h
	src/ior.c
	src/mdtest.c
	src/option.c
master
Mohamad Chaarawi 2019-09-09 19:55:56 +00:00
commit e9dd5fe15e
44 changed files with 1751 additions and 1458 deletions

View File

@ -9,7 +9,7 @@ install:
# Install MPI # Install MPI
- sudo apt-get install -y openmpi-bin libopenmpi-dev - sudo apt-get install -y openmpi-bin libopenmpi-dev
# Install HDF5 # Install HDF5
- sudo apt-get install -y hdf5-tools libhdf5-mpi-dev - sudo apt-get install -y hdf5-tools libhdf5-openmpi-dev
# Install Lustre # Install Lustre
# TODO: As far as a i can see it needs to be compiled form source with kernel # TODO: As far as a i can see it needs to be compiled form source with kernel
# module as there is no package. # module as there is no package.
@ -22,10 +22,13 @@ install:
# Install HDFS # Install HDFS
# TODO: Not sure with which c libray hdfs should be used and if it is in # TODO: Not sure with which c libray hdfs should be used and if it is in
# the ubuntu repos # the ubuntu repos
# Probably hadoop needs to be installed an provides nativ api. # Probably hadoop needs to be installed an provides native API.
# Install Amazon S3 # Install Amazon S3
# TODO: The needed library needs to be installed. Follow the instructions in # TODO: The needed library needs to be installed. Follow the instructions in
# aiori-S3.c to achive this. # aiori-S3.c to achive this.
# GPFS # GPFS
# NOTE: Think GPFS need a license and is therefore not testable with travis. # NOTE: Think GPFS need a license and is therefore not testable with travis.
script: ./travis-build.sh && CONFIGURE_OPTS="--with-hdf5" ./travis-test.sh script:
- ./travis-build.sh
- export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/hdf5/openmpi:${LD_LIBRARY_PATH}
- CONFIGURE_OPTS="--with-hdf5" CFLAGS="-I/usr/include/hdf5/openmpi -L/usr/lib/x86_64-linux-gnu/hdf5/openmpi" ./travis-test.sh

View File

@ -1,31 +1,31 @@
# HPC IO Benchmark Repository [![Build Status](https://travis-ci.org/hpc/ior.svg?branch=master)](https://travis-ci.org/hpc/ior) # HPC IO Benchmark Repository [![Build Status](https://travis-ci.org/hpc/ior.svg?branch=master)](https://travis-ci.org/hpc/ior)
This repo now contains both IOR and mdtest. This repository contains the IOR and mdtest parallel I/O benchmarks. The
See also NOTES.txt [official IOR/mdtest documention][] can be found in the `docs/` subdirectory or
on Read the Docs.
# Building ## Building
0. If "configure" is missing from the top level directory, you 1. If `configure` is missing from the top level directory, you probably
probably retrieved this code directly from the repository. retrieved this code directly from the repository. Run `./bootstrap`
Run "./bootstrap". to generate the configure script. Alternatively, download an
[official IOR release][] which includes the configure script.
If your versions of the autotools are not new enough to run 1. Run `./configure`. For a full list of configuration options, use
this script, download and official tarball in which the `./configure --help`.
configure script is already provided.
1. Run "./configure" 2. Run `make`
See "./configure --help" for configuration options. 3. Optionally, run `make install`. The installation prefix
can be changed via `./configure --prefix=...`.
2. Run "make" ## Testing
3. Optionally, run "make install". The installation prefix * Run `make check` to invoke the unit tests.
can be changed as an option to the "configure" script. * More comprehensive functionality tests are included in `testing/`. These
scripts will launch IOR and mdtest via MPI.
* Docker scripts are also provided in `testing/docker/` to test various
distributions at once.
# Testing [official IOR release]: https://github.com/hpc/ior/releases
[official IOR/mdtest documention]: http://ior.readthedocs.org/
Run "make check" to invoke the unit test framework of Automake.
* To run basic functionality tests that we use for continuous integration, see ./testing/
* There are docker scripts provided to test various distributions at once.
* See ./testing/docker/

View File

@ -220,6 +220,26 @@ AM_COND_IF([USE_DAOS_AIORI],[
AC_DEFINE([USE_DAOS_AIORI], [], [Build DAOS backends AIORI]) AC_DEFINE([USE_DAOS_AIORI], [], [Build DAOS backends AIORI])
]) ])
# Gfarm support
AC_MSG_CHECKING([for Gfarm file system])
AC_ARG_WITH([gfarm],
[AS_HELP_STRING([--with-gfarm=GFARM_ROOT],
[support IO with Gfarm backend @<:@default=no@:>@])],
[], [with_gfarm=no])
AC_MSG_RESULT([$with_gfarm])
AM_CONDITIONAL([USE_GFARM_AIORI], [test x$with_gfarm != xno])
if test x$with_gfarm != xno; then
AC_DEFINE([USE_GFARM_AIORI], [], [Build Gfarm backend AIORI])
case x$with_gfarm in
xyes) ;;
*)
CPPFLAGS="$CPPFLAGS -I$with_gfarm/include"
LDFLAGS="$LDFLAGS -L$with_gfarm/lib" ;;
esac
AC_CHECK_LIB([gfarm], [gfarm_initialize],, [AC_MSG_ERROR([libgfarm not found])])
AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec])
fi
# aws4c is needed for the S3 backend (see --with-S3, below). # aws4c is needed for the S3 backend (see --with-S3, below).
# Version 0.5.2 of aws4c is available at https://github.com/jti-lanl/aws4c.git # Version 0.5.2 of aws4c is available at https://github.com/jti-lanl/aws4c.git
# Install it something like this: # Install it something like this:

View File

@ -342,7 +342,7 @@ MPIIO-, HDF5-, AND NCMPI-ONLY:
* collective - uses collective operations for access [0=FALSE] * collective - uses collective operations for access [0=FALSE]
* showHints - show hint/value pairs attached to open file [0=FALSE] * showHints - show hint/value pairs attached to open file [0=FALSE]
NOTE: not available in NCMPI NOTE: available in NCMPI only if PnetCDF is 1.2.0 or later
LUSTRE-SPECIFIC: LUSTRE-SPECIFIC:
================ ================

5
doc/sphinx/README.md Normal file
View File

@ -0,0 +1,5 @@
To build the documentation in this directory,
sphinx-build . _build_html
The output will be saved as html in `_build_html/`.

View File

@ -1,4 +1,4 @@
Changes in IOR Changes in IOR
***************** **************
.. .. include:: ../../ChangeLog .. include:: ../../NEWS

View File

@ -64,18 +64,30 @@ source_suffix = '.rst'
master_doc = 'index' master_doc = 'index'
# General information about the project. # General information about the project.
project = u'IOR' project = u'ior'
copyright = u'2017, IOR' copyright = u'2018, The Regents of the University of California'
author = u'IOR' author = u'The IOR Developer Community'
# The version info for the project you're documenting, acts as replacement for # The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the # |version| and |release|, also used in various other places throughout the
# built documents. # built documents.
# #
# The short X.Y version. # The short X.Y version.
version = u'3.1.0' version = u'3.2.0'
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = u'0' release = u'3.2.0'
for line in open(os.path.join('..', '..', 'META'), 'r'):
key, value = line.split(None, 1)
if key == "Package:":
project = value
elif key == "Version:":
version = value
release = value
# We don't use the release field
# elif key == "Release:":
# release = value
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages. # for a list of supported languages.
@ -185,7 +197,7 @@ man_pages = [
# dir menu entry, description, category) # dir menu entry, description, category)
texinfo_documents = [ texinfo_documents = [
(master_doc, 'IOR', u'IOR Documentation', (master_doc, 'IOR', u'IOR Documentation',
author, 'IOR', 'One line description of project.', author, 'IOR', 'IOR/mdtest Parallel I/O Benchmarks',
'Miscellaneous'), 'Miscellaneous'),
] ]

View File

@ -1,8 +1,8 @@
Continues Integration Continuous Integration
===================== ======================
Continues Integration is used for basic sanity checking. Travis-CI provides free Continuous Integration is used for basic sanity checking. Travis-CI provides free
CI for open source github projects and is configured via a .travis.yml. CI for open source github projects and is configured via a ``.travis.yml``.
For now this is set up to compile IOR on a ubuntu 14.04 machine with gcc 4.8, For now this is set up to compile IOR on a ubuntu 14.04 machine with gcc 4.8,
openmpi and hdf5 for the backends. This is a pretty basic check and should be openmpi and hdf5 for the backends. This is a pretty basic check and should be

View File

@ -0,0 +1,38 @@
Release Process
===============
To build a new version of IOR::
$ docker run -it ubuntu bash
$ apt-get update
$ apt-get install -y git automake autoconf make gcc mpich
$ git clone -b rc https://github.com/hpc/ior
$ cd ior
$ ./travis-build.sh
To create a new release candidate from RC,
1. Disable the ``check-news`` option in ``AM_INIT_AUTOMAKE`` inside configure.ac
2. Append "rcX" to the ``Version:`` field in META where X is the release
candidate number
3. Build a release package as described above
To create a new minor release of IOR,
1. Build the rc branch as described above
2. Create a release on GitHub which creates the appropriate tag
3. Upload the source distributions generated by travis-build.sh
To create a micro branch of IOR (e.g., if a release needs a hotfix),
1. Check out the relevant release tagged in the rc branch (e.g., ``3.2.0``)
2. Create a branch with the major.minor name (e.g., ``3.2``) from that tag
3. Update the ``Version:`` in META
4. Apply hotfix(es) to that major.minor branch
5. Create the major.minor.micro release on GitHub
To initiate a feature freeze,
1. Merge the master branch into the rc branch
2. Update the ``Version:`` field in META `of the master branch` to be the `next`
release version, not the one whose features have just been frozen

View File

@ -13,7 +13,7 @@
userDoc/install userDoc/install
First Steps <userDoc/tutorial> First Steps <userDoc/tutorial>
userDoc/options userDoc/options
userDoc/skripts userDoc/scripts
userDoc/compatibility userDoc/compatibility
FAQ <userDoc/faq> FAQ <userDoc/faq>
@ -24,6 +24,7 @@
devDoc/doxygen devDoc/doxygen
devDoc/CI devDoc/CI
devDoc/release
.. toctree:: .. toctree::
:hidden: :hidden:

View File

@ -1,26 +1,22 @@
Introduction Introduction
============ ============
Welcome to the IOR documentation. IOR is a parallel IO benchmark that can be used to test the performance of
parallel storage systems using various interfaces and access patterns. The
IOR repository also includes the mdtest benchmark which specifically tests
the peak metadata rates of storage systems under different directory
structures. Both benchmarks use a common parallel I/O abstraction backend
and rely on MPI for synchronization.
**I**\ nterleaved **o**\ r **R**\ andom is a parallel IO benchmark. This documentation consists of two parts.
IOR can be used for testing performance of parallel file systems using various
interfaces and access patterns. IOR uses MPI for process synchronization.
This documentation provides information for versions 3 and higher, for other
versions check :ref:`compatibility`
This documentation consists of tow parts. **User documentation** includes installation instructions (:ref:`install`), a
beginner's tutorial (:ref:`first-steps`), and information about IOR's
runtime :ref:`options`.
The first part is a user documentation were you find instructions on compilation, a **Developer documentation** consists of code documentation generated with
beginners tutorial (:ref:`first-steps`) as well as information about all Doxygen and some notes about the contiguous integration with Travis.
available :ref:`options`.
The second part is the developer documentation. It currently only consists of a Many aspects of both IOR/mdtest user and developer documentation are incomplete,
auto generated Doxygen and some notes about the contiguous integration with travis. and contributors are encouraged to comment the code directly or expand upon this
As there are quite some people how needs to modify or extend IOR to there needs documentation.
it would be great to have documentation on what and how to alter IOR without
breaking other stuff. Currently there is neither a documentation on the overall
concept of the code nor on implementation details. If you are getting your
hands dirty in code anyways or have deeper understanding of IOR, you are more
then welcome to comment the code directly, which will result in better Doxygen
output or add your insight to this sphinx documentation.

View File

@ -1,10 +1,11 @@
.. _compatibility: .. _compatibility:
Compatibility Version Compatibility
============= =====================
IOR has a long history. Here are some hints about compatibility with older IOR has a long history and only IOR version 3 is currently supported. However,
versions. there are many forks of IOR based on earlier versions, and the following
incompatibilities are known to exist between major versions.
1) IOR version 1 (c. 1996-2002) and IOR version 2 (c. 2003-present) are 1) IOR version 1 (c. 1996-2002) and IOR version 2 (c. 2003-present) are
incompatible. Input decks from one will not work on the other. As version incompatible. Input decks from one will not work on the other. As version

View File

@ -1,3 +1,5 @@
.. _install:
Install Install
======= =======

View File

@ -16,7 +16,9 @@ normal parameters override each other, so the last one executed.
Command line options Command line options
-------------------- --------------------
These options are to be used on the command line. E.g., 'IOR -a POSIX -b 4K'.
These options are to be used on the command line (e.g., ``./ior -a POSIX -b 4K``).
-a S api -- API for I/O [POSIX|MPIIO|HDF5|HDFS|S3|S3_EMC|NCMPI|RADOS] -a S api -- API for I/O [POSIX|MPIIO|HDF5|HDFS|S3|S3_EMC|NCMPI|RADOS]
-A N refNum -- user reference number to include in long summary -A N refNum -- user reference number to include in long summary
-b N blockSize -- contiguous bytes to write per task (e.g.: 8, 4k, 2m, 1g) -b N blockSize -- contiguous bytes to write per task (e.g.: 8, 4k, 2m, 1g)
@ -69,282 +71,264 @@ These options are to be used on the command line. E.g., 'IOR -a POSIX -b 4K'.
-Z reorderTasksRandom -- changes task ordering to random ordering for readback -Z reorderTasksRandom -- changes task ordering to random ordering for readback
NOTES: * S is a string, N is an integer number. * S is a string, N is an integer number.
* For transfer and block sizes, the case-insensitive K, M, and G
suffices are recognized. I.e., '4k' or '4K' is accepted as 4096. * For transfer and block sizes, the case-insensitive K, M, and G
suffices are recognized. I.e., '4k' or '4K' is accepted as 4096.
Directive Options Directive Options
------------------ ------------------
For each of the general settings, note the default is shown in brackets.
IMPORTANT NOTE: For all true/false options below [1]=true, [0]=false
IMPORTANT NOTE: Contrary to appearance, the script options below are NOT case sensitive
For all true/false options below, [1]=true, [0]=false. All options are case-insensitive.
GENERAL: GENERAL
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
* refNum - user supplied reference number, included in
long summary [0]
* api - must be set to one of POSIX, MPIIO, HDF5, HDFS, S3, * ``refNum`` - user supplied reference number, included in long summary
S3_EMC, or NCMPI, depending on test [POSIX] (default: 0)
* testFile - name of the output file [testFile] * ``api`` - must be set to one of POSIX, MPIIO, HDF5, HDFS, S3, S3_EMC, NCMPI,
NOTE: with filePerProc set, the tasks can round IME, MMAP, or RAODS depending on test (default: ``POSIX``)
robin across multiple file names '-o S@S@S'
* hintsFileName - name of the hints file [] * ``testFile`` - name of the output file [testFile]. With ``filePerProc`` set,
the tasks can round robin across multiple file names via ``-o S@S@S``.
If only a single file name is specified in this case, IOR appends the MPI
rank to the end of each file generated (e.g., ``testFile.00000059``)
(default: ``testFile``)
* repetitions - number of times to run each test [1] * ``hintsFileName`` - name of the hints file (default: none)
* multiFile - creates multiple files for single-shared-file or * ``repetitions`` - number of times to run each test (default: 1)
file-per-process modes; i.e. each iteration creates
a new file [0=FALSE]
* reorderTasksConstant - reorders tasks by a constant node offset for writing/reading neighbor's * ``multiFile`` - creates multiple files for single-shared-file or
data from different nodes [0=FALSE] file-per-process modes for each iteration (default: 0)
* taskPerNodeOffset - for read tests. Use with -C & -Z options. [1] * ``reorderTasksConstant`` - reorders tasks by a constant node offset for
With reorderTasks, constant N. With reordertasksrandom, >= N writing/reading neighbor's data from different nodes (default: 0)
* reorderTasksRandom - reorders tasks to random ordering for readback [0=FALSE] * ``taskPerNodeOffset`` - for read tests. Use with ``-C`` and ``-Z`` options.
With ``reorderTasks``, constant N. With ``reordertasksrandom``, >= N
(default: 1)
* reorderTasksRandomSeed - random seed for reordertasksrandom option. [0] * ``reorderTasksRandom`` - reorders tasks to random ordering for read tests
>0, same seed for all iterations. <0, different seed for each iteration (default: 0)
* quitOnError - upon error encountered on checkWrite or checkRead, * ``reorderTasksRandomSeed`` - random seed for ``reordertasksrandom`` option. (default: 0)
display current error and then stop execution; * When > 0, use the same seed for all iterations
if not set, count errors and continue [0=FALSE] * When < 0, different seed for each iteration
* numTasks - number of tasks that should participate in the test * ``quitOnError`` - upon error encountered on ``checkWrite`` or ``checkRead``,
[0] display current error and then stop execution. Otherwise, count errors and
NOTE: 0 denotes all tasks continue (default: 0)
* interTestDelay - this is the time in seconds to delay before * ``numTasks`` - number of tasks that should participate in the test. 0
beginning a write or read in a series of tests [0] denotes all tasks. (default: 0)
NOTE: it does not delay before a check write or
check read
* outlierThreshold - gives warning if any task is more than this number * ``interTestDelay`` - time (in seconds) to delay before beginning a write or
of seconds from the mean of all participating tasks. read phase in a series of tests This does not delay before check-write or
If so, the task is identified, its time (start, check-read phases. (default: 0)
elapsed create, elapsed transfer, elapsed close, or
end) is reported, as is the mean and standard
deviation for all tasks. The default for this is 0,
which turns it off. If set to a positive value, for
example 3, any task not within 3 seconds of the mean
displays its times. [0]
* intraTestBarriers - use barrier between open, write/read, and close [0=FALSE] * ``outlierThreshold`` - gives warning if any task is more than this number of
seconds from the mean of all participating tasks. The warning includes the
offending task, its timers (start, elapsed create, elapsed transfer, elapsed
close, end), and the mean and standard deviation for all tasks. When zero,
disable this feature. (default: 0)
* uniqueDir - create and use unique directory for each * ``intraTestBarriers`` - use barrier between open, write/read, and close
file-per-process [0=FALSE] phases (default: 0)
* writeFile - writes file(s), first deleting any existing file [1=TRUE] * ``uniqueDir`` - create and use unique directory for each file-per-process
NOTE: the defaults for writeFile and readFile are (default: 0)
set such that if there is not at least one of
the following -w, -r, -W, or -R, it is assumed
that -w and -r are expected and are
consequently used -- this is only true with
the command line, and may be overridden in
a script
* readFile - reads existing file(s) (from current or previous * ``writeFile`` - write file(s), first deleting any existing file.
run) [1=TRUE] The defaults for ``writeFile`` and ``readFile`` are set such that if there
NOTE: see writeFile notes is not at least one of ``-w``, ``-r``, ``-W``, or ``-R``, ``-w`` and ``-r``
are enabled. If either ``writeFile`` or ``readFile`` are explicitly
enabled, though, its complement is *not* also implicitly enabled.
* filePerProc - accesses a single file for each processor; default * ``readFile`` - reads existing file(s) as specified by the ``testFile``
is a single file accessed by all processors [0=FALSE] option. The defaults for ``writeFile`` and ``readFile`` are set such that
if there is not at least one of ``-w``, ``-r``, ``-W``, or ``-R``, ``-w``
and ``-r`` are enabled. If either ``writeFile`` or ``readFile`` are
explicitly enabled, though, its complement is *not* also implicitly enabled.
* checkWrite - read data back and check for errors against known * ``filePerProc`` - have each MPI process perform I/O to a unique file
pattern; can be used independently of writeFile [0=FALSE] (default: 0)
NOTES: - data checking is not timed and does not
affect other performance timings
- all errors tallied and returned as program
exit code, unless quitOnError set
* checkRead - reread data and check for errors between reads; can * ``checkWrite`` - read data back and check for errors against known pattern.
be used independently of readFile [0=FALSE] Can be used independently of ``writeFile``. Data checking is not timed and
NOTE: see checkWrite notes does not affect other performance timings. All errors detected are tallied
and returned as the program exit code unless ``quitOnError`` is set.
(default: 0)
* keepFile - stops removal of test file(s) on program exit [0=FALSE] * ``checkRead`` - re-read data and check for errors between reads. Can be
used independently of ``readFile``. Data checking is not timed and does not
affect other performance timings. All errors detected are tallied and
returned as the program exit code unless ``quitOnError`` is set.
(default: 0)
* keepFileWithError - ensures that with any error found in data-checking, * ``keepFile`` - do not remove test file(s) on program exit (default: 0)
the error-filled file(s) will not be deleted [0=FALSE]
* useExistingTestFile - do not remove test file before write access [0=FALSE] * ``keepFileWithError`` - do not delete any files containing errors if
detected during read-check or write-check phases. (default: 0)
* segmentCount - number of segments in file [1] * ``useExistingTestFile`` - do not remove test file(s) before write phase
NOTES: - a segment is a contiguous chunk of data (default: 0)
accessed by multiple clients each writing/
reading their own contiguous data;
comprised of blocks accessed by multiple
clients
- with HDF5 this repeats the pattern of an
entire shared dataset
* blockSize - size (in bytes) of a contiguous chunk of data * ``segmentCount`` - number of segments in file, where a segment is a
accessed by a single client; it is comprised of one contiguous chunk of data accessed by multiple clients each writing/reading
or more transfers [1048576] their own contiguous data (blocks). The exact semantics of segments
depend on the API used; for example, HDF5 repeats the pattern of an entire
shared dataset. (default: 1)
* transferSize - size (in bytes) of a single data buffer to be * ``blockSize`` - size (in bytes) of a contiguous chunk of data accessed by a
transferred in a single I/O call [262144] single client. It is comprised of one or more transfers (default: 1048576)
* verbose - output information [0] * ``transferSize`` - size (in bytes) of a single data buffer to be transferred
NOTE: this can be set to levels 0-5 on the command in a single I/O call (default: 262144)
line; repeating the -v flag will increase
verbosity level
* setTimeStampSignature - set value for time stamp signature [0] * ``verbose`` - output more information about what IOR is doing. Can be set
NOTE: used to rerun tests with the exact data to levels 0-5; repeating the -v flag will increase verbosity level.
pattern by setting data signature to contain (default: 0)
positive integer value as timestamp to be
written in data file; if set to 0, is
disabled
* showHelp - display options and help [0=FALSE] * ``setTimeStampSignature`` - Value to use for the time stamp signature. Used
to rerun tests with the exact data pattern by setting data signature to
contain positive integer value as timestamp to be written in data file; if
set to 0, is disabled (default: 0)
* storeFileOffset - use file offset as stored signature when writing * ``showHelp`` - display options and help (default: 0)
file [0=FALSE]
NOTE: this will affect performance measurements
* memoryPerNode - Allocate memory on each node to simulate real * ``storeFileOffset`` - use file offset as stored signature when writing file.
application memory usage. Accepts a percentage of This will affect performance measurements (default: 0)
node memory (e.g. "50%") on machines that support
sysconf(_SC_PHYS_PAGES) or a size. Allocation will
be split between tasks that share the node.
* memoryPerTask - Allocate secified amount of memory per task to * ``memoryPerNode`` - allocate memory on each node to simulate real
simulate real application memory usage. application memory usage or restrict page cache size. Accepts a percentage
of node memory (e.g. ``50%``) on systems that support
``sysconf(_SC_PHYS_PAGES)`` or a size. Allocation will be split between
tasks that share the node. (default: 0)
* maxTimeDuration - max time in minutes to run tests [0] * ``memoryPerTask`` - allocate specified amount of memory (in bytes) per task
NOTES: * setting this to zero (0) unsets this option to simulate real application memory usage. (default: 0)
* this option allows the current read/write
to complete without interruption
* deadlineForStonewalling - seconds before stopping write or read phase [0] * ``maxTimeDuration`` - max time (in minutes) to run all tests. Any current
NOTES: - used for measuring the amount of data moved read/write phase is not interrupted; only future I/O phases are cancelled
in a fixed time. After the barrier, each once this time is exceeded. Value of zero unsets disables. (default: 0)
task starts its own timer, begins moving
data, and the stops moving data at a pre-
arranged time. Instead of measuring the
amount of time to move a fixed amount of
data, this option measures the amount of
data moved in a fixed amount of time. The
objective is to prevent tasks slow to
complete from skewing the performance.
- setting this to zero (0) unsets this option
- this option is incompatible w/data checking
* randomOffset - access is to random, not sequential, offsets within a file [0=FALSE] * ``deadlineForStonewalling`` - seconds before stopping write or read phase.
NOTES: - this option is currently incompatible with: Used for measuring the amount of data moved in a fixed time. After the
-checkRead barrier, each task starts its own timer, begins moving data, and the stops
-storeFileOffset moving data at a pre-arranged time. Instead of measuring the amount of time
-MPIIO collective or useFileView to move a fixed amount of data, this option measures the amount of data
-HDF5 or NCMPI moved in a fixed amount of time. The objective is to prevent straggling
* summaryAlways - Always print the long summary for each test. tasks slow from skewing the performance. This option is incompatible with
Useful for long runs that may be interrupted, preventing read-check and write-check modes. Value of zero unsets this option.
the final long summary for ALL tests to be printed. (default: 0)
* ``randomOffset`` - randomize access offsets within test file(s). Currently
incompatible with ``checkRead``, ``storeFileOffset``, MPIIO ``collective``
and ``useFileView``, and HDF5 and NCMPI APIs. (default: 0)
* ``summaryAlways`` - Always print the long summary for each test even if the job is interrupted. (default: 0)
POSIX-ONLY POSIX-ONLY
^^^^^^^^^^ ^^^^^^^^^^
* useO_DIRECT - use O_DIRECT for POSIX, bypassing I/O buffers [0]
* singleXferAttempt - will not continue to retry transfer entire buffer * ``useO_DIRECT`` - use direct I/ for POSIX, bypassing I/O buffers (default: 0)
until it is transferred [0=FALSE]
NOTE: when performing a write() or read() in POSIX,
there is no guarantee that the entire
requested size of the buffer will be
transferred; this flag keeps the retrying a
single transfer until it completes or returns
an error
* fsyncPerWrite - perform fsync after each POSIX write [0=FALSE] * ``singleXferAttempt`` - do not continue to retry transfer entire buffer
* fsync - perform fsync after POSIX write close [0=FALSE] until it is transferred. When performing a write() or read() in POSIX,
there is no guarantee that the entire requested size of the buffer will be
transferred; this flag keeps the retrying a single transfer until it
completes or returns an error (default: 0)
* ``fsyncPerWrite`` - perform fsync after each POSIX write (default: 0)
* ``fsync`` - perform fsync after POSIX file close (default: 0)
MPIIO-ONLY MPIIO-ONLY
^^^^^^^^^^ ^^^^^^^^^^
* preallocate - preallocate the entire file before writing [0=FALSE]
* useFileView - use an MPI datatype for setting the file view option * ``preallocate`` - preallocate the entire file before writing (default: 0)
to use individual file pointer [0=FALSE]
NOTE: default IOR uses explicit file pointers
* useSharedFilePointer - use a shared file pointer [0=FALSE] (not working) * ``useFileView`` - use an MPI datatype for setting the file view option to
NOTE: default IOR uses explicit file pointers use individual file pointer. Default IOR uses explicit file pointers.
(default: 0)
* useStridedDatatype - create a datatype (max=2GB) for strided access; akin * ``useSharedFilePointer`` - use a shared file pointer. Default IOR uses
to MULTIBLOCK_REGION_SIZE [0] (not working) explicit file pointers. (default: 0)
* ``useStridedDatatype`` - create a datatype (max=2GB) for strided access;
akin to ``MULTIBLOCK_REGION_SIZE`` (default: 0)
HDF5-ONLY HDF5-ONLY
^^^^^^^^^ ^^^^^^^^^
* individualDataSets - within a single file each task will access its own
dataset [0=FALSE] (not working)
NOTE: default IOR creates a dataset the size of
numTasks * blockSize to be accessed by all
tasks
* noFill - no pre-filling of data in HDF5 file creation [0=FALSE] * ``individualDataSets`` - within a single file, each task will access its own
dataset. Default IOR creates a dataset the size of ``numTasks * blockSize``
to be accessed by all tasks (default: 0)
* setAlignment - HDF5 alignment in bytes (e.g.: 8, 4k, 2m, 1g) [1] * ``noFill`` - do not pre-fill data in HDF5 file creation (default: 0)
* ``setAlignment`` - set the HDF5 alignment in bytes (e.g.: 8, 4k, 2m, 1g) (default: 1)
* hdf5.collectiveMetadata - enable HDF5 collective metadata (available since HDF5-1.10.0) * hdf5.collectiveMetadata - enable HDF5 collective metadata (available since HDF5-1.10.0)
MPIIO-, HDF5-, AND NCMPI-ONLY MPIIO-, HDF5-, AND NCMPI-ONLY
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* collective - uses collective operations for access [0=FALSE]
* showHints - show hint/value pairs attached to open file [0=FALSE] * ``collective`` - uses collective operations for access (default: 0)
NOTE: not available in NCMPI
* ``showHints`` - show hint/value pairs attached to open file. Not available
for NCMPI. (default: 0)
LUSTRE-SPECIFIC LUSTRE-SPECIFIC
^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
* lustreStripeCount - set the lustre stripe count for the test file(s) [0]
* lustreStripeSize - set the lustre stripe size for the test file(s) [0] * ``lustreStripeCount`` - set the Lustre stripe count for the test file(s) (default: 0)
* lustreStartOST - set the starting OST for the test file(s) [-1] * ``lustreStripeSize`` - set the Lustre stripe size for the test file(s) (default: 0)
* lustreIgnoreLocks - disable lustre range locking [0] * ``lustreStartOST`` - set the starting OST for the test file(s) (default: -1)
* ``lustreIgnoreLocks`` - disable Lustre range locking (default: 0)
GPFS-SPECIFIC GPFS-SPECIFIC
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
* gpfsHintAccess - use gpfs_fcntl hints to pre-declare accesses
* gpfsReleaseToken - immediately after opening or creating file, release
all locks. Might help mitigate lock-revocation
traffic when many proceses write/read to same file.
* ``gpfsHintAccess`` - use ``gpfs_fcntl`` hints to pre-declare accesses (default: 0)
* ``gpfsReleaseToken`` - release all locks immediately after opening or
creating file. Might help mitigate lock-revocation traffic when many
proceses write/read to same file. (default: 0)
Verbosity levels Verbosity levels
--------------------- ----------------
The verbosity of output for IOR can be set with -v. Increasing the number of
-v instances on a command line sets the verbosity higher. The verbosity of output for IOR can be set with ``-v``. Increasing the number
of ``-v`` instances on a command line sets the verbosity higher.
Here is an overview of the information shown for different verbosity levels: Here is an overview of the information shown for different verbosity levels:
0) default; only bare essentials shown ====== ===================================
1) max clock deviation, participating tasks, free space, access pattern, Level Behavior
commence/verify access notification w/time ====== ===================================
2) rank/hostname, machine name, timer used, individual repetition 0 default; only bare essentials shown
performance results, timestamp used for data signature 1 max clock deviation, participating tasks, free space, access pattern, commence/verify access notification with time
3) full test details, transfer block/offset compared, individual data 2 rank/hostname, machine name, timer used, individual repetition performance results, timestamp used for data signature
checking errors, environment variables, task writing/reading file name, 3 full test details, transfer block/offset compared, individual data checking errors, environment variables, task writing/reading file name, all test operation times
all test operation times 4 task id and offset for each transfer
4) task id and offset for each transfer 5 each 8-byte data signature comparison (WARNING: more data to STDOUT than stored in file, use carefully)
5) each 8-byte data signature comparison (WARNING: more data to STDOUT ====== ===================================
than stored in file, use carefully)
Incompressible notes Incompressible notes
------------------------- --------------------
Please note that incompressibility is a factor of how large a block compression Please note that incompressibility is a factor of how large a block compression
algorithm uses. The incompressible buffer is filled only once before write times, algorithm uses. The incompressible buffer is filled only once before write
so if the compression algorithm takes in blocks larger than the transfer size, times, so if the compression algorithm takes in blocks larger than the transfer
there will be compression. Below are some baselines that I established for size, there will be compression. Below are some baselines for zip, gzip, and
zip, gzip, and bzip. bzip.
1) zip: For zipped files, a transfer size of 1k is sufficient. 1) zip: For zipped files, a transfer size of 1k is sufficient.
@ -354,5 +338,5 @@ zip, gzip, and bzip.
To avoid compression a transfer size of greater than the bzip block size is required To avoid compression a transfer size of greater than the bzip block size is required
(default = 900KB). I suggest a transfer size of greather than 1MB to avoid bzip2 compression. (default = 900KB). I suggest a transfer size of greather than 1MB to avoid bzip2 compression.
Be aware of the block size your compression algorithm will look at, and adjust the transfer size Be aware of the block size your compression algorithm will look at, and adjust
accordingly. the transfer size accordingly.

View File

@ -0,0 +1,82 @@
Scripting
=========
IOR can use an input script with the command line using the ``-f`` option.
**Any options on the command line set before the '-f' option is given will be
considered the default settings for running the script.** For example, ::
mpirun ./ior -W -f script
will run all tests in the script with an implicit ``-W``. The script itself can
override these settings and may be set to run many different tests of IOR under
a single execution, and it is important to note that **any command-line options
specified after ``-f`` will not be applied to the runs dictated by the script.**
For example, ::
mpirun ./ior -f script -W
will *not* run any tests with the implicit ``-W`` since that argument does not
get applied until after the ``-f`` option (and its constituent runs) are complete.
Input scripts are specified using the long-form option names that correspond to
each command-line option. In addition to long-form options,
* ``IOR START`` and ``IOR END`` mark the beginning and end of the script
* ``RUN`` dispatches the test using all of the options specified before it
* All previous set parameter stay set for the next test. They are not reset
to the default! For default the must be rest manually.
* White space is ignored in script, as are comments starting with ``#``.
* Not all test parameters need be set.
An example of a script: ::
IOR START
api=[POSIX|MPIIO|HDF5|HDFS|S3|S3_EMC|NCMPI|RADOS]
testFile=testFile
hintsFileName=hintsFile
repetitions=8
multiFile=0
interTestDelay=5
readFile=1
writeFile=1
filePerProc=0
checkWrite=0
checkRead=0
keepFile=1
quitOnError=0
segmentCount=1
blockSize=32k
outlierThreshold=0
setAlignment=1
transferSize=32
singleXferAttempt=0
individualDataSets=0
verbose=0
numTasks=32
collective=1
preallocate=0
useFileView=0
keepFileWithError=0
setTimeStampSignature=0
useSharedFilePointer=0
useStridedDatatype=0
uniqueDir=0
fsync=0
storeFileOffset=0
maxTimeDuration=60
deadlineForStonewalling=0
useExistingTestFile=0
useO_DIRECT=0
showHints=0
showHelp=0
RUN
# additional tests are optional
transferSize=64
blockSize=64k
segmentcount=2
RUN
transferSize=4K
blockSize=1M
segmentcount=1024
RUN
IOR STOP

View File

@ -1,72 +0,0 @@
Scripting
=========
IOR can use a script with the command line. Any options on the command line set
before the script will be considered the default settings for running the script.
(I.e.,'$ ./IOR -W -f script' will have all tests in the script run with the -W
option as default.)
The script itself can override these settings and may be set to run
run many different tests of IOR under a single execution.
The command line is: ::
./IOR -f script
In IOR/scripts, there are scripts of test cases for simulating I/O behavior of
various application codes. Details are included in each script as necessary.
Syntax:
* IOR START / IOR END: marks the beginning and end of the script
* RUN: Delimiter for next Test
* All previous set parameter stay set for the next test. They are not reset
to the default! For default the musst be rest manually.
* White space is ignored in script, as are comments starting with '#'.
* Not all test parameters need be set.
An example of a script: ::
IOR START
api=[POSIX|MPIIO|HDF5|HDFS|S3|S3_EMC|NCMPI|RADOS]
testFile=testFile
hintsFileName=hintsFile
repetitions=8
multiFile=0
interTestDelay=5
readFile=1
writeFile=1
filePerProc=0
checkWrite=0
checkRead=0
keepFile=1
quitOnError=0
segmentCount=1
blockSize=32k
outlierThreshold=0
setAlignment=1
transferSize=32
singleXferAttempt=0
individualDataSets=0
verbose=0
numTasks=32
collective=1
preallocate=0
useFileView=0
keepFileWithError=0
setTimeStampSignature=0
useSharedFilePointer=0
useStridedDatatype=0
uniqueDir=0
fsync=0
storeFileOffset=0
maxTimeDuration=60
deadlineForStonewalling=0
useExistingTestFile=0
useO_DIRECT=0
showHints=0
showHelp=0
RUN
# additional tests are optional
<snip>
RUN
<snip>
RUN
IOR STOP

View File

@ -74,6 +74,11 @@ if USE_DAOS_AIORI
extraSOURCES += aiori-DAOS.c aiori-DFS.c list.h extraSOURCES += aiori-DAOS.c aiori-DFS.c list.h
endif endif
if USE_GFARM_AIORI
extraSOURCES += aiori-Gfarm.c
extraLDADD += -lgfarm
endif
if USE_S3_AIORI if USE_S3_AIORI
extraSOURCES += aiori-S3.c extraSOURCES += aiori-S3.c
if AWS4C_DIR if AWS4C_DIR

View File

@ -61,10 +61,10 @@ static struct daos_options o = {
}; };
static option_help options [] = { static option_help options [] = {
{0, "daos.pool", "pool uuid", OPTION_REQUIRED_ARGUMENT, 's', &o.pool}, {0, "daos.pool", "pool uuid", OPTION_OPTIONAL_ARGUMENT, 's', &o.pool},
{0, "daos.svcl", "pool SVCL", OPTION_REQUIRED_ARGUMENT, 's', &o.svcl}, {0, "daos.svcl", "pool SVCL", OPTION_OPTIONAL_ARGUMENT, 's', &o.svcl},
{0, "daos.group", "server group", OPTION_OPTIONAL_ARGUMENT, 's', &o.group}, {0, "daos.group", "server group", OPTION_OPTIONAL_ARGUMENT, 's', &o.group},
{0, "daos.cont", "container uuid", OPTION_REQUIRED_ARGUMENT, 's', &o.cont}, {0, "daos.cont", "container uuid", OPTION_OPTIONAL_ARGUMENT, 's', &o.cont},
{0, "daos.chunk_size", "chunk size", OPTION_OPTIONAL_ARGUMENT, 'd', &o.chunk_size}, {0, "daos.chunk_size", "chunk size", OPTION_OPTIONAL_ARGUMENT, 'd', &o.chunk_size},
{0, "daos.destroy", "Destroy Container", OPTION_FLAG, 'd', &o.destroy}, {0, "daos.destroy", "Destroy Container", OPTION_FLAG, 'd', &o.destroy},
{0, "daos.oclass", "object class", OPTION_OPTIONAL_ARGUMENT, 's', &o.oclass}, {0, "daos.oclass", "object class", OPTION_OPTIONAL_ARGUMENT, 's', &o.oclass},

View File

@ -82,10 +82,10 @@ static struct dfs_options o = {
}; };
static option_help options [] = { static option_help options [] = {
{0, "dfs.pool", "pool uuid", OPTION_REQUIRED_ARGUMENT, 's', & o.pool}, {0, "dfs.pool", "pool uuid", OPTION_OPTIONAL_ARGUMENT, 's', & o.pool},
{0, "dfs.svcl", "pool SVCL", OPTION_REQUIRED_ARGUMENT, 's', & o.svcl}, {0, "dfs.svcl", "pool SVCL", OPTION_OPTIONAL_ARGUMENT, 's', & o.svcl},
{0, "dfs.group", "server group", OPTION_OPTIONAL_ARGUMENT, 's', & o.group}, {0, "dfs.group", "server group", OPTION_OPTIONAL_ARGUMENT, 's', & o.group},
{0, "dfs.cont", "DFS container uuid", OPTION_REQUIRED_ARGUMENT, 's', & o.cont}, {0, "dfs.cont", "DFS container uuid", OPTION_OPTIONAL_ARGUMENT, 's', & o.cont},
{0, "dfs.chunk_size", "chunk size", OPTION_OPTIONAL_ARGUMENT, 'd', &o.chunk_size}, {0, "dfs.chunk_size", "chunk size", OPTION_OPTIONAL_ARGUMENT, 'd', &o.chunk_size},
{0, "dfs.oclass", "object class", OPTION_OPTIONAL_ARGUMENT, 's', &o.oclass}, {0, "dfs.oclass", "object class", OPTION_OPTIONAL_ARGUMENT, 's', &o.oclass},
{0, "dfs.destroy", "Destroy DFS Container", OPTION_FLAG, 'd', &o.destroy}, {0, "dfs.destroy", "Destroy DFS Container", OPTION_FLAG, 'd', &o.destroy},

View File

@ -143,6 +143,10 @@ static int DUMMY_stat (const char *path, struct stat *buf, IOR_param_t * param){
return 0; return 0;
} }
static int DUMMY_check_params(IOR_param_t * test){
return 1;
}
ior_aiori_t dummy_aiori = { ior_aiori_t dummy_aiori = {
.name = "DUMMY", .name = "DUMMY",
.name_legacy = NULL, .name_legacy = NULL,
@ -163,4 +167,5 @@ ior_aiori_t dummy_aiori = {
.finalize = NULL, .finalize = NULL,
.get_options = DUMMY_options, .get_options = DUMMY_options,
.enable_mdtest = true, .enable_mdtest = true,
.check_params = DUMMY_check_params
}; };

316
src/aiori-Gfarm.c Normal file
View File

@ -0,0 +1,316 @@
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
#include <gfarm/gfarm.h>
#undef PACKAGE_NAME
#undef PACKAGE_STRING
#undef PACKAGE_TARNAME
#undef PACKAGE_VERSION
#include "ior.h"
#include "aiori.h"
struct gfarm_file {
GFS_File gf;
};
void
Gfarm_initialize()
{
gfarm_initialize(NULL, NULL);
}
void
Gfarm_finalize()
{
gfarm_terminate();
}
void *
Gfarm_create(char *fn, IOR_param_t *param)
{
GFS_File gf;
struct gfarm_file *fp;
gfarm_error_t e;
if (param->dryRun)
return (NULL);
e = gfs_pio_create(fn, GFARM_FILE_RDWR, 0664, &gf);
if (e != GFARM_ERR_NO_ERROR)
ERR("gfs_pio_create failed");
GFARM_MALLOC(fp);
if (fp == NULL)
ERR("no memory");
fp->gf = gf;
return (fp);
}
void *
Gfarm_open(char *fn, IOR_param_t *param)
{
GFS_File gf;
struct gfarm_file *fp;
gfarm_error_t e;
if (param->dryRun)
return (NULL);
e = gfs_pio_open(fn, GFARM_FILE_RDWR, &gf);
if (e != GFARM_ERR_NO_ERROR)
ERR("gfs_pio_open failed");
GFARM_MALLOC(fp);
if (fp == NULL)
ERR("no memory");
fp->gf = gf;
return (fp);
}
IOR_offset_t
Gfarm_xfer(int access, void *fd, IOR_size_t *buffer, IOR_offset_t len,
IOR_param_t *param)
{
struct gfarm_file *fp = fd;
IOR_offset_t rem = len;
gfarm_off_t off;
gfarm_error_t e;
#define MAX_SZ (1024 * 1024 * 1024)
int sz, n;
char *buf = (char *)buffer;
if (param->dryRun)
return (len);
if (len > MAX_SZ)
sz = MAX_SZ;
else
sz = len;
e = gfs_pio_seek(fp->gf, param->offset, GFARM_SEEK_SET, &off);
if (e != GFARM_ERR_NO_ERROR)
ERR("gfs_pio_seek failed");
while (rem > 0) {
if (access == WRITE)
e = gfs_pio_write(fp->gf, buf, sz, &n);
else
e = gfs_pio_read(fp->gf, buf, sz, &n);
if (e != GFARM_ERR_NO_ERROR)
ERR("xfer failed");
if (n == 0)
ERR("EOF encountered");
rem -= n;
buf += n;
}
return (len);
}
void
Gfarm_close(void *fd, IOR_param_t *param)
{
struct gfarm_file *fp = fd;
if (param->dryRun)
return;
if (gfs_pio_close(fp->gf) != GFARM_ERR_NO_ERROR)
ERR("gfs_pio_close failed");
free(fp);
}
void
Gfarm_delete(char *fn, IOR_param_t *param)
{
gfarm_error_t e;
if (param->dryRun)
return;
e = gfs_unlink(fn);
if (e != GFARM_ERR_NO_ERROR)
errno = gfarm_error_to_errno(e);
}
char *
Gfarm_version()
{
return ((char *)gfarm_version());
}
void
Gfarm_fsync(void *fd, IOR_param_t *param)
{
struct gfarm_file *fp = fd;
if (param->dryRun)
return;
if (gfs_pio_sync(fp->gf) != GFARM_ERR_NO_ERROR)
ERR("gfs_pio_sync failed");
}
IOR_offset_t
Gfarm_get_file_size(IOR_param_t *param, MPI_Comm comm, char *fn)
{
struct gfs_stat st;
IOR_offset_t size, sum, min, max;
if (param->dryRun)
return (0);
if (gfs_stat(fn, &st) != GFARM_ERR_NO_ERROR)
ERR("gfs_stat failed");
size = st.st_size;
gfs_stat_free(&st);
if (param->filePerProc == TRUE) {
MPI_CHECK(MPI_Allreduce(&size, &sum, 1, MPI_LONG_LONG_INT,
MPI_SUM, comm), "cannot total data moved");
size = sum;
} else {
MPI_CHECK(MPI_Allreduce(&size, &min, 1, MPI_LONG_LONG_INT,
MPI_MIN, comm), "cannot total data moved");
MPI_CHECK(MPI_Allreduce(&size, &max, 1, MPI_LONG_LONG_INT,
MPI_MAX, comm), "cannot total data moved");
if (min != max) {
if (rank == 0)
WARN("inconsistent file size by different "
"tasks");
/* incorrect, but now consistent across tasks */
size = min;
}
}
return (size);
}
int
Gfarm_statfs(const char *fn, ior_aiori_statfs_t *st, IOR_param_t *param)
{
gfarm_off_t used, avail, files;
gfarm_error_t e;
int bsize = 4096;
if (param->dryRun)
return (0);
e = gfs_statfs_by_path(fn, &used, &avail, &files);
if (e != GFARM_ERR_NO_ERROR) {
errno = gfarm_error_to_errno(e);
return (-1);
}
st->f_bsize = bsize;
st->f_blocks = (used + avail) / bsize;
st->f_bfree = avail / bsize;
st->f_files = 2 * files; /* XXX */
st->f_ffree = files; /* XXX */
return (0);
}
int
Gfarm_mkdir(const char *fn, mode_t mode, IOR_param_t *param)
{
gfarm_error_t e;
if (param->dryRun)
return (0);
e = gfs_mkdir(fn, mode);
if (e == GFARM_ERR_NO_ERROR)
return (0);
errno = gfarm_error_to_errno(e);
return (-1);
}
int
Gfarm_rmdir(const char *fn, IOR_param_t *param)
{
gfarm_error_t e;
if (param->dryRun)
return (0);
e = gfs_rmdir(fn);
if (e == GFARM_ERR_NO_ERROR)
return (0);
errno = gfarm_error_to_errno(e);
return (-1);
}
int
Gfarm_access(const char *fn, int mode, IOR_param_t *param)
{
struct gfs_stat st;
gfarm_error_t e;
if (param->dryRun)
return (0);
e = gfs_stat(fn, &st);
if (e != GFARM_ERR_NO_ERROR) {
errno = gfarm_error_to_errno(e);
return (-1);
}
gfs_stat_free(&st);
return (0);
}
/* XXX FIXME */
#define GFS_DEV ((dev_t)-1)
#define GFS_BLKSIZE 8192
#define STAT_BLKSIZ 512 /* for st_blocks */
int
Gfarm_stat(const char *fn, struct stat *buf, IOR_param_t *param)
{
struct gfs_stat st;
gfarm_error_t e;
if (param->dryRun)
return (0);
e = gfs_stat(fn, &st);
if (e != GFARM_ERR_NO_ERROR) {
errno = gfarm_error_to_errno(e);
return (-1);
}
buf->st_dev = GFS_DEV;
buf->st_ino = st.st_ino;
buf->st_mode = st.st_mode;
buf->st_nlink = st.st_nlink;
buf->st_uid = getuid(); /* XXX */
buf->st_gid = getgid(); /* XXX */
buf->st_size = st.st_size;
buf->st_blksize = GFS_BLKSIZE;
buf->st_blocks = (st.st_size + STAT_BLKSIZ - 1) / STAT_BLKSIZ;
buf->st_atime = st.st_atimespec.tv_sec;
buf->st_mtime = st.st_mtimespec.tv_sec;
buf->st_ctime = st.st_ctimespec.tv_sec;
#if defined(HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC)
buf->st_atim.tv_nsec = st.st_atimespec.tv_nsec;
buf->st_mtim.tv_nsec = st.st_mtimespec.tv_nsec;
buf->st_ctim.tv_nsec = st.st_ctimespec.tv_nsec;
#endif
gfs_stat_free(&st);
return (0);
}
ior_aiori_t gfarm_aiori = {
.name = "Gfarm",
.name_legacy = NULL,
.create = Gfarm_create,
.open = Gfarm_open,
.xfer = Gfarm_xfer,
.close = Gfarm_close,
.delete = Gfarm_delete,
.get_version = Gfarm_version,
.fsync = Gfarm_fsync,
.get_file_size = Gfarm_get_file_size,
.statfs = Gfarm_statfs,
.mkdir = Gfarm_mkdir,
.rmdir = Gfarm_rmdir,
.access = Gfarm_access,
.stat = Gfarm_stat,
.initialize = Gfarm_initialize,
.finalize = Gfarm_finalize,
.get_options = NULL,
.enable_mdtest = true,
};

View File

@ -182,8 +182,8 @@ static void *MPIIO_Open(char *testFileName, IOR_param_t * param)
fprintf(stdout, "}\n"); fprintf(stdout, "}\n");
} }
if(! param->dryRun){ if(! param->dryRun){
MPI_CHECK(MPI_File_open(comm, testFileName, fd_mode, mpiHints, fd), MPI_CHECKF(MPI_File_open(comm, testFileName, fd_mode, mpiHints, fd),
"cannot open file"); "cannot open file: %s", testFileName);
} }
/* show hints actually attached to file handle */ /* show hints actually attached to file handle */
@ -432,8 +432,8 @@ void MPIIO_Delete(char *testFileName, IOR_param_t * param)
{ {
if(param->dryRun) if(param->dryRun)
return; return;
MPI_CHECK(MPI_File_delete(testFileName, (MPI_Info) MPI_INFO_NULL), MPI_CHECKF(MPI_File_delete(testFileName, (MPI_Info) MPI_INFO_NULL),
"cannot delete file"); "cannot delete file: %s", testFileName);
} }
/* /*

View File

@ -89,7 +89,7 @@ static void *NCMPI_Create(char *testFileName, IOR_param_t * param)
int fd_mode; int fd_mode;
MPI_Info mpiHints = MPI_INFO_NULL; MPI_Info mpiHints = MPI_INFO_NULL;
/* Wei-keng Liao: read and set MPI file hints from hintsFile */ /* read and set MPI file hints from hintsFile */
SetHints(&mpiHints, param->hintsFileName); SetHints(&mpiHints, param->hintsFileName);
if (rank == 0 && param->showHints) { if (rank == 0 && param->showHints) {
fprintf(stdout, "\nhints passed to MPI_File_open() {\n"); fprintf(stdout, "\nhints passed to MPI_File_open() {\n");
@ -105,22 +105,23 @@ static void *NCMPI_Create(char *testFileName, IOR_param_t * param)
NCMPI_CHECK(ncmpi_create(testComm, testFileName, fd_mode, NCMPI_CHECK(ncmpi_create(testComm, testFileName, fd_mode,
mpiHints, fd), "cannot create file"); mpiHints, fd), "cannot create file");
/* Wei-keng Liao: print the MPI file hints currently used */ /* free up the mpiHints object */
/* WEL - add when ncmpi_get_file_info() is in current parallel-netcdf release if (mpiHints != MPI_INFO_NULL)
if (rank == 0 && param->showHints) { MPI_CHECK(MPI_Info_free(&mpiHints), "cannot free file info");
MPI_CHECK(ncmpi_get_file_info(*fd, &mpiHints),
"cannot get file info");
fprintf(stdout, "\nhints returned from opened file {\n");
ShowHints(&mpiHints);
fprintf(stdout, "}\n");
}
*/
/* Wei-keng Liao: free up the mpiHints object */ #if defined(PNETCDF_VERSION_MAJOR) && (PNETCDF_VERSION_MAJOR > 1 || PNETCDF_VERSION_MINOR >= 2)
/* WEL - this needs future fix from next release of PnetCDF /* ncmpi_get_file_info is first available in 1.2.0 */
if (mpiHints != MPI_INFO_NULL) if (rank == 0 && param->showHints) {
MPI_CHECK(MPI_Info_free(&mpiHints), "cannot free file info"); MPI_Info info_used;
*/ MPI_CHECK(ncmpi_get_file_info(*fd, &info_used),
"cannot inquire file info");
/* print the MPI file hints currently used */
fprintf(stdout, "\nhints returned from opened file {\n");
ShowHints(&info_used);
fprintf(stdout, "}\n");
MPI_CHECK(MPI_Info_free(&info_used), "cannot free file info");
}
#endif
return (fd); return (fd);
} }
@ -134,7 +135,7 @@ static void *NCMPI_Open(char *testFileName, IOR_param_t * param)
int fd_mode; int fd_mode;
MPI_Info mpiHints = MPI_INFO_NULL; MPI_Info mpiHints = MPI_INFO_NULL;
/* Wei-keng Liao: read and set MPI file hints from hintsFile */ /* read and set MPI file hints from hintsFile */
SetHints(&mpiHints, param->hintsFileName); SetHints(&mpiHints, param->hintsFileName);
if (rank == 0 && param->showHints) { if (rank == 0 && param->showHints) {
fprintf(stdout, "\nhints passed to MPI_File_open() {\n"); fprintf(stdout, "\nhints passed to MPI_File_open() {\n");
@ -150,22 +151,23 @@ static void *NCMPI_Open(char *testFileName, IOR_param_t * param)
NCMPI_CHECK(ncmpi_open(testComm, testFileName, fd_mode, NCMPI_CHECK(ncmpi_open(testComm, testFileName, fd_mode,
mpiHints, fd), "cannot open file"); mpiHints, fd), "cannot open file");
/* Wei-keng Liao: print the MPI file hints currently used */ /* free up the mpiHints object */
/* WEL - add when ncmpi_get_file_info() is in current parallel-netcdf release if (mpiHints != MPI_INFO_NULL)
if (rank == 0 && param->showHints) { MPI_CHECK(MPI_Info_free(&mpiHints), "cannot free file info");
MPI_CHECK(ncmpi_get_file_info(*fd, &mpiHints),
"cannot get file info");
fprintf(stdout, "\nhints returned from opened file {\n");
ShowHints(&mpiHints);
fprintf(stdout, "}\n");
}
*/
/* Wei-keng Liao: free up the mpiHints object */ #if defined(PNETCDF_VERSION_MAJOR) && (PNETCDF_VERSION_MAJOR > 1 || PNETCDF_VERSION_MINOR >= 2)
/* WEL - this needs future fix from next release of PnetCDF /* ncmpi_get_file_info is first available in 1.2.0 */
if (mpiHints != MPI_INFO_NULL) if (rank == 0 && param->showHints) {
MPI_CHECK(MPI_Info_free(&mpiHints), "cannot free file info"); MPI_Info info_used;
*/ MPI_CHECK(ncmpi_get_file_info(*fd, &info_used),
"cannot inquire file info");
/* print the MPI file hints currently used */
fprintf(stdout, "\nhints returned from opened file {\n");
ShowHints(&info_used);
fprintf(stdout, "}\n");
MPI_CHECK(MPI_Info_free(&info_used), "cannot free file info");
}
#endif
return (fd); return (fd);
} }
@ -183,17 +185,6 @@ static IOR_offset_t NCMPI_Xfer(int access, void *fd, IOR_size_t * buffer,
IOR_offset_t segmentPosition; IOR_offset_t segmentPosition;
int segmentNum, transferNum; int segmentNum, transferNum;
/* Wei-keng Liao: In ior.c line 1979 says "block size must be a multiple
of transfer size." Hence, length should always == param->transferSize
below. I leave it here to double check.
*/
if (length != param->transferSize) {
char errMsg[256];
sprintf(errMsg, "length(%lld) != param->transferSize(%lld)\n",
length, param->transferSize);
NCMPI_CHECK(-1, errMsg);
}
/* determine by offset if need to start data set */ /* determine by offset if need to start data set */
if (param->filePerProc == TRUE) { if (param->filePerProc == TRUE) {
segmentPosition = (IOR_offset_t) 0; segmentPosition = (IOR_offset_t) 0;
@ -224,7 +215,7 @@ static IOR_offset_t NCMPI_Xfer(int access, void *fd, IOR_size_t * buffer,
int numTransfers = int numTransfers =
param->blockSize / param->transferSize; param->blockSize / param->transferSize;
/* Wei-keng Liao: change 1D array to 3D array of dimensions: /* reshape 1D array to 3D array:
[segmentCount*numTasksWorld][numTransfers][transferSize] [segmentCount*numTasksWorld][numTransfers][transferSize]
Requirement: none of these dimensions should be > 4G, Requirement: none of these dimensions should be > 4G,
*/ */
@ -264,13 +255,13 @@ static IOR_offset_t NCMPI_Xfer(int access, void *fd, IOR_size_t * buffer,
var_id = param->var_id; var_id = param->var_id;
/* Wei-keng Liao: calculate the segment number */ /* calculate the segment number */
segmentNum = param->offset / (param->numTasks * param->blockSize); segmentNum = param->offset / (param->numTasks * param->blockSize);
/* Wei-keng Liao: calculate the transfer number in each block */ /* calculate the transfer number in each block */
transferNum = param->offset % param->blockSize / param->transferSize; transferNum = param->offset % param->blockSize / param->transferSize;
/* Wei-keng Liao: read/write the 3rd dim of the dataset, each is of /* read/write the 3rd dim of the dataset, each is of
amount param->transferSize */ amount param->transferSize */
bufSize[0] = 1; bufSize[0] = 1;
bufSize[1] = 1; bufSize[1] = 1;
@ -381,7 +372,7 @@ static int GetFileMode(IOR_param_t * param)
fprintf(stdout, "O_DIRECT not implemented in NCMPI\n"); fprintf(stdout, "O_DIRECT not implemented in NCMPI\n");
} }
/* Wei-keng Liao: to enable > 4GB file size */ /* to enable > 4GB file size */
fd_mode |= NC_64BIT_OFFSET; fd_mode |= NC_64BIT_OFFSET;
return (fd_mode); return (fd_mode);

View File

@ -71,6 +71,7 @@
static IOR_offset_t POSIX_Xfer(int, void *, IOR_size_t *, static IOR_offset_t POSIX_Xfer(int, void *, IOR_size_t *,
IOR_offset_t, IOR_param_t *); IOR_offset_t, IOR_param_t *);
static void POSIX_Fsync(void *, IOR_param_t *); static void POSIX_Fsync(void *, IOR_param_t *);
static void POSIX_Sync(IOR_param_t * );
/************************** O P T I O N S *****************************/ /************************** O P T I O N S *****************************/
typedef struct{ typedef struct{
@ -122,6 +123,7 @@ ior_aiori_t posix_aiori = {
.stat = aiori_posix_stat, .stat = aiori_posix_stat,
.get_options = POSIX_options, .get_options = POSIX_options,
.enable_mdtest = true, .enable_mdtest = true,
.sync = POSIX_Sync
}; };
/***************************** F U N C T I O N S ******************************/ /***************************** F U N C T I O N S ******************************/
@ -146,7 +148,7 @@ void gpfs_free_all_locks(int fd)
rc = gpfs_fcntl(fd, &release_all); rc = gpfs_fcntl(fd, &release_all);
if (verbose >= VERBOSE_0 && rc != 0) { if (verbose >= VERBOSE_0 && rc != 0) {
EWARN("gpfs_fcntl release all locks hint failed."); EWARNF("gpfs_fcntl(%d, ...) release all locks hint failed.", fd);
} }
} }
void gpfs_access_start(int fd, IOR_offset_t length, IOR_param_t *param, int access) void gpfs_access_start(int fd, IOR_offset_t length, IOR_param_t *param, int access)
@ -169,7 +171,7 @@ void gpfs_access_start(int fd, IOR_offset_t length, IOR_param_t *param, int acce
rc = gpfs_fcntl(fd, &take_locks); rc = gpfs_fcntl(fd, &take_locks);
if (verbose >= VERBOSE_2 && rc != 0) { if (verbose >= VERBOSE_2 && rc != 0) {
EWARN("gpfs_fcntl access range hint failed."); EWARNF("gpfs_fcntl(fd, ...) access range hint failed.", fd);
} }
} }
@ -193,7 +195,7 @@ void gpfs_access_end(int fd, IOR_offset_t length, IOR_param_t *param, int access
rc = gpfs_fcntl(fd, &free_locks); rc = gpfs_fcntl(fd, &free_locks);
if (verbose >= VERBOSE_2 && rc != 0) { if (verbose >= VERBOSE_2 && rc != 0) {
EWARN("gpfs_fcntl free range hint failed."); EWARNF("gpfs_fcntl(fd, ...) free range hint failed.", fd);
} }
} }
@ -260,14 +262,14 @@ bool beegfs_createFilePath(char* filepath, mode_t mode, int numTargets, int chun
char* dir = dirname(dirTmp); char* dir = dirname(dirTmp);
DIR* parentDirS = opendir(dir); DIR* parentDirS = opendir(dir);
if (!parentDirS) { if (!parentDirS) {
ERR("Failed to get directory"); ERRF("Failed to get directory: %s", dir);
} }
else else
{ {
int parentDirFd = dirfd(parentDirS); int parentDirFd = dirfd(parentDirS);
if (parentDirFd < 0) if (parentDirFd < 0)
{ {
ERR("Failed to get directory descriptor"); ERRF("Failed to get directory descriptor: %s", dir);
} }
else else
{ {
@ -319,6 +321,7 @@ bool beegfs_createFilePath(char* filepath, mode_t mode, int numTargets, int chun
void *POSIX_Create(char *testFileName, IOR_param_t * param) void *POSIX_Create(char *testFileName, IOR_param_t * param)
{ {
int fd_oflag = O_BINARY; int fd_oflag = O_BINARY;
int mode = 0664;
int *fd; int *fd;
fd = (int *)malloc(sizeof(int)); fd = (int *)malloc(sizeof(int));
@ -346,9 +349,10 @@ void *POSIX_Create(char *testFileName, IOR_param_t * param)
if (!param->filePerProc && rank != 0) { if (!param->filePerProc && rank != 0) {
MPI_CHECK(MPI_Barrier(testComm), "barrier error"); MPI_CHECK(MPI_Barrier(testComm), "barrier error");
fd_oflag |= O_RDWR; fd_oflag |= O_RDWR;
*fd = open64(testFileName, fd_oflag, 0664); *fd = open64(testFileName, fd_oflag, mode);
if (*fd < 0) if (*fd < 0)
ERR("open64() failed"); ERRF("open64(\"%s\", %d, %#o) failed",
testFileName, fd_oflag, mode);
} else { } else {
struct lov_user_md opts = { 0 }; struct lov_user_md opts = { 0 };
@ -363,7 +367,7 @@ void *POSIX_Create(char *testFileName, IOR_param_t * param)
fd_oflag |= fd_oflag |=
O_CREAT | O_EXCL | O_RDWR | O_LOV_DELAY_CREATE; O_CREAT | O_EXCL | O_RDWR | O_LOV_DELAY_CREATE;
*fd = open64(testFileName, fd_oflag, 0664); *fd = open64(testFileName, fd_oflag, mode);
if (*fd < 0) { if (*fd < 0) {
fprintf(stdout, "\nUnable to open '%s': %s\n", fprintf(stdout, "\nUnable to open '%s': %s\n",
testFileName, strerror(errno)); testFileName, strerror(errno));
@ -392,7 +396,7 @@ void *POSIX_Create(char *testFileName, IOR_param_t * param)
if (beegfs_isOptionSet(param->beegfs_chunkSize) if (beegfs_isOptionSet(param->beegfs_chunkSize)
|| beegfs_isOptionSet(param->beegfs_numTargets)) { || beegfs_isOptionSet(param->beegfs_numTargets)) {
bool result = beegfs_createFilePath(testFileName, bool result = beegfs_createFilePath(testFileName,
0664, mode,
param->beegfs_numTargets, param->beegfs_numTargets,
param->beegfs_chunkSize); param->beegfs_chunkSize);
if (result) { if (result) {
@ -403,9 +407,10 @@ void *POSIX_Create(char *testFileName, IOR_param_t * param)
} }
#endif /* HAVE_BEEGFS_BEEGFS_H */ #endif /* HAVE_BEEGFS_BEEGFS_H */
*fd = open64(testFileName, fd_oflag, 0664); *fd = open64(testFileName, fd_oflag, mode);
if (*fd < 0) if (*fd < 0)
ERR("open64() failed"); ERRF("open64(\"%s\", %d, %#o) failed",
testFileName, fd_oflag, mode);
#ifdef HAVE_LUSTRE_LUSTRE_USER_H #ifdef HAVE_LUSTRE_LUSTRE_USER_H
} }
@ -413,7 +418,7 @@ void *POSIX_Create(char *testFileName, IOR_param_t * param)
if (param->lustre_ignore_locks) { if (param->lustre_ignore_locks) {
int lustre_ioctl_flags = LL_FILE_IGNORE_LOCK; int lustre_ioctl_flags = LL_FILE_IGNORE_LOCK;
if (ioctl(*fd, LL_IOC_SETFLAGS, &lustre_ioctl_flags) == -1) if (ioctl(*fd, LL_IOC_SETFLAGS, &lustre_ioctl_flags) == -1)
ERR("ioctl(LL_IOC_SETFLAGS) failed"); ERRF("ioctl(%d, LL_IOC_SETFLAGS, ...) failed", *fd);
} }
#endif /* HAVE_LUSTRE_LUSTRE_USER_H */ #endif /* HAVE_LUSTRE_LUSTRE_USER_H */
@ -469,7 +474,7 @@ void *POSIX_Open(char *testFileName, IOR_param_t * param)
*fd = open64(testFileName, fd_oflag); *fd = open64(testFileName, fd_oflag);
if (*fd < 0) if (*fd < 0)
ERR("open64 failed"); ERRF("open64(\"%s\", %d) failed", testFileName, fd_oflag);
#ifdef HAVE_LUSTRE_LUSTRE_USER_H #ifdef HAVE_LUSTRE_LUSTRE_USER_H
if (param->lustre_ignore_locks) { if (param->lustre_ignore_locks) {
@ -479,7 +484,7 @@ void *POSIX_Open(char *testFileName, IOR_param_t * param)
"** Disabling lustre range locking **\n"); "** Disabling lustre range locking **\n");
} }
if (ioctl(*fd, LL_IOC_SETFLAGS, &lustre_ioctl_flags) == -1) if (ioctl(*fd, LL_IOC_SETFLAGS, &lustre_ioctl_flags) == -1)
ERR("ioctl(LL_IOC_SETFLAGS) failed"); ERRF("ioctl(%d, LL_IOC_SETFLAGS, ...) failed", *fd);
} }
#endif /* HAVE_LUSTRE_LUSTRE_USER_H */ #endif /* HAVE_LUSTRE_LUSTRE_USER_H */
@ -517,7 +522,7 @@ static IOR_offset_t POSIX_Xfer(int access, void *file, IOR_size_t * buffer,
/* seek to offset */ /* seek to offset */
if (lseek64(fd, param->offset, SEEK_SET) == -1) if (lseek64(fd, param->offset, SEEK_SET) == -1)
ERR("lseek64() failed"); ERRF("lseek64(%d, %lld, SEEK_SET) failed", fd, param->offset);
while (remaining > 0) { while (remaining > 0) {
/* write/read file */ /* write/read file */
@ -530,7 +535,8 @@ static IOR_offset_t POSIX_Xfer(int access, void *file, IOR_size_t * buffer,
} }
rc = write(fd, ptr, remaining); rc = write(fd, ptr, remaining);
if (rc == -1) if (rc == -1)
ERR("write() failed"); ERRF("write(%d, %p, %lld) failed",
fd, (void*)ptr, remaining);
if (param->fsyncPerWrite == TRUE) if (param->fsyncPerWrite == TRUE)
POSIX_Fsync(&fd, param); POSIX_Fsync(&fd, param);
} else { /* READ or CHECK */ } else { /* READ or CHECK */
@ -542,9 +548,11 @@ static IOR_offset_t POSIX_Xfer(int access, void *file, IOR_size_t * buffer,
} }
rc = read(fd, ptr, remaining); rc = read(fd, ptr, remaining);
if (rc == 0) if (rc == 0)
ERR("read() returned EOF prematurely"); ERRF("read(%d, %p, %lld) returned EOF prematurely",
fd, (void*)ptr, remaining);
if (rc == -1) if (rc == -1)
ERR("read() failed"); ERRF("read(%d, %p, %lld) failed",
fd, (void*)ptr, remaining);
} }
if (rc < remaining) { if (rc < remaining) {
fprintf(stdout, fprintf(stdout,
@ -579,9 +587,19 @@ static IOR_offset_t POSIX_Xfer(int access, void *file, IOR_size_t * buffer,
static void POSIX_Fsync(void *fd, IOR_param_t * param) static void POSIX_Fsync(void *fd, IOR_param_t * param)
{ {
if (fsync(*(int *)fd) != 0) if (fsync(*(int *)fd) != 0)
EWARN("fsync() failed"); EWARNF("fsync(%d) failed", *(int *)fd);
} }
static void POSIX_Sync(IOR_param_t * param)
{
int ret = system("sync");
if (ret != 0){
FAIL("Error executing the sync command, ensure it exists.");
}
}
/* /*
* Close a file through the POSIX interface. * Close a file through the POSIX interface.
*/ */
@ -590,7 +608,7 @@ void POSIX_Close(void *fd, IOR_param_t * param)
if(param->dryRun) if(param->dryRun)
return; return;
if (close(*(int *)fd) != 0) if (close(*(int *)fd) != 0)
ERR("close() failed"); ERRF("close(%d) failed", *(int *)fd);
free(fd); free(fd);
} }
@ -602,10 +620,8 @@ void POSIX_Delete(char *testFileName, IOR_param_t * param)
if(param->dryRun) if(param->dryRun)
return; return;
if (unlink(testFileName) != 0){ if (unlink(testFileName) != 0){
char errmsg[256]; EWARNF("[RANK %03d]: unlink() of file \"%s\" failed\n",
sprintf(errmsg, "[RANK %03d]: unlink() of file \"%s\" failed\n", rank, testFileName);
rank, testFileName);
EWARN(errmsg);
} }
} }
@ -621,7 +637,7 @@ IOR_offset_t POSIX_GetFileSize(IOR_param_t * test, MPI_Comm testComm,
IOR_offset_t aggFileSizeFromStat, tmpMin, tmpMax, tmpSum; IOR_offset_t aggFileSizeFromStat, tmpMin, tmpMax, tmpSum;
if (stat(testFileName, &stat_buf) != 0) { if (stat(testFileName, &stat_buf) != 0) {
ERR("stat() failed"); ERRF("stat(\"%s\", ...) failed", testFileName);
} }
aggFileSizeFromStat = stat_buf.st_size; aggFileSizeFromStat = stat_buf.st_size;

View File

@ -159,6 +159,8 @@ static void S3_Fsync(void*, IOR_param_t*);
static IOR_offset_t S3_GetFileSize(IOR_param_t*, MPI_Comm, char*); static IOR_offset_t S3_GetFileSize(IOR_param_t*, MPI_Comm, char*);
static void S3_init(); static void S3_init();
static void S3_finalize(); static void S3_finalize();
static int S3_check_params(IOR_param_t *);
/************************** D E C L A R A T I O N S ***************************/ /************************** D E C L A R A T I O N S ***************************/
@ -177,7 +179,8 @@ ior_aiori_t s3_aiori = {
.fsync = S3_Fsync, .fsync = S3_Fsync,
.get_file_size = S3_GetFileSize, .get_file_size = S3_GetFileSize,
.initialize = S3_init, .initialize = S3_init,
.finalize = S3_finalize .finalize = S3_finalize,
.check_params = S3_check_params
}; };
// "S3", plus EMC-extensions enabled // "S3", plus EMC-extensions enabled
@ -228,6 +231,22 @@ static void S3_finalize(){
aws_cleanup(); aws_cleanup();
} }
static int S3_check_params(IOR_param_t * test){
/* N:1 and N:N */
IOR_offset_t NtoN = test->filePerProc;
IOR_offset_t Nto1 = ! NtoN;
IOR_offset_t s = test->segmentCount;
IOR_offset_t t = test->transferSize;
IOR_offset_t b = test->blockSize;
if (Nto1 && (s != 1) && (b != t)) {
ERR("N:1 (strided) requires xfer-size == block-size");
return 0;
}
return 1;
}
/* modelled on similar macros in iordef.h */ /* modelled on similar macros in iordef.h */
#define CURL_ERR(MSG, CURL_ERRNO, PARAM) \ #define CURL_ERR(MSG, CURL_ERRNO, PARAM) \
do { \ do { \

View File

@ -41,6 +41,10 @@
ior_aiori_t *available_aiori[] = { ior_aiori_t *available_aiori[] = {
#ifdef USE_POSIX_AIORI #ifdef USE_POSIX_AIORI
&posix_aiori, &posix_aiori,
#endif
#ifdef USE_DAOS_AIORI
&daos_aiori,
&dfs_aiori,
#endif #endif
& dummy_aiori, & dummy_aiori,
#ifdef USE_HDF5_AIORI #ifdef USE_HDF5_AIORI
@ -69,9 +73,8 @@ ior_aiori_t *available_aiori[] = {
#ifdef USE_RADOS_AIORI #ifdef USE_RADOS_AIORI
&rados_aiori, &rados_aiori,
#endif #endif
#ifdef USE_DAOS_AIORI #ifdef USE_GFARM_AIORI
&daos_aiori, &gfarm_aiori,
&dfs_aiori,
#endif #endif
NULL NULL
}; };

View File

@ -86,6 +86,8 @@ typedef struct ior_aiori {
void (*finalize)(); /* called once per program after MPI is shutdown */ void (*finalize)(); /* called once per program after MPI is shutdown */
option_help * (*get_options)(void ** init_backend_options, void* init_values); /* initializes the backend options as well and returns the pointer to the option help structure */ option_help * (*get_options)(void ** init_backend_options, void* init_values); /* initializes the backend options as well and returns the pointer to the option help structure */
bool enable_mdtest; bool enable_mdtest;
int (*check_params)(IOR_param_t *); /* check if the provided parameters for the given test and the module options are correct, if they aren't print a message and exit(1) or return 1*/
void (*sync)(IOR_param_t * ); /* synchronize every pending operation for this storage */
} ior_aiori_t; } ior_aiori_t;
enum bench_type { enum bench_type {
@ -94,6 +96,8 @@ enum bench_type {
}; };
extern ior_aiori_t dummy_aiori; extern ior_aiori_t dummy_aiori;
extern ior_aiori_t daos_aiori;
extern ior_aiori_t dfs_aiori;
extern ior_aiori_t hdf5_aiori; extern ior_aiori_t hdf5_aiori;
extern ior_aiori_t hdfs_aiori; extern ior_aiori_t hdfs_aiori;
extern ior_aiori_t ime_aiori; extern ior_aiori_t ime_aiori;
@ -105,8 +109,7 @@ extern ior_aiori_t s3_aiori;
extern ior_aiori_t s3_plus_aiori; extern ior_aiori_t s3_plus_aiori;
extern ior_aiori_t s3_emc_aiori; extern ior_aiori_t s3_emc_aiori;
extern ior_aiori_t rados_aiori; extern ior_aiori_t rados_aiori;
extern ior_aiori_t daos_aiori; extern ior_aiori_t gfarm_aiori;
extern ior_aiori_t dfs_aiori;
void aiori_initialize(IOR_test_t * tests); void aiori_initialize(IOR_test_t * tests);
void aiori_finalize(IOR_test_t * tests); void aiori_finalize(IOR_test_t * tests);

View File

@ -18,8 +18,8 @@ static void PrintNextToken();
void PrintTableHeader(){ void PrintTableHeader(){
if (outputFormat == OUTPUT_DEFAULT){ if (outputFormat == OUTPUT_DEFAULT){
fprintf(out_resultfile, "\n"); fprintf(out_resultfile, "\n");
fprintf(out_resultfile, "access bw(MiB/s) block(KiB) xfer(KiB) open(s) wr/rd(s) close(s) total(s) iter\n"); fprintf(out_resultfile, "access bw(MiB/s) block(KiB) xfer(KiB) open(s) wr/rd(s) close(s) total(s) iter\n");
fprintf(out_resultfile, "------ --------- ---------- --------- -------- -------- -------- -------- ----\n"); fprintf(out_resultfile, "------ --------- ---------- --------- -------- -------- -------- -------- ----\n");
} }
} }
@ -535,10 +535,14 @@ static void PrintLongSummaryOneOperation(IOR_test_t *test, const int access)
reps = params->repetitions; reps = params->repetitions;
double * times = malloc(sizeof(double)* reps); double * times = malloc(sizeof(double)* reps);
long long stonewall_avg_data_accessed = 0;
double stonewall_time = 0;
for(int i=0; i < reps; i++){ for(int i=0; i < reps; i++){
IOR_point_t *point = (access == WRITE) ? &results[i].write : IOR_point_t *point = (access == WRITE) ? &results[i].write :
&results[i].read; &results[i].read;
times[i] = point->time; times[i] = point->time;
stonewall_time += point->stonewall_time;
stonewall_avg_data_accessed += point->stonewall_avg_data_accessed;
} }
bw = bw_values(reps, results, times, access); bw = bw_values(reps, results, times, access);
@ -559,6 +563,13 @@ static void PrintLongSummaryOneOperation(IOR_test_t *test, const int access)
fprintf(out_resultfile, "%10.2f ", ops->mean); fprintf(out_resultfile, "%10.2f ", ops->mean);
fprintf(out_resultfile, "%10.2f ", ops->sd); fprintf(out_resultfile, "%10.2f ", ops->sd);
fprintf(out_resultfile, "%10.5f ", mean_of_array_of_doubles(times, reps)); fprintf(out_resultfile, "%10.5f ", mean_of_array_of_doubles(times, reps));
if(test->params.stoneWallingWearOut){
fprintf(out_resultfile, "%10.2f ", stonewall_time / reps);
fprintf(out_resultfile, "%13.2f ", stonewall_avg_data_accessed / stonewall_time / MEBIBYTE);
}else{
fprintf(out_resultfile, "%10s ", "NA");
fprintf(out_resultfile, "%13s ", "NA");
}
fprintf(out_resultfile, "%5d ", params->id); fprintf(out_resultfile, "%5d ", params->id);
fprintf(out_resultfile, "%6d ", params->numTasks); fprintf(out_resultfile, "%6d ", params->numTasks);
fprintf(out_resultfile, "%3d ", params->tasksPerNode); fprintf(out_resultfile, "%3d ", params->tasksPerNode);
@ -604,6 +615,10 @@ static void PrintLongSummaryOneOperation(IOR_test_t *test, const int access)
PrintKeyValDouble("OPsMean", ops->mean); PrintKeyValDouble("OPsMean", ops->mean);
PrintKeyValDouble("OPsSD", ops->sd); PrintKeyValDouble("OPsSD", ops->sd);
PrintKeyValDouble("MeanTime", mean_of_array_of_doubles(times, reps)); PrintKeyValDouble("MeanTime", mean_of_array_of_doubles(times, reps));
if(test->params.stoneWallingWearOut){
PrintKeyValDouble("StoneWallTime", stonewall_time / reps);
PrintKeyValDouble("StoneWallbwMeanMIB", stonewall_avg_data_accessed / stonewall_time / MEBIBYTE);
}
PrintKeyValDouble("xsizeMiB", (double) point->aggFileSizeForBW / MEBIBYTE); PrintKeyValDouble("xsizeMiB", (double) point->aggFileSizeForBW / MEBIBYTE);
PrintEndSection(); PrintEndSection();
}else if (outputFormat == OUTPUT_CSV){ }else if (outputFormat == OUTPUT_CSV){
@ -636,10 +651,10 @@ void PrintLongSummaryHeader()
} }
fprintf(out_resultfile, "\n"); fprintf(out_resultfile, "\n");
fprintf(out_resultfile, "%-9s %10s %10s %10s %10s %10s %10s %10s %10s %10s", fprintf(out_resultfile, "%-9s %10s %10s %10s %10s %10s %10s %10s %10s %10s %10s %13s",
"Operation", "Max(MiB)", "Min(MiB)", "Mean(MiB)", "StdDev", "Operation", "Max(MiB)", "Min(MiB)", "Mean(MiB)", "StdDev",
"Max(OPs)", "Min(OPs)", "Mean(OPs)", "StdDev", "Max(OPs)", "Min(OPs)", "Mean(OPs)", "StdDev",
"Mean(s)"); "Mean(s)", "Stonewall(s)", "Stonewall(MiB)");
fprintf(out_resultfile, " Test# #Tasks tPN reps fPP reord reordoff reordrand seed" fprintf(out_resultfile, " Test# #Tasks tPN reps fPP reord reordoff reordrand seed"
" segcnt "); " segcnt ");
fprintf(out_resultfile, "%8s %8s %9s %5s", " blksiz", "xsize","aggs(MiB)", "API"); fprintf(out_resultfile, "%8s %8s %9s %5s", " blksiz", "xsize","aggs(MiB)", "API");

View File

@ -787,8 +787,7 @@ void GetTestFileName(char *testFileName, IOR_param_t * test)
static char *PrependDir(IOR_param_t * test, char *rootDir) static char *PrependDir(IOR_param_t * test, char *rootDir)
{ {
char *dir; char *dir;
char fname[MAX_STR + 1]; char *fname;
char *p;
int i; int i;
dir = (char *)malloc(MAX_STR + 1); dir = (char *)malloc(MAX_STR + 1);
@ -808,35 +807,27 @@ static char *PrependDir(IOR_param_t * test, char *rootDir)
} }
/* get file name */ /* get file name */
strcpy(fname, rootDir); fname = rootDir + i + 1;
p = fname;
while (i > 0) {
if (fname[i] == '\0' || fname[i] == '/') {
p = fname + (i + 1);
break;
}
i--;
}
/* create directory with rank as subdirectory */ /* create directory with rank as subdirectory */
sprintf(dir, "%s%d", dir, (rank + rankOffset) % test->numTasks); sprintf(dir + i + 1, "%d", (rank + rankOffset) % test->numTasks);
/* dir doesn't exist, so create */ /* dir doesn't exist, so create */
if (backend->access(dir, F_OK, test) != 0) { if (backend->access(dir, F_OK, test) != 0) {
if (backend->mkdir(dir, S_IRWXU, test) < 0) { if (backend->mkdir(dir, S_IRWXU, test) < 0) {
ERR("cannot create directory"); ERRF("cannot create directory: %s", dir);
} }
/* check if correct permissions */ /* check if correct permissions */
} else if (backend->access(dir, R_OK, test) != 0 || } else if (backend->access(dir, R_OK, test) != 0 ||
backend->access(dir, W_OK, test) != 0 || backend->access(dir, W_OK, test) != 0 ||
backend->access(dir, X_OK, test) != 0) { backend->access(dir, X_OK, test) != 0) {
ERR("invalid directory permissions"); ERRF("invalid directory permissions: %s", dir);
} }
/* concatenate dir and file names */ /* concatenate dir and file names */
strcat(dir, "/"); strcat(dir, "/");
strcat(dir, p); strcat(dir, fname);
return dir; return dir;
} }
@ -902,6 +893,10 @@ static void RemoveFile(char *testFileName, int filePerProc, IOR_param_t * test)
GetTestFileName(testFileName, test); GetTestFileName(testFileName, test);
} }
if (backend->access(testFileName, F_OK, test) == 0) { if (backend->access(testFileName, F_OK, test) == 0) {
if (verbose >= VERBOSE_3) {
fprintf(out_logfile, "task %d removing %s\n", rank,
testFileName);
}
backend->delete(testFileName, test); backend->delete(testFileName, test);
} }
if (test->reorderTasksRandom == TRUE) { if (test->reorderTasksRandom == TRUE) {
@ -909,7 +904,11 @@ static void RemoveFile(char *testFileName, int filePerProc, IOR_param_t * test)
GetTestFileName(testFileName, test); GetTestFileName(testFileName, test);
} }
} else { } else {
if (rank == 0 && backend->access(testFileName, F_OK, test) == 0) { if ((rank == 0) && (backend->access(testFileName, F_OK, test) == 0)) {
if (verbose >= VERBOSE_3) {
fprintf(out_logfile, "task %d removing %s\n", rank,
testFileName);
}
backend->delete(testFileName, test); backend->delete(testFileName, test);
} }
} }
@ -941,6 +940,7 @@ static void InitTests(IOR_test_t *tests, MPI_Comm com)
params->testComm = com; params->testComm = com;
params->nodes = params->numTasks / tasksPerNode; params->nodes = params->numTasks / tasksPerNode;
params->tasksPerNode = tasksPerNode; params->tasksPerNode = tasksPerNode;
params->tasksBlockMapping = QueryNodeMapping(com,false);
if (params->numTasks == 0) { if (params->numTasks == 0) {
params->numTasks = size; params->numTasks = size;
} }
@ -1224,7 +1224,7 @@ static void TestIoSys(IOR_test_t *test)
} }
if (rank == 0 && params->reorderTasks == TRUE && verbose >= VERBOSE_1) { if (rank == 0 && params->reorderTasks == TRUE && verbose >= VERBOSE_1) {
fprintf(out_logfile, fprintf(out_logfile,
"Using reorderTasks '-C' (expecting block, not cyclic, task assignment)\n"); "Using reorderTasks '-C' (useful to avoid read cache in client)\n");
fflush(out_logfile); fflush(out_logfile);
} }
params->tasksPerNode = CountTasksPerNode(testComm); params->tasksPerNode = CountTasksPerNode(testComm);
@ -1362,7 +1362,11 @@ static void TestIoSys(IOR_test_t *test)
} }
if (params->reorderTasks) { if (params->reorderTasks) {
/* move two nodes away from writing node */ /* move two nodes away from writing node */
rankOffset = (2 * params->tasksPerNode) % params->numTasks; int shift = 1; /* assume a by-node (round-robin) mapping of tasks to nodes */
if (params->tasksBlockMapping) {
shift = params->tasksPerNode; /* switch to by-slot (contiguous block) mapping */
}
rankOffset = (2 * shift) % params->numTasks;
} }
// update the check buffer // update the check buffer
@ -1397,9 +1401,12 @@ static void TestIoSys(IOR_test_t *test)
/* Get rankOffset [file offset] for this process to read, based on -C,-Z,-Q,-X options */ /* Get rankOffset [file offset] for this process to read, based on -C,-Z,-Q,-X options */
/* Constant process offset reading */ /* Constant process offset reading */
if (params->reorderTasks) { if (params->reorderTasks) {
/* move taskPerNodeOffset nodes[1==default] away from writing node */ /* move one node away from writing node */
rankOffset = (params->taskPerNodeOffset * int shift = 1; /* assume a by-node (round-robin) mapping of tasks to nodes */
params->tasksPerNode) % params->numTasks; if (params->tasksBlockMapping) {
shift=params->tasksPerNode; /* switch to a by-slot (contiguous block) mapping */
}
rankOffset = (params->taskPerNodeOffset * shift) % params->numTasks;
} }
/* random process offset reading */ /* random process offset reading */
if (params->reorderTasksRandom) { if (params->reorderTasksRandom) {
@ -1582,6 +1589,7 @@ static void ValidateTests(IOR_param_t * test)
&& (strcasecmp(test->api, "MPIIO") != 0) && (strcasecmp(test->api, "MPIIO") != 0)
&& (strcasecmp(test->api, "MMAP") != 0) && (strcasecmp(test->api, "MMAP") != 0)
&& (strcasecmp(test->api, "HDFS") != 0) && (strcasecmp(test->api, "HDFS") != 0)
&& (strcasecmp(test->api, "Gfarm") != 0)
&& (strcasecmp(test->api, "RADOS") != 0)) && test->fsync) && (strcasecmp(test->api, "RADOS") != 0)) && test->fsync)
WARN_RESET("fsync() not supported in selected backend", WARN_RESET("fsync() not supported in selected backend",
test, &defaults, fsync); test, &defaults, fsync);
@ -1661,11 +1669,8 @@ static void ValidateTests(IOR_param_t * test)
#if (H5_VERS_MAJOR > 0 && H5_VERS_MINOR > 5) #if (H5_VERS_MAJOR > 0 && H5_VERS_MINOR > 5)
; ;
#else #else
char errorString[MAX_STR]; ERRF("'no fill' option not available in %s",
sprintf(errorString,
"'no fill' option not available in %s",
test->apiVersion); test->apiVersion);
ERR(errorString);
#endif #endif
#else #else
WARN("unable to determine HDF5 version for 'no fill' usage"); WARN("unable to determine HDF5 version for 'no fill' usage");
@ -1675,15 +1680,12 @@ static void ValidateTests(IOR_param_t * test)
if (test->useExistingTestFile && test->lustre_set_striping) if (test->useExistingTestFile && test->lustre_set_striping)
ERR("Lustre stripe options are incompatible with useExistingTestFile"); ERR("Lustre stripe options are incompatible with useExistingTestFile");
/* N:1 and N:N */ /* allow the backend to validate the options */
IOR_offset_t NtoN = test->filePerProc; if(test->backend->check_params){
IOR_offset_t Nto1 = ! NtoN; int check = test->backend->check_params(test);
IOR_offset_t s = test->segmentCount; if (check == 0){
IOR_offset_t t = test->transferSize; ERR("The backend returned that the test parameters are invalid.");
IOR_offset_t b = test->blockSize; }
if (Nto1 && (s != 1) && (b != t)) {
ERR("N:1 (strided) requires xfer-size == block-size");
} }
} }
@ -1938,10 +1940,6 @@ static IOR_offset_t WriteOrRead(IOR_param_t *test, IOR_results_t *results,
point->stonewall_min_data_accessed /1024.0 / 1024 / 1024, point->stonewall_avg_data_accessed / 1024.0 / 1024 / 1024 / test->numTasks , point->stonewall_time); point->stonewall_min_data_accessed /1024.0 / 1024 / 1024, point->stonewall_avg_data_accessed / 1024.0 / 1024 / 1024 / test->numTasks , point->stonewall_time);
point->stonewall_min_data_accessed *= test->numTasks; point->stonewall_min_data_accessed *= test->numTasks;
} }
if(pairs_accessed_min == pairCnt){
point->stonewall_min_data_accessed = 0;
point->stonewall_avg_data_accessed = 0;
}
if(pairCnt != point->pairs_accessed){ if(pairCnt != point->pairs_accessed){
// some work needs still to be done ! // some work needs still to be done !
for(; pairCnt < point->pairs_accessed; pairCnt++ ) { for(; pairCnt < point->pairs_accessed; pairCnt++ ) {

View File

@ -100,6 +100,7 @@ typedef struct
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 */
int tasksBlockMapping; /* are the tasks in contiguous blocks across nodes or round-robin */
int repetitions; /* number of repetitions of test */ int repetitions; /* number of repetitions of test */
int repCounter; /* rep counter */ int repCounter; /* rep counter */
int multiFile; /* multiple files */ int multiFile; /* multiple files */

View File

@ -151,28 +151,41 @@ typedef long long int IOR_size_t;
fflush(stdout); \ fflush(stdout); \
} while (0) } while (0)
/* warning with errno printed */
#define EWARN(MSG) do { \ /* warning with format string and errno printed */
#define EWARNF(FORMAT, ...) do { \
if (verbose > VERBOSE_2) { \ if (verbose > VERBOSE_2) { \
fprintf(stdout, "ior WARNING: %s, errno %d, %s (%s:%d).\n", \ fprintf(stdout, "ior WARNING: " FORMAT ", errno %d, %s (%s:%d).\n", \
MSG, errno, strerror(errno), __FILE__, __LINE__); \ __VA_ARGS__, errno, strerror(errno), __FILE__, __LINE__); \
} else { \ } else { \
fprintf(stdout, "ior WARNING: %s, errno %d, %s \n", \ fprintf(stdout, "ior WARNING: " FORMAT ", errno %d, %s \n", \
MSG, errno, strerror(errno)); \ __VA_ARGS__, errno, strerror(errno)); \
} \ } \
fflush(stdout); \ fflush(stdout); \
} while (0) } while (0)
/* display error message and terminate execution */ /* warning with errno printed */
#define ERR(MSG) do { \ #define EWARN(MSG) do { \
fprintf(stdout, "ior ERROR: %s, errno %d, %s (%s:%d)\n", \ EWARNF("%s", MSG); \
MSG, errno, strerror(errno), __FILE__, __LINE__); \ } while (0)
/* display error message with format string and terminate execution */
#define ERRF(FORMAT, ...) do { \
fprintf(stdout, "ior ERROR: " FORMAT ", errno %d, %s (%s:%d)\n", \
__VA_ARGS__, errno, strerror(errno), __FILE__, __LINE__); \
fflush(stdout); \ fflush(stdout); \
MPI_Abort(MPI_COMM_WORLD, -1); \ MPI_Abort(MPI_COMM_WORLD, -1); \
} while (0) } while (0)
/* display error message and terminate execution */
#define ERR(MSG) do { \
ERRF("%s", MSG); \
} while (0)
/* display a simple error message (i.e. errno is not set) and terminate execution */ /* display a simple error message (i.e. errno is not set) and terminate execution */
#define ERR_SIMPLE(MSG) do { \ #define ERR_SIMPLE(MSG) do { \
fprintf(stdout, "ior ERROR: %s, (%s:%d)\n", \ fprintf(stdout, "ior ERROR: %s, (%s:%d)\n", \
@ -184,24 +197,35 @@ typedef long long int IOR_size_t;
/******************************************************************************/ /******************************************************************************/
/* /*
* MPI_CHECK will display a custom error message as well as an error string * MPI_CHECKF will display a custom format string as well as an error string
* from the MPI_STATUS and then exit the program * from the MPI_STATUS and then exit the program
*/ */
#define MPI_CHECK(MPI_STATUS, MSG) do { \ #define MPI_CHECKF(MPI_STATUS, FORMAT, ...) do { \
char resultString[MPI_MAX_ERROR_STRING]; \ char resultString[MPI_MAX_ERROR_STRING]; \
int resultLength; \ int resultLength; \
\ \
if (MPI_STATUS != MPI_SUCCESS) { \ if (MPI_STATUS != MPI_SUCCESS) { \
MPI_Error_string(MPI_STATUS, resultString, &resultLength); \ MPI_Error_string(MPI_STATUS, resultString, &resultLength); \
fprintf(stdout, "ior ERROR: %s, MPI %s, (%s:%d)\n", \ fprintf(stdout, "ior ERROR: " FORMAT ", MPI %s, (%s:%d)\n", \
MSG, resultString, __FILE__, __LINE__); \ __VA_ARGS__, resultString, __FILE__, __LINE__); \
fflush(stdout); \ fflush(stdout); \
MPI_Abort(MPI_COMM_WORLD, -1); \ MPI_Abort(MPI_COMM_WORLD, -1); \
} \ } \
} while(0) } while(0)
/******************************************************************************/
/*
* MPI_CHECK will display a custom error message as well as an error string
* from the MPI_STATUS and then exit the program
*/
#define MPI_CHECK(MPI_STATUS, MSG) do { \
MPI_CHECKF(MPI_STATUS, "%s", MSG); \
} while(0)
/******************************************************************************/ /******************************************************************************/
/* /*
* System info for Windows. * System info for Windows.

File diff suppressed because it is too large Load Diff

View File

@ -390,9 +390,15 @@ int option_parse(int argc, char ** argv, options_all_t * opt_all){
} }
} }
if( requiredArgsSeen != requiredArgsNeeded ){
printf("Seen = %d, needed = %d\n", requiredArgsSeen, requiredArgsNeeded);
printf("Error: Missing some required arguments\n\n");
printhelp = 1;
}
if(error != 0){ if(error != 0){
printf("Invalid options\n"); printf("Invalid options\n");
printhelp = -1; printhelp = 1;
} }
if(printhelp == 1){ if(printhelp == 1){

View File

@ -471,13 +471,13 @@ option_help * createGlobalOptions(IOR_param_t * params){
{'A', NULL, "refNum -- user supplied reference number to include in the summary", OPTION_OPTIONAL_ARGUMENT, 'd', & params->referenceNumber}, {'A', NULL, "refNum -- user supplied reference number to include in the summary", OPTION_OPTIONAL_ARGUMENT, 'd', & params->referenceNumber},
{'b', NULL, "blockSize -- contiguous bytes to write per task (e.g.: 8, 4k, 2m, 1g)", OPTION_OPTIONAL_ARGUMENT, 'l', & params->blockSize}, {'b', NULL, "blockSize -- contiguous bytes to write per task (e.g.: 8, 4k, 2m, 1g)", OPTION_OPTIONAL_ARGUMENT, 'l', & params->blockSize},
{'c', NULL, "collective -- collective I/O", OPTION_FLAG, 'd', & params->collective}, {'c', NULL, "collective -- collective I/O", OPTION_FLAG, 'd', & params->collective},
{'C', NULL, "reorderTasks -- changes task ordering to n+1 ordering for readback", OPTION_FLAG, 'd', & params->reorderTasks}, {'C', NULL, "reorderTasks -- changes task ordering for readback (useful to avoid client cache)", OPTION_FLAG, 'd', & params->reorderTasks},
{'d', NULL, "interTestDelay -- delay between reps in seconds", OPTION_OPTIONAL_ARGUMENT, 'd', & params->interTestDelay}, {'d', NULL, "interTestDelay -- delay between reps in seconds", OPTION_OPTIONAL_ARGUMENT, 'd', & params->interTestDelay},
{'D', NULL, "deadlineForStonewalling -- seconds before stopping write or read phase", OPTION_OPTIONAL_ARGUMENT, 'd', & params->deadlineForStonewalling}, {'D', NULL, "deadlineForStonewalling -- seconds before stopping write or read phase", OPTION_OPTIONAL_ARGUMENT, 'd', & params->deadlineForStonewalling},
{.help=" -O stoneWallingWearOut=1 -- once the stonewalling timout is over, all process finish to access the amount of data", .arg = OPTION_OPTIONAL_ARGUMENT}, {.help=" -O stoneWallingWearOut=1 -- once the stonewalling timout is over, all process finish to access the amount of data", .arg = OPTION_OPTIONAL_ARGUMENT},
{.help=" -O stoneWallingWearOutIterations=N -- stop after processing this number of iterations, needed for reading data back written with stoneWallingWearOut", .arg = OPTION_OPTIONAL_ARGUMENT}, {.help=" -O stoneWallingWearOutIterations=N -- stop after processing this number of iterations, needed for reading data back written with stoneWallingWearOut", .arg = OPTION_OPTIONAL_ARGUMENT},
{.help=" -O stoneWallingStatusFile=FILE -- this file keeps the number of iterations from stonewalling during write and allows to use them for read", .arg = OPTION_OPTIONAL_ARGUMENT}, {.help=" -O stoneWallingStatusFile=FILE -- this file keeps the number of iterations from stonewalling during write and allows to use them for read", .arg = OPTION_OPTIONAL_ARGUMENT},
{'e', NULL, "fsync -- perform sync operation after each block write", OPTION_FLAG, 'd', & params->fsync}, {'e', NULL, "fsync -- perform a fsync() operation at the end of each read/write phase", OPTION_FLAG, 'd', & params->fsync},
{'E', NULL, "useExistingTestFile -- do not remove test file before write access", OPTION_FLAG, 'd', & params->useExistingTestFile}, {'E', NULL, "useExistingTestFile -- do not remove test file before write access", OPTION_FLAG, 'd', & params->useExistingTestFile},
{'f', NULL, "scriptFile -- test script name", OPTION_OPTIONAL_ARGUMENT, 's', & params->testscripts}, {'f', NULL, "scriptFile -- test script name", OPTION_OPTIONAL_ARGUMENT, 's', & params->testscripts},
{'F', NULL, "filePerProc -- file-per-process", OPTION_FLAG, 'd', & params->filePerProc}, {'F', NULL, "filePerProc -- file-per-process", OPTION_FLAG, 'd', & params->filePerProc},

View File

@ -16,6 +16,11 @@ int main(int argc, char ** argv){
fprintf(stderr, "Could not run ior\n"); fprintf(stderr, "Could not run ior\n");
ret = 1; ret = 1;
} }
else
{
free(res->params.platform);
free(res);
}
} }
if (rank == 0){ if (rank == 0){
char * param[] = {"./mdtest", "-a", "DUMMY"}; char * param[] = {"./mdtest", "-a", "DUMMY"};

View File

@ -20,6 +20,7 @@
# define _GNU_SOURCE /* Needed for O_DIRECT in fcntl */ # define _GNU_SOURCE /* Needed for O_DIRECT in fcntl */
#endif /* __linux__ */ #endif /* __linux__ */
#include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <errno.h> #include <errno.h>
@ -75,6 +76,17 @@ void* safeMalloc(uint64_t size){
return d; return d;
} }
void FailMessage(int rank, const char *location, char *format, ...) {
char msg[4096];
va_list args;
va_start(args, format);
vsnprintf(msg, 4096, format, args);
va_end(args);
fprintf(out_logfile, "%s: Process %d: FAILED in %s, %s: %s\n",
PrintTimestamp(), rank, location, msg, strerror(errno));
fflush(out_logfile);
MPI_Abort(testComm, 1);
}
size_t NodeMemoryStringToBytes(char *size_str) size_t NodeMemoryStringToBytes(char *size_str)
{ {
@ -213,12 +225,53 @@ void DumpBuffer(void *buffer,
return; return;
} /* DumpBuffer() */ } /* DumpBuffer() */
/* a function that prints an int array where each index corresponds to a rank
and the value is whether that rank is on the same host as root.
Also returns 1 if rank 1 is on same host and 0 otherwise
*/
int QueryNodeMapping(MPI_Comm comm, int print_nodemap) {
char localhost[MAX_PATHLEN], roothost[MAX_PATHLEN];
int num_ranks;
MPI_Comm_size(comm, &num_ranks);
int *node_map = (int*)malloc(sizeof(int) * num_ranks);
if ( ! node_map ) {
FAIL("malloc");
}
if (gethostname(localhost, MAX_PATHLEN) != 0) {
FAIL("gethostname()");
}
if (rank==0) {
strncpy(roothost,localhost,MAX_PATHLEN);
}
/* have rank 0 broadcast out its hostname */
MPI_Bcast(roothost, MAX_PATHLEN, MPI_CHAR, 0, comm);
//printf("Rank %d received root host as %s\n", rank, roothost);
/* then every rank figures out whether it is same host as root and then gathers that */
int same_as_root = strcmp(roothost,localhost) == 0;
MPI_Gather( &same_as_root, 1, MPI_INT, node_map, 1, MPI_INT, 0, comm);
if ( print_nodemap && rank==0) {
fprintf( out_logfile, "Nodemap: " );
for ( int i = 0; i < num_ranks; i++ ) {
fprintf( out_logfile, "%d", node_map[i] );
}
fprintf( out_logfile, "\n" );
}
int ret = 1;
if(num_ranks>1)
ret = node_map[1] == 1;
MPI_Bcast(&ret, 1, MPI_INT, 0, comm);
free(node_map);
return ret;
}
#if MPI_VERSION >= 3 #if MPI_VERSION >= 3
int CountTasksPerNode(MPI_Comm comm) { int CountTasksPerNode(MPI_Comm comm) {
/* modern MPI provides a simple way to get the local process count */ /* modern MPI provides a simple way to get the local process count */
MPI_Comm shared_comm; MPI_Comm shared_comm;
int count; int count;
MPI_Comm_split_type (comm, MPI_COMM_TYPE_SHARED, 0, MPI_INFO_NULL, &shared_comm); MPI_Comm_split_type (comm, MPI_COMM_TYPE_SHARED, 0, MPI_INFO_NULL, &shared_comm);
MPI_Comm_size (shared_comm, &count); MPI_Comm_size (shared_comm, &count);
MPI_Comm_free (&shared_comm); MPI_Comm_free (&shared_comm);

View File

@ -36,23 +36,14 @@ extern enum OutputFormat_t outputFormat; /* format of the output */
#ifdef __linux__ #ifdef __linux__
#define FAIL(msg) do { \ #define ERROR_LOCATION __func__
fprintf(out_logfile, "%s: Process %d: FAILED in %s, %s: %s\n", \
PrintTimestamp(), rank, __func__, \
msg, strerror(errno)); \
fflush(out_logfile); \
MPI_Abort(testComm, 1); \
} while(0)
#else #else
#define FAIL(msg) do { \ #define ERROR_LOCATION __LINE__
fprintf(out_logfile, "%s: Process %d: FAILED at %d, %s: %s\n", \
PrintTimestamp(), rank, __LINE__, \
msg, strerror(errno)); \
fflush(out_logfile); \
MPI_Abort(testComm, 1); \
} while(0)
#endif #endif
#define FAIL(...) FailMessage(rank, ERROR_LOCATION, __VA_ARGS__)
void FailMessage(int rank, const char *location, char *format, ...);
void* safeMalloc(uint64_t size); void* safeMalloc(uint64_t size);
void set_o_direct_flag(int *fd); void set_o_direct_flag(int *fd);
@ -65,6 +56,7 @@ void SetHints (MPI_Info *, char *);
void ShowHints (MPI_Info *); void ShowHints (MPI_Info *);
char *HumanReadable(IOR_offset_t value, int base); char *HumanReadable(IOR_offset_t value, int base);
int CountTasksPerNode(MPI_Comm comm); int CountTasksPerNode(MPI_Comm comm);
int QueryNodeMapping(MPI_Comm comm, int print_nodemap);
void DelaySecs(int delay); void DelaySecs(int delay);
void updateParsedOptions(IOR_param_t * options, options_all_t * global_options); void updateParsedOptions(IOR_param_t * options, options_all_t * global_options);
size_t NodeMemoryStringToBytes(char *size_str); size_t NodeMemoryStringToBytes(char *size_str);

View File

@ -1,93 +1,95 @@
V-3: main (before display_freespace): testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 2082 main (before display_freespace): testdirpath is '/dev/shm/mdest'
V-3: testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 1506 Entering display_freespace on /dev/shm/mdest...
V-3: Before show_file_system_size, dirpath is "/dev/shm" V-3: Rank 0 Line 1525 Before show_file_system_size, dirpath is '/dev/shm'
V-3: After show_file_system_size, dirpath is "/dev/shm" V-3: Rank 0 Line 1527 After show_file_system_size, dirpath is '/dev/shm'
V-3: main (after display_freespace): testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 2097 main (after display_freespace): testdirpath is '/dev/shm/mdest'
V-3: main (create hierarchical directory loop-!unque_dir_per_task): Calling create_remove_directory_tree with "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 1656 main (create hierarchical directory loop-!unque_dir_per_task): Calling create_remove_directory_tree with '/dev/shm/mdest/test-dir.0-0'
V-3: main: Using unique_mk_dir, "mdtest_tree.0" V-3: Rank 0 Line 1683 V-3: main: Using unique_mk_dir, 'mdtest_tree.0'
V-3: main: Copied unique_mk_dir, "mdtest_tree.0", to topdir V-3: Rank 0 Line 1704 V-3: main: Copied unique_mk_dir, 'mdtest_tree.0', to topdir
V-3: directory_test: create path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 801 directory_test: create path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.0" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.0'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.1" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.1'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.2" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.2'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.3" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.3'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.4" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.4'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.5" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.5'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.6" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.6'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.7" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.7'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.8" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.8'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.9" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.9'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.10" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.10'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.11" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.11'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.12" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.12'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.13" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.13'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.14" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.14'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.15" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.15'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.16" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.16'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.17" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.17'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.18" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.18'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.19" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.19'
V-3: file_test: create path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 1716 will file_test on mdtest_tree.0
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 990 Entering file_test on mdtest_tree.0
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.0" V-3: Rank 0 Line 1012 file_test: create path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.0'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.1" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.1'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.2" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.2'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.3" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.3'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.4" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.4'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.5" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.5'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.6" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.6'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.7" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.7'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.8" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.8'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.9" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.9'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.10" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.10'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.11" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.11'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.12" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.12'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.13" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.13'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.14" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.14'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.15" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.15'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.16" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.16'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.17" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.17'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.18" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.18'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.19" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.19'
V-3: main: Using testdir, "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: Rank 0 Line 1723 main: Using testdir, '/dev/shm/mdest/test-dir.0-0'

View File

@ -1,50 +1,52 @@
V-3: main (before display_freespace): testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 2082 main (before display_freespace): testdirpath is '/dev/shm/mdest'
V-3: testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 1506 Entering display_freespace on /dev/shm/mdest...
V-3: Before show_file_system_size, dirpath is "/dev/shm" V-3: Rank 0 Line 1525 Before show_file_system_size, dirpath is '/dev/shm'
V-3: After show_file_system_size, dirpath is "/dev/shm" V-3: Rank 0 Line 1527 After show_file_system_size, dirpath is '/dev/shm'
V-3: main (after display_freespace): testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 2097 main (after display_freespace): testdirpath is '/dev/shm/mdest'
V-3: main: Using unique_mk_dir, "mdtest_tree.0" V-3: Rank 0 Line 1683 V-3: main: Using unique_mk_dir, 'mdtest_tree.0'
V-3: main: Copied unique_mk_dir, "mdtest_tree.0", to topdir V-3: Rank 0 Line 1704 V-3: main: Copied unique_mk_dir, 'mdtest_tree.0', to topdir
V-3: directory_test: stat path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 833 stat path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.0 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.0
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.1 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.1
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.2 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.2
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.3 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.3
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.4 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.4
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.5 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.5
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.6 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.6
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.7 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.7
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.8 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.8
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.9 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.9
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.10 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.10
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.11 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.11
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.12 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.12
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.13 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.13
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.14 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.14
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.15 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.15
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.16 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.16
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.17 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.17
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.18 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.18
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.19 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.19
V-3: file_test: stat path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 1716 will file_test on mdtest_tree.0
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.0 V-3: Rank 0 Line 990 Entering file_test on mdtest_tree.0
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.1 V-3: Rank 0 Line 1079 file_test: stat path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.2 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.0
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.3 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.1
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.4 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.2
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.5 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.3
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.6 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.4
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.7 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.5
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.8 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.6
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.9 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.7
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.10 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.8
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.11 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.9
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.12 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.10
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.13 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.11
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.14 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.12
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.15 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.13
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.16 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.14
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.17 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.15
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.18 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.16
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/file.mdtest.0.19 V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.17
V-3: main: Using testdir, "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.18
V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/file.mdtest.0.19
V-3: Rank 0 Line 1723 main: Using testdir, '/dev/shm/mdest/test-dir.0-0'

View File

@ -1,77 +1,77 @@
V-3: main (before display_freespace): testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 2082 main (before display_freespace): testdirpath is '/dev/shm/mdest'
V-3: testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 1506 Entering display_freespace on /dev/shm/mdest...
V-3: Before show_file_system_size, dirpath is "/dev/shm" V-3: Rank 0 Line 1525 Before show_file_system_size, dirpath is '/dev/shm'
V-3: After show_file_system_size, dirpath is "/dev/shm" V-3: Rank 0 Line 1527 After show_file_system_size, dirpath is '/dev/shm'
V-3: main (after display_freespace): testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 2097 main (after display_freespace): testdirpath is '/dev/shm/mdest'
V-3: main (create hierarchical directory loop-!unque_dir_per_task): Calling create_remove_directory_tree with "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 1656 main (create hierarchical directory loop-!unque_dir_per_task): Calling create_remove_directory_tree with '/dev/shm/mdest/test-dir.0-0'
V-3: main: Using unique_mk_dir, "mdtest_tree.0" V-3: Rank 0 Line 1683 V-3: main: Using unique_mk_dir, 'mdtest_tree.0'
V-3: main: Copied unique_mk_dir, "mdtest_tree.0", to topdir V-3: Rank 0 Line 1704 V-3: main: Copied unique_mk_dir, 'mdtest_tree.0', to topdir
V-3: directory_test: create path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 801 directory_test: create path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.0" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.0'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.1" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.1'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.2" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.2'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.3" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.3'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.4" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.4'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.5" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.5'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.6" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.6'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.7" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.7'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.8" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.8'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.9" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.9'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.10" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.10'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.11" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.11'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.12" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.12'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.13" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.13'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.14" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.14'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.15" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.15'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.16" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.16'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.17" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.17'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.18" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.18'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.19" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.19'
V-3: directory_test: stat path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 833 stat path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.0 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.0
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.1 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.1
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.2 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.2
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.3 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.3
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.4 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.4
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.5 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.5
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.6 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.6
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.7 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.7
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.8 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.8
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.9 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.9
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.10 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.10
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.11 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.11
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.12 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.12
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.13 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.13
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.14 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.14
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.15 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.15
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.16 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.16
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.17 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.17
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.18 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.18
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.19 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.19
V-3: directory_test: read path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 862 directory_test: read path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: directory_test: remove directories path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 890 directory_test: remove directories path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.0" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.0'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.1" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.1'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.2" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.2'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.3" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.3'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.4" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.4'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.5" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.5'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.6" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.6'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.7" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.7'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.8" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.8'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.9" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.9'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.10" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.10'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.11" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.11'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.12" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.12'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.13" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.13'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.14" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.14'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.15" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.15'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.16" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.16'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.17" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.17'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.18" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.18'
V-3: create_remove_items_helper (dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0/dir.mdtest.0.19" V-3: Rank 0 Line 288 create_remove_items_helper (dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0/dir.mdtest.0.19'
V-3: directory_test: remove unique directories path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 915 directory_test: remove unique directories path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: main: Using testdir, "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 1723 main: Using testdir, '/dev/shm/mdest/test-dir.0-0'
V-3: main (remove hierarchical directory loop-!unique_dir_per_task): Calling create_remove_directory_tree with "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 1764 V-3: main (remove hierarchical directory loop-!unique_dir_per_task): Calling create_remove_directory_tree with '/dev/shm/mdest/test-dir.0-0'

View File

@ -1,24 +1,27 @@
V-3: main (before display_freespace): testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 2082 main (before display_freespace): testdirpath is '/dev/shm/mdest'
V-3: testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 1506 Entering display_freespace on /dev/shm/mdest...
V-3: Before show_file_system_size, dirpath is "/dev/shm" V-3: Rank 0 Line 1525 Before show_file_system_size, dirpath is '/dev/shm'
V-3: After show_file_system_size, dirpath is "/dev/shm" V-3: Rank 0 Line 1527 After show_file_system_size, dirpath is '/dev/shm'
V-3: main (after display_freespace): testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 2097 main (after display_freespace): testdirpath is '/dev/shm/mdest'
V-3: main (create hierarchical directory loop-!unque_dir_per_task): Calling create_remove_directory_tree with "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 1656 main (create hierarchical directory loop-!unque_dir_per_task): Calling create_remove_directory_tree with '/dev/shm/mdest/test-dir.0-0'
V-3: main: Using unique_mk_dir, "mdtest_tree.0" V-3: Rank 0 Line 1683 V-3: main: Using unique_mk_dir, 'mdtest_tree.0'
V-3: main: Copied unique_mk_dir, "mdtest_tree.0", to topdir V-3: Rank 0 Line 1704 V-3: main: Copied unique_mk_dir, 'mdtest_tree.0', to topdir
V-3: directory_test: create path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 801 directory_test: create path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: directory_test: stat path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 833 stat path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: directory_test: read path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 862 directory_test: read path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: directory_test: remove directories path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 890 directory_test: remove directories path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: directory_test: remove unique directories path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 915 directory_test: remove unique directories path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: file_test: create path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 1716 will file_test on mdtest_tree.0
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 990 Entering file_test on mdtest_tree.0
V-3: file_test: stat path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 1012 file_test: create path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: file_test: read path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: file_test: rm directories path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 1079 file_test: stat path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 1104 file_test: read path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: file_test: rm unique directories path is "mdtest_tree.0" V-3: Rank 0 Line 1134 file_test: rm directories path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: main: Using testdir, "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 1141 gonna create /dev/shm/mdest/test-dir.0-0/mdtest_tree.0
V-3: main (remove hierarchical directory loop-!unique_dir_per_task): Calling create_remove_directory_tree with "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: Rank 0 Line 1158 file_test: rm unique directories path is 'mdtest_tree.0'
V-3: Rank 0 Line 1723 main: Using testdir, '/dev/shm/mdest/test-dir.0-0'
V-3: Rank 0 Line 1764 V-3: main (remove hierarchical directory loop-!unique_dir_per_task): Calling create_remove_directory_tree with '/dev/shm/mdest/test-dir.0-0'

View File

@ -1,24 +1,27 @@
V-3: main (before display_freespace): testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 2082 main (before display_freespace): testdirpath is '/dev/shm/mdest'
V-3: testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 1506 Entering display_freespace on /dev/shm/mdest...
V-3: Before show_file_system_size, dirpath is "/dev/shm" V-3: Rank 0 Line 1525 Before show_file_system_size, dirpath is '/dev/shm'
V-3: After show_file_system_size, dirpath is "/dev/shm" V-3: Rank 0 Line 1527 After show_file_system_size, dirpath is '/dev/shm'
V-3: main (after display_freespace): testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 2097 main (after display_freespace): testdirpath is '/dev/shm/mdest'
V-3: main (create hierarchical directory loop-!unque_dir_per_task): Calling create_remove_directory_tree with "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 1656 main (create hierarchical directory loop-!unque_dir_per_task): Calling create_remove_directory_tree with '/dev/shm/mdest/test-dir.0-0'
V-3: main: Using unique_mk_dir, "mdtest_tree.0" V-3: Rank 0 Line 1683 V-3: main: Using unique_mk_dir, 'mdtest_tree.0'
V-3: main: Copied unique_mk_dir, "mdtest_tree.0", to topdir V-3: Rank 0 Line 1704 V-3: main: Copied unique_mk_dir, 'mdtest_tree.0', to topdir
V-3: directory_test: create path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 801 directory_test: create path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: directory_test: stat path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 833 stat path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: directory_test: read path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 862 directory_test: read path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: directory_test: remove directories path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 890 directory_test: remove directories path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: directory_test: remove unique directories path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 915 directory_test: remove unique directories path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: file_test: create path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 1716 will file_test on mdtest_tree.0
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 990 Entering file_test on mdtest_tree.0
V-3: file_test: stat path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 1012 file_test: create path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: file_test: read path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: file_test: rm directories path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 1079 file_test: stat path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0" V-3: Rank 0 Line 1104 file_test: read path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: file_test: rm unique directories path is "mdtest_tree.0" V-3: Rank 0 Line 1134 file_test: rm directories path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: main: Using testdir, "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 1141 gonna create /dev/shm/mdest/test-dir.0-0/mdtest_tree.0
V-3: main (remove hierarchical directory loop-!unique_dir_per_task): Calling create_remove_directory_tree with "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0'
V-3: Rank 0 Line 1158 file_test: rm unique directories path is 'mdtest_tree.0'
V-3: Rank 0 Line 1723 main: Using testdir, '/dev/shm/mdest/test-dir.0-0'
V-3: Rank 0 Line 1764 V-3: main (remove hierarchical directory loop-!unique_dir_per_task): Calling create_remove_directory_tree with '/dev/shm/mdest/test-dir.0-0'

View File

@ -1,25 +1,29 @@
V-3: main (before display_freespace): testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 2082 main (before display_freespace): testdirpath is '/dev/shm/mdest'
V-3: testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 1506 Entering display_freespace on /dev/shm/mdest...
V-3: Before show_file_system_size, dirpath is "/dev/shm" V-3: Rank 0 Line 1525 Before show_file_system_size, dirpath is '/dev/shm'
V-3: After show_file_system_size, dirpath is "/dev/shm" V-3: Rank 0 Line 1527 After show_file_system_size, dirpath is '/dev/shm'
V-3: main (after display_freespace): testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 2097 main (after display_freespace): testdirpath is '/dev/shm/mdest'
V-3: main (create hierarchical directory loop-!collective_creates): Calling create_remove_directory_tree with "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 1647 main (create hierarchical directory loop-!collective_creates): Calling create_remove_directory_tree with '/dev/shm/mdest/test-dir.0-0'
V-3: main: Copied unique_mk_dir, "mdtest_tree.0.0", to topdir V-3: Rank 0 Line 1694 i 1 nstride 0
V-3: file_test: create path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 1704 V-3: main: Copied unique_mk_dir, 'mdtest_tree.0.0', to topdir
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 1716 will file_test on mdtest_tree.0.0
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 990 Entering file_test on mdtest_tree.0.0
V-3: create_remove_items (for loop): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/" V-3: Rank 0 Line 1012 file_test: create path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1//file.mdtest.0.1" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 483 create_remove_items (for loop): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/" V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1//file.mdtest.0.1'
V-3: file_test: stat path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/file.mdtest.0.1 V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: file_test: rm directories path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 1079 file_test: stat path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/file.mdtest.0.1
V-3: create_remove_items (for loop): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/" V-3: Rank 0 Line 1134 file_test: rm directories path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: create_remove_items_helper (non-dirs remove): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1//file.mdtest.0.1" V-3: Rank 0 Line 1141 gonna create /dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: file_test: rm unique directories path is "/dev/shm/mdest/#test-dir.0-0/" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: main (remove hierarchical directory loop-!collective): Calling create_remove_directory_tree with "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 483 create_remove_items (for loop): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/'
V-3: Rank 0 Line 310 create_remove_items_helper (non-dirs remove): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1//file.mdtest.0.1'
V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/'
V-3: Rank 0 Line 1158 file_test: rm unique directories path is '/dev/shm/mdest/test-dir.0-0/'
V-3: Rank 0 Line 1754 main (remove hierarchical directory loop-!collective): Calling create_remove_directory_tree with '/dev/shm/mdest/test-dir.0-0'

View File

@ -1,31 +1,34 @@
V-3: main (before display_freespace): testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 2082 main (before display_freespace): testdirpath is '/dev/shm/mdest'
V-3: testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 1506 Entering display_freespace on /dev/shm/mdest...
V-3: Before show_file_system_size, dirpath is "/dev/shm" V-3: Rank 0 Line 1525 Before show_file_system_size, dirpath is '/dev/shm'
V-3: After show_file_system_size, dirpath is "/dev/shm" V-3: Rank 0 Line 1527 After show_file_system_size, dirpath is '/dev/shm'
V-3: main (after display_freespace): testdirpath is "/dev/shm/mdest" V-3: Rank 0 Line 2097 main (after display_freespace): testdirpath is '/dev/shm/mdest'
V-3: main (create hierarchical directory loop-!collective_creates): Calling create_remove_directory_tree with "/dev/shm/mdest/#test-dir.0-0" V-3: Rank 0 Line 1647 main (create hierarchical directory loop-!collective_creates): Calling create_remove_directory_tree with '/dev/shm/mdest/test-dir.0-0'
V-3: main: Copied unique_mk_dir, "mdtest_tree.0.0", to topdir V-3: Rank 0 Line 1694 i 1 nstride 0
V-3: directory_test: create path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 1704 V-3: main: Copied unique_mk_dir, 'mdtest_tree.0.0', to topdir
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 801 directory_test: create path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/dir.mdtest.0.0" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/dir.mdtest.0.0'
V-3: create_remove_items (for loop): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: create_remove_items_helper (dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1//dir.mdtest.0.1" V-3: Rank 0 Line 483 create_remove_items (for loop): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/" V-3: Rank 0 Line 288 create_remove_items_helper (dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1//dir.mdtest.0.1'
V-3: directory_test: stat path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/'
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/dir.mdtest.0.0 V-3: Rank 0 Line 833 stat path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: mdtest_stat dir : /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/dir.mdtest.0.1 V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/dir.mdtest.0.0
V-3: file_test: create path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 588 mdtest_stat dir: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/dir.mdtest.0.1
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 1716 will file_test on mdtest_tree.0.0
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/file.mdtest.0.0" V-3: Rank 0 Line 990 Entering file_test on mdtest_tree.0.0
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 1012 file_test: create path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/file.mdtest.0.0'
V-3: create_remove_items (for loop): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: create_remove_items_helper (non-dirs create): curr_item is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1//file.mdtest.0.1" V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: create_remove_items_helper (non-collective, shared): open... V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: create_remove_items_helper: close... V-3: Rank 0 Line 483 create_remove_items (for loop): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/'
V-3: create_remove_items (start): temp_path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/" V-3: Rank 0 Line 326 create_remove_items_helper (non-dirs create): curr_item is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1//file.mdtest.0.1'
V-3: file_test: stat path is "/dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0" V-3: Rank 0 Line 348 create_remove_items_helper (non-collective, shared): open...
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/file.mdtest.0.0 V-3: Rank 0 Line 373 create_remove_items_helper: close...
V-3: mdtest_stat file: /dev/shm/mdest/#test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/file.mdtest.0.1 V-3: Rank 0 Line 457 create_remove_items (start): temp_path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/'
V-3: Rank 0 Line 1079 file_test: stat path is '/dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0'
V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/file.mdtest.0.0
V-3: Rank 0 Line 588 mdtest_stat file: /dev/shm/mdest/test-dir.0-0/mdtest_tree.0.0/mdtest_tree.0.1/file.mdtest.0.1