Commit Graph

53 Commits (37738dab26cf5c28c95a9be881a43d9a27e39c9d)

Author SHA1 Message Date
Jeff Inman 37738dab26 Numerous changes to file-modes, small build-tweaks, and a tweak to aiori-S3.c
(Only rank-0 should create the bucket, if it doesn't already exist.)

Prepping this for a push (as an experimental S3 build) to github.
2015-05-19 09:36:28 -06:00
Jeffrey Thornton Inman 4368cc2dc4 Fixed striding/segmentation in N:N and N:1 cases, for multi-part-upload.
All ranks locally capture and accumulate Etags for the parts they are
writing.  In the N:1 cases, these are ethen collected by rank 0, via
MPI_Gather.  This is effectively an organization matching the "segmented"
layout.  If data was written segmented, then rank0 assigns part-numbers to
with appropriate offsets to correspond to what would've been used by each
rank when writing a given etag.  If data was written strided, then etags
must also be accessed in strided order, to build the XML that will be sent.

TBD: Once the total volume of etag data exceeds the size of memory at rank
0, we'll need to impose a more-sophisticated technique.  One idea is to
thread the MPI comms differently from the libcurl comms, so that multiple
gathers can be staged incrementally, while sending a single stream of XML
data tot he servers.  For example, the libcurl write-function could
interact with the MPI prog to allow the appearance of a single stream of
data.
2014-12-02 09:10:32 -07:00
Jeffrey Thornton Inman b26f308191 Algorithms 'S3', 'S3_plus', and 'S3_EMC' all available.
These are variants on S3.  S3 uses the "pure" S3 interface, e.g. using
Multi-Part-Upload.  The "plus" variant enables EMC-extensions in the aws4c
library.  This allows the N:N case to use "append", in the case where
"transfer_size" != "block_size" for IOR.  In pure S3, the N:N case will
fail, because the EMC-extensions won't be enabled, and appending (which
attempts to use the EMC byte-range tricks to do this) will throw an error.

In the S3_EMC alg, N:1 uses EMCs other byte-range tricks to write different
parts of an N:1 file, and also uses append to write the parts of an N:N
file.  Preliminary tests show these EMC extensions look to improve BW by
~20%.

I put all three algs in aiori-S3.c, because it seemed some code was getting
reused.  Not sure if that's still going to make sense after the TBD, below.

TBD: Recently realized that the "pure' S3 shouldn't be trying to use
appends for anything.  In the N:N case, it should just use MPU, within each
file.  Then, there's no need for S3_plus.  We just have S3, which does MPU
for all writes where transfer_size != block_size, and uses (standard)
byte-range reads for reading.  Then S3_EMC uses "appends for N:N writes,
and byte-range writes for N:1 writes.  This separates the code for the two
algs a little more, but we might still want them in the same file.
2014-10-29 16:04:30 -06:00
Jeffrey Thornton Inman 2f066624f0 S3 with Multi-Part Upload for N:1 is working.
Testing on our EMC ViPR installation.  Therefore, we also have available
some EMC extensions.  For example, EMC supports a special "byte-range"
header-option ("Range: bytes=-1-") which allows appending to an object.
This is not needed for N:1 (where every write creates an independent part),
but is vital for N:N (where every write is considered an append, unless
"transfer-size" is the same as "block-size").

We also use a LANL-extended implementation of aws4c 0.5, which provides
some special features, and allows greater efficiency.  That is included in
this commit as a tarball.  Untar it somewhere else and build it, to produce
a library, which is linked with IOR.  (configure with --with-S3).

TBD: EMC also supports a simpler alternative to Multi-Part Upload, which
appears to have several advantages.  We'll add that in next, but wanted to
capture this as is, before I break it.
2014-10-27 13:29:44 -06:00
Jeffrey Thornton Inman ca801fe0ec First-cut at PLFS support, integrating Brett K's code.
Builds, but not running yet.  Requires 'configure ... --with-plfs', so it seems okay to leave this in as an optional build, pending further work.
2014-09-18 11:20:37 -06:00
Jeff Inman 28c94f8875 Fixed bug in aiori-HDFS.c where it was calling "free(fd);", which is bad.
Along the way, added a bunch of diagnostic output in the HDFS calls, which
only shows up at verbosity >= 4.  I'll probably remove this stuff before
merging with master.  Also, there's an #ifdef'ed-out sleep() in place,
which I used to attach gdb to a running MPI task.  I'll get rid of that
later, too.

Also, added another hdfs-related parameter to the IOR_param_t structure;
hdfs_user_name gets the value of the USER environment-variable as the
default HDFS user for connections.  Does this cause portability problems?
2014-08-28 15:39:44 -06:00
Jeff Inman 0be8973c0e Initial commit of the new aiori-HDFS module.
This provides an HDFS back-end, allowing IOR to exercise a Hadoop
Distributed File-System, plus corresponding changes throughout, to
integrate the new module into the build.  The commit compiles at LANL, but
hasn't been run yet.  We're currently waiting for some configuration on
machines that will eventually provide HDFS.  By default, configure ignores
the HDFS module.  You have to explicitly add --with-hdfs.
2014-08-13 17:02:43 -06:00
Jeff Inman b7fcafc9ec changes while trying to build on a Mac 2014-07-30 17:17:21 -06:00
Rob Latham aa604c1d38 Teach IOR about GPFS hints (gpfs_fcntl)
GPFS supports a "gpfs_fcntl" method for hinting various things,
including "i'm about to write this block of data".  Let's see if, for
the cost of a few system calls, we can wrangle the GPFS locking system
into allowing concurrent access with less overhead. (new IOR parameter
gpfsHintAccess)

Also, drop all locks on a file immediately after open/creation in the
shared file case, since we know all processes will touch unique regions
of the file.  It may or may not be a good idea to release all file locks
after opening.  Processes will then have to re-acquire locks already
held.   (new IOR parameter gpfsReleaseToken)
2013-10-03 18:07:49 -07:00
derics b33ff9d65c Fix use of uninitialized variable - localhost. 2012-11-21 10:10:30 -08:00
Robert Latham c0c1f38a51 Remove archaic Parallel-NetCDF 2 GiB limit
Parallel-NetCDF has not had a 2 GiB file size limitation for quite some time,
so we can remove this check.

fixes #6
2012-09-12 14:44:22 -07:00
Christopher J. Morrone 86df5878f6 Improve scalability of CountTasksPerNode().
Improve the scalabilit of CountTasksPerNode() by using
a Broadcast and AllReduce, rather than flooding task zero
with MPI_Send() messages.

Also change the hostname lookup function from MPI_Get_processor_name
to gethostname(), which should work on most systems that I know of,
including BlueGene/Q.
2012-09-12 14:43:24 -07:00
Christopher J. Morrone 15e5f648a8 Print first message earlier, so we know that MPI_Init completed 2012-09-10 10:50:18 -07:00
Christopher J. Morrone 0a39cced3c Only mention Lustre parameters if lustre options were used. 2012-01-13 16:57:21 -08:00
Christopher J. Morrone 6251589601 Add memoryPerNode documentation 2012-01-13 15:47:59 -08:00
Christopher J. Morrone 5f162061bd Change testNum to refNum 2012-01-13 15:45:02 -08:00
Christopher J. Morrone bbcc9c26b6 Allow user to hide a test's output with verbose<0. 2012-01-13 15:43:54 -08:00
Christopher J. Morrone ef70266a84 Allow long summary to be printed for every test. 2012-01-13 15:43:54 -08:00
Christopher J. Morrone 8c95611125 Alphabetize the command line options 2012-01-13 15:43:47 -08:00
Christopher J. Morrone 488ee724a9 More code cleanup. No change in functionality. 2012-01-12 20:34:40 -08:00
Christopher J. Morrone d1e68df2f5 Measure and print file unlink time. 2012-01-08 19:43:41 -08:00
Christopher J. Morrone 8f0beba3cb Refactor PPDOuble. Eliminate cut-and-paste. 2012-01-08 19:43:41 -08:00
Christopher J. Morrone 6e90c1c113 Remove dead code. 2012-01-08 19:43:41 -08:00
Christopher J. Morrone 8e06f07b28 Add header to set code preferences for vi and emacs. 2012-01-08 19:43:41 -08:00
Christopher J. Morrone 416c430811 Cleanup maxTimeDuration code. 2012-01-08 19:43:41 -08:00
Christopher J. Morrone 349f747ea5 Remove undocumented options. 2012-01-08 19:43:41 -08:00
Christopher J. Morrone 697f28e8a6 Begin to cleanup up the mess in TestIoSys(). 2012-01-08 19:36:50 -08:00
Christopher J. Morrone ed766570d0 Minor code cleanup. 2012-01-08 19:36:50 -08:00
Christopher J. Morrone 537ba5c09b Drop OPs columns 2012-01-08 19:36:50 -08:00
Christopher J. Morrone 4084e14d02 Add memoryPerNode option 2012-01-08 19:36:43 -08:00
Christopher J. Morrone 5ea51638df Add memoryPerTask option
Allows every task to allocate a specified amount of memory as
a rough simulation of a real application's memory usage.

Every page of the allocated memory is touch to defeat lazy
memory allocation.

Original patch by Michael Kluge <michael.kluge@tu-dresden.de>
2012-01-08 10:54:10 -08:00
Christopher J. Morrone 51348f34ca Add EWARN macro 2011-12-14 13:40:25 -08:00
Christopher J. Morrone 1b63aee6c8 Fix time array index for reads 2011-12-13 11:49:31 -08:00
Christopher J. Morrone dbca13903b Message cleanup 2011-12-13 11:46:04 -08:00
Christopher J. Morrone c56ce328f2 Eleminate more cut-and-paste code. 2011-12-13 11:27:01 -08:00
Christopher J. Morrone 4c3f46ac3f Clean up some normal and debug print statements. 2011-12-13 01:10:23 -08:00
Christopher J. Morrone 1237df7b48 Print test numbers 2011-12-13 01:10:23 -08:00
Christopher J. Morrone 511a0b1435 Refactor the test summary code.
Only print total summary after all tests run.

Put calculated results from each iteration of a test in a separate
IOR_results_t structure.  Clean up the allocation and freeing code
for these caluclated bits, which allowing us to hang onto the results
until the end of all tests.  That in turn allows us to perform one
big summary at the end of all of the tests.
2011-12-13 01:08:58 -08:00
Christopher J. Morrone 69ec35a432 Print header for each test 2011-12-11 02:14:23 -08:00
Christopher J. Morrone e8a86dfde3 Only print the header info once. 2011-12-11 01:50:19 -08:00
Christopher J. Morrone 672d4065de Refactor the SummarizeResults code. 2011-12-11 00:33:58 -08:00
Christopher J. Morrone 33d0a73da6 Fix column headers in print statements.
Also drop silly "EXCEL" field.
2011-12-09 11:27:53 -08:00
Christopher J. Morrone 37e3ba1766 Drop "XXCEL" strings from print statements 2011-11-29 13:14:14 -08:00
Christopher J. Morrone 126374230a Improve spacing in print statement 2011-11-21 13:56:10 -08:00
Christopher J. Morrone a60ad0b088 Impose proper file scoping and header usage.
Clean up the header files to only contain those things that
need to be shared between .c files.

Functions that are not shared are now declared static to
make their file scope explicit.  Functions that ARE shared
are declared in appropriate headers.

I am not going to claim that I caugh everything, but at
least it is a good start.
2011-11-11 17:30:20 -08:00
Christopher J. Morrone 0072f26946 More simple code cleanup 2011-11-11 15:11:45 -08:00
Christopher J. Morrone 240e5ce93f Change the the One True Formatting (Linux style)
Ran the main ior code through "indent -linux --no-tabs".
2011-11-11 15:11:45 -08:00
Christopher J. Morrone 4cdbf3aad7 Improve error messages.
Other minor code style fixes.
2011-11-10 19:01:34 -08:00
Christopher J. Morrone 2384ebe135 Use first available aiori as the default.
Doesn't just assume "POSIX" is available.
2011-11-09 16:34:16 -08:00
Christopher J. Morrone 4ae5742f87 Replace defaults.h with a simple initializer function. 2011-11-09 16:30:01 -08:00