Commit Graph

108 Commits

Author SHA1 Message Date
Quincey Koziol
24770bf218 [svn-r9939] Purpose:
New feature

Description:
    Expand v2 B-tree code to support splitting the root node when enough
records are inserted and move metadata cache callbacks into their own source
file.

Platforms tested:
    FreeBSD 4.11 (sleipnir) w/parallel
    Too minor for h5committest
2005-02-04 16:14:42 -05:00
Quincey Koziol
c3f7be36ce [svn-r9933] Purpose:
Bug fix

Description:
    Add names for new B-tree objects to metadata cache code.

Platforms tested:
    FreeBSD 4.11 (sleipnir)
    Too minor for h5committest
2005-02-04 08:15:47 -05:00
Elena Pourmal
c1df1b3ea4 [svn-r9857] Purpose: Maintenance
Description: Removed PABLO from the source

Solution:

Platforms tested: arabica with 64-bit, copper with parallel,
                  heping with GNU C and C++ and PGI fortran (but
                  I disabled hl, there is some weird problem only
                  on heping: F9XMODFLAG is not
                  propagated to the Makefile files

Misc. update:
2005-01-21 20:16:57 -05:00
John Mainzer
3b90c189ca [svn-r9850] Purpose:
1) Provide facilities in cache to allow us to avoid a potential cache
   consistency bug in the parallel case.

2) Clean up a off by one sanity checking bug.

3) Turn off execution of long running tests in debug mode.


Description:

1) In the parallel case, all writes to metadata must be collective,
   but reads may not be.  In pricipal, this allows us to different
   contents in different caches.  This isn't a problem as long as the
   correct data is always on disk, but unless we can force certain
   writes immediately, that need not be the case.

2) & 3) should need no further explanation.


Solution:

1) Add code allowing us to mark cache entries, and then force
   these entries to be flushed at a later time.

   Note that to actually avoid the bug, we will have to modify
   existing code to use these new features.

2) & 3) should need no further explanation.


Platforms tested:

heping (serial debug and production)

committest (copper, sol, and heping).  test failed on heping in the
c++ portion of the build, but at Quincey's siggestion, I am proceeding
with the checkin.


Misc. update:
2005-01-20 17:40:37 -05:00
Quincey Koziol
427ff7da28 [svn-r9727] Purpose:
Bug Fix/Code Cleanup/Doc Cleanup/Optimization/Branch Sync :-)

Description:
    Generally speaking, this is the "signed->unsigned" change to selections.
However, in the process of merging code back, things got stickier and stickier
until I ended up doing a big "sync the two branches up" operation.  So... I
brought back all the "infrastructure" fixes from the development branch to the
release branch (which I think were actually making some improvement in
performance) as well as fixed several bugs which had been fixed in one branch,
but not the other.

    I've also tagged the repository before making this checkin with the label
"before_signed_unsigned_changes".

Platforms tested:
    FreeBSD 4.10 (sleipnir) w/parallel & fphdf5
    FreeBSD 4.10 (sleipnir) w/threadsafe
    FreeBSD 4.10 (sleipnir) w/backward compatibility
    Solaris 2.7 (arabica) w/"purify options"
    Solaris 2.8 (sol) w/FORTRAN & C++
    AIX 5.x (copper) w/parallel & FORTRAN
    IRIX64 6.5 (modi4) w/FORTRAN
    Linux 2.4 (heping) w/FORTRAN & C++


Misc. update:
2004-12-29 09:26:20 -05:00
John Mainzer
5c415042a3 [svn-r9687] Purpose:
Modify the cache code (H5C) to support automatic cache resizing to
adapt to the work load at run time.


Description:

   Different applications require different sized caches to maintain
an acceptable hit rate.  This set of changes attempts to provide the
ability to adjust to circumstances automatically.


Solution:

   Added highly configurable code to allow the user to either set a
fixed cache size, or allow the cache to grow and shrink according to
conditions.

   If enabled, cache size increases are triggered when the hit rate
drops below a user specified threshold in a user specified interval.

   Cache size reductions (if enabled) are triggered when either the
hit rate exceeds some user specified threshold over a user specified
interval, when the cache contains "enough" entries that haven't been
accessed for a user specified interval, or some mix of the above.

   See the header comments on the H5C_auto_size_ctl_t structure in
H5Cprivate.h for further details.

   At present, the cache resize configuration options are not
accessible via the user API.  Must add this.


Platforms tested:

   h5committested, heping (serial), and copper (parallel)


Misc. update:
2004-12-17 20:30:34 -05:00
Quincey Koziol
3b63db5f7f [svn-r9459] Purpose:
Code cleanup

Description:
    Clean up minor warnings and align with release branch.


Platforms tested:
    FreeBSD 4.10 (sleipnir) w/parallel & FPH5
    Solaris 2.7 (arabica) w/production mode
    Linux 2.4 (heping) w/C++ and FORTRAN
2004-10-26 15:07:10 -05:00
Raymond Lu
cb7f03a26f [svn-r9183] Purpose: New feature
Description:  Restore 6 old error API functions back to the library to be backward
compatible with v1.6.  They are H5Epush, H5Eprint, H5Ewalk, H5Eclear, H5Eset_auto,
H5Eget_auto.  These functions do not have error stack  as parameter.

Solution:  Internally, these functions use default error stack.

Platforms tested:  h5committest and fuss.

Misc. update: RELEASE.txt
2004-09-01 12:43:30 -05:00
Quincey Koziol
7cac82cf68 [svn-r8801] Purpose:
Code optimization

Description:
    Set up datatype ID for dataset's datatype on disk.  This allows us to avoid
repeatedly copying the datatype when an ID is needed.

    Also, clean up a few warnings in various other places.

Platforms tested:
    Solaris 2.7 (arabica)
    FreeBSD 4.10 (sleipnir) w/parallel
    Too minor to require h5committest
2004-07-03 15:03:09 -05:00
Quincey Koziol
153444fed7 [svn-r8800] Purpose:
Code cleanup

Description:
    Fix problems when compiling with C++ compiler.

    Also clean up some warnings with gcc 3.4.x

Platforms tested:
    FreeBSD 4.10 (sleipnir)
    Too minor to require h5committest
2004-07-03 12:00:01 -05:00
John Mainzer
c49dd7fa36 [svn-r8791] Purpose: Rewrote metadata cache (H5AC.c, etc.) to improve performance.
Description:

Replaced the old metadata cache with a cache with a modified LRU
replacement policy.  This should improve the hit rate.

Solution:

Since we want to flush cache entries in increasing address order, I
used the threaded binary B-tree code to store the cache entries.
There is a fair bit of overhead here, so we may want to consider
other options.

While the code is designed to allow the support of other replacement
algorithms, at present, only a modified version of LRU is supported.

The modified LRU algorithm requires that a user selectable portion
of the cache entries be clean.  The clean entries are evicted first
when writes are not permitted.  If the pool of clean entries is used
up, the cache grows beyond its user specified maximum size.  The
cache can also exceed its maximum size if the combined size of the
protected (or locked) entries exceeds the maximum size of the cache.


Platforms tested:

eirene (serial, parallel, fp), h5committested


Misc. update:
2004-07-02 14:35:04 -05:00
Quincey Koziol
7c3df64cc4 [svn-r8731] Purpose:
Code cleanup & minor optimization

Description:
    Re-work the way interface initialization routines are specified in the
library to avoid the overhead of checking for them in routines where there is
no interface initialization routine.  This cleans up warnings with gcc 3.4,
reduces the library binary size a bit (about 2-3%) and should speedup the
library's execution slightly.

Platforms tested:
    FreeBSD 4.10 (sleipnir) w/gcc34
    h5committest
2004-06-23 10:36:35 -05:00
Quincey Koziol
8957d31809 [svn-r8623] Purpose:
Code optimization

Description:
    Use default dataset transfer property list for internal metadata I/O
operations when parallel I/O is disabled.  This avoids multiple copies of
the properties being made when the information is not needed.

Platforms tested:
    Solaris 2.7 (arabica)
    FreeBSD 4.10 (sleipnir) w/parallel)
2004-06-08 09:33:25 -05:00
John Mainzer
4a85877fdc [svn-r8391] Purpose:
Checkpoint checkin of FP bug fixes.  FP is still quite
buggy, but I must go deal with other matters.


Description:

Fixed two major bugs:

1) H5FPserver.c was clobbering meta data in its care.

2) H5FPserver.c was allocating the same space multiple
   times, causing both data and meta data corruption.

Also made minor fixes, added debugging code, and familiarized
myself with the FP code.

All development work with FP enabled was done on Eirene.
On this platform, FP now passes its test reliably with
up to 9 processes.  At 10 processes it seg faults every
time.  I haven't looked into this issue.

There are also several known locking bugs which have to
be fixed.  However, they are of sufficiently low probability
that I didn't bother with them on this pass.

FP has not been tested with deletions -- this should be
done.

Also, need to test FP chunked I/O.


Solution:

1) Modified cache in H5FPserver.c to merge changes correctly.
   Found and fixed a bug in H5TB.c in passing.

2) Multiple space allocation was caused by a race condition
   with set eoa requests.

   Most of these eoa requests appeared to be superfluous, so
   I deleted them.

   Those issued during the superblock read seemed necessary,
   so I inserted a barrier at the end of the superblock read,
   to prevent races with allocations.

Platforms tested:
h5committested
2004-04-19 12:42:34 -05:00
Quincey Koziol
43d3a9bfe8 [svn-r8301] Purpose:
Code optimization

Description:
    Move handling for free list arrays that have no maximum size to separate
set of routines and optimize computations for free list arrays with maximum
size to avoid re-computing sizes all the time.

Platforms tested:
    h5committest
    Solaris 2.7 (arabica)
2004-04-06 08:11:45 -05:00
Quincey Koziol
feaa5bb9d5 [svn-r8038] Purpose:
Bug fix

Description:
    When two property lists are compared, the H5Pequal routine was just
comparing the raw information for the property values.  This causes problems
when the raw information contains pointers to other information.

Solution:
    Allow a 'compare' callback to be registered for properties, so that a user
application get perform the comparison itself, allowing for "deep" compares of
the property value.
    This was exported to the H5Pregister & H5Pinsert routines in the development
branch, but not the release branch.

Platforms tested:
    FreeBSD 4.9 (sleipnir)
    h5committest
2004-01-08 09:55:11 -05:00
Quincey Koziol
31431be374 [svn-r7917] Purpose:
Code cleanup

Description:
    Clean up compiler warnings, especially the 'FUNC' variable not used which
comes out in production mode.

Solution:
    Had to add a new FUNC_ENTER_NOAPI_NOINIT_NOFUNC macro for those non-API
functions which don't need the 'FUNC' variable defined.  (This will be _so_
much easier when C99 is standard on all our supposed platforms, since it has a
__FUNC__ macro... )

Platforms tested:
    FreeBSD 4.9 (sleipnir)
    too minor for h5committest (although there were lots of files changed, the
        change was minor in each one)
2003-12-06 15:38:31 -05:00
Bill Wendling
ecf3e6dc45 [svn-r7696] Purpose:
Message Correction

Description:
    Uncapitalized the beginning of the error messages.

Solution:

Platforms tested:
    Linux (Very small change).

Misc. update:
2003-10-22 16:02:26 -05:00
Quincey Koziol
3752177106 [svn-r7498] Purpose:
Code cleanup

Description:
    Clean up various warnings and parameter mis-matches, etc.

Platforms tested:
    FreeBSD 4.9 (sleipnir)
    too minor to need h5committest
2003-09-19 15:13:47 -05:00
Bill Wendling
ce5a4cf6f3 [svn-r7495] Purpose:
Removed Dead Code

Description:
    Some of the FPHDF5 code was dead (I thought it'd be useful at one
    point, but was wrong).

Solution:
    Removed

Platforms tested:
    Linux (FPHDF5 specific. No need for h5committest)

Misc. update:
2003-09-19 14:27:17 -05:00
Bill Wendling
f86cc0f1f4 [svn-r7491] Purpose:
FPHDF5 Update

Description:
    Added locking/unlocking to the AC_protect/AC_unprotect calls. The SAP
    does all of the caching so nothing should be saved on the client
    side. So, when the client unlocks the metadata, it can destroy it.
    The metadata is always read from the SAP during a lock.

Platforms tested:
    Linux (FPHDF5 specific change. No need for h5committest)
2003-09-18 16:54:13 -05:00
Bill Wendling
fec0297f86 [svn-r7489] Purpose:
Update

Description:
    A lot of modifications for the FPHDF5 stuff:

        H5AC.c
        H5ACprivate.h - Removed AC_find (it's replaced with AC_protect
        and AC_unprotect). Added flushing if it's an FPHDF5 driver and
        we're doing an AC_set or AC_unprotect with the dirty flag set.

        H5B.c - Split up the B_flush function into different functions
        since the one function was doing serialization which is better
        left as a separate entity.

        H5D.c - Removed some FPHDF5 code that was incorrect

        H5F.c - Split up the F_flush function so that it no longer
        allocates file space. Created new functions (F_init_superblock,
        F_read_superblock, and F_write_superblock) for greater modularity
        and so that the FPHDF5 non-captain processes can read the
        superblock after the captain process writes it.

        H5FD.c - Error message correction.

        H5FDfphdf5.c - Removed MPI barrier call that wasn't needed.

        H5FPclient.c
     	H5FPserver.c - Modified so that if a process requests data that
        isn't exactly aligned, we can return it if we have the block that
        contains the requested address.

        H5G.c
        H5Gent.c
        H5Gnode.c
        H5HL.c
     	H5HLpkg.h
        H5HLprivate.h
        H5Oefl.c - Removed the H5HL_peek function since it was doing a
        (now unsafe) holding of the information in the cache. Replaced
        with protect and unprotect calls.

        H5TB.c - Error fix. The TB_dless function wasn't working
        properly.

        H5Gstab.c - Format change.

        H5err.txt
        H5Edefin.h
        H5Einit.h
     	H5Epubgen.h
        H5Eterm.h - Added new error code.


Platforms tested:
    Modi4 (paralle, Fortran)
    Sol (Fortran)
    Linux (C++, Fortran)
    Copper (Parallel, Fortran)

Misc. update:
2003-09-18 14:27:27 -05:00
Bill Wendling
1f5e8c2e63 [svn-r7460] Purpose:
Update

Description:
    Added extra parameter to the H5AC_protect() function that indicates
    if the cache being asked for is going to be written to or just read
    from. Those AC_protect calls that were H5AC_find calls are now
    read-only. The rest are writes.

Platforms tested:
    Linux (h5committest not needed due to size and small impact)

Misc. update:
2003-09-10 15:06:10 -05:00
Bill Wendling
6d928cf05e [svn-r7456] Purpose:
Removal of H5AC_find()

Description:
    The H5AC_find() function is mostly redundant and with the new
    Flexible Parallel HDF5 stuff, we need to do locking on metadata
    returned from the H5AC_find() anyway. So, all of the locking stuff
    will be placed in the H5AC_{un}protect() functions. The H5AC_find()
    is no longer needed.

Solution:
    Replaced all H5AC_finds with H5AC_protects and H5AC_unprotects.

Platforms tested:
    Linux (Fortran & C++)
    Solaris (Fortran)
    Irix (Parallel & Fortran)

Misc. update:
2003-09-10 12:05:19 -05:00
Quincey Koziol
b0d47e55f7 [svn-r7446] Purpose:
Code cleanup/bug fix

Description:
    Move metadata cache calls around a bit so they protect the usage of the
metadata better.

Platforms tested:
    FreeBSD 4.9 (sleipnir)
    too small to need h5committest
2003-09-06 13:54:16 -05:00
Quincey Koziol
2e4c7f1107 [svn-r7373] Purpose:
Code cleanup

Description:
    Cleanup H5Pclose code and also switch a few internal users of H5Pclose
to use H5I_dec_ref instead.

Platforms tested:
    FreeBSD 4.8 (sleipnir)
    too small for h5committest
2003-08-15 15:07:18 -05:00
Quincey Koziol
da1e2ca089 [svn-r7369] Purpose:
Bug fix

Description:
    The metadata cache 'destroy' callback routines need the file handle in
order for certain callback routines (currently just the H5HG one) to perform
extra cleanups.  The recent change to call the 'destroy' callback from the
'clear' callback omitted this parameter.

Solution:
    Add the file handle to the metadata cache 'clear' callbacks.

Platforms tested:
    FreeBSD 4.8 (sleipnir)
    too small to need h5committest
2003-08-15 09:45:02 -05:00
Bill Wendling
ad13ea65ab [svn-r7367] Purpose:
Update

Description:
    Added an extra flag to the clear functions that triggers a "destroy"
    of the object being cleared if necessary. This is a fix for the
    FPHDF5 stuff which had an object sticking around after it was
    cleared. (In FPHDF5, some processes are in charge of destroying the
    object, but all processes might actually allocate the object.)

Platforms tested:
    AIX (Copper: Fortran & C++)
    Linux (Verbena: Fortran & C++)
    IRIX (Modi4: Parallel & Fortran)
    (Sol is down)

Misc. update:
2003-08-14 19:30:21 -05:00
Quincey Koziol
1186c0b7fa [svn-r7297] Purpose:
Code cleanup

Description:
    Changed lines like:
        H5E_clear(H5E_get_my_stack());

    to:
        H5E_clear(NULL);

    which performs the same operation.

Platforms tested:
    h5committested
2003-08-08 13:47:43 -05:00
Raymond Lu
0d22a663df [svn-r7265] *** empty log message *** 2003-07-25 21:55:47 -05:00
Quincey Koziol
2c92c3ca18 [svn-r7210] Purpose:
Refactoring code

Description:
    Refactored "IS_H5FD_MPIO || IS_H5FD_MPIPOSIX || IS_H5FD_FPHDF5" combination
of macros in many places into single IS_H5FD_MPI macro, which has the same
definition, but should be easier to maintain.

Platforms tested:
    FreeBSD 4.8 (sleipnir)
    h5committest
2003-07-11 13:01:05 -05:00
Quincey Koziol
70d40b297e [svn-r7205] Purpose:
Code cleanup

Description:
    Further code cleanups suggested by lint tool.

Platforms tested:
    FreeBSD 4.8 (sleipnir)
    h5committest
2003-07-10 14:48:30 -05:00
Quincey Koziol
839de1e367 [svn-r7189] Purpose:
Code cleanup

Description:
    Break some of the "debugging" routines into their own module, so they
aren't pulled into every executable, which certainly isn't going to use them.

Platforms tested:
    h5committested
2003-07-09 13:00:43 -05:00
Quincey Koziol
b496ac1482 [svn-r6878] Purpose:
Code cleanup

Description:
    Limit the scope on more function prototypes/macros/typedefs.

Platforms tested:
    FreeBSD 4.8 (sleipnir)
    h5committest not necessary.
2003-05-15 14:22:33 -05:00
Quincey Koziol
7d9c86097a [svn-r6843] Purpose:
Code cleanup

Description:
    Clean up warnings exposed by compiling on O2K.  Also, revert some of Bill
and my changes to the H5S_mpi_opt_types_g, etc. and settle them back into their
original location.

Platforms tested:
    h5committested.
2003-05-09 13:18:21 -05:00
Quincey Koziol
c54ea2b978 [svn-r6646] Purpose:
Code cleanup, bug fix & new feature.

Description:
    Moved some "package-scope" information out of the private header file and
into the code module. (code cleanup).

    Fixed a few places where the "destroy but don't flush" code wasn't working
correctly, which mostly affects the FPH5 effort. (bug fix).

    Added the ability to "unprotect" a metadata object and delete it at the
same time. (new feature).


Platforms tested:
    FreeBSD 4.8 (sleipnir) w/C++
    Linux 2.4 (burrwhite) w/FORTRAN
    Solaris 2.7 (arabica) w/FORTRAN
    IRIX64 6.5 (modi4) w/parallel & FORTRAN

    (h5committest not run due to my ongoing difficulties with C++ on burrwhite).
2003-04-13 23:21:18 -05:00
Quincey Koziol
a52914987e [svn-r6497] Purpose:
Finish code cleanup

Description:
    Wrap up the conversion of H5F_flush's multiple boolean flags into a single
bitfield of flags by pushing the flags down into the H5AC_flush and
H5F_istore_flush routines.
    Also, changed the flags from H5_FLUSH_<foo> to H5F_FLUSH_<foo> to be more
consistent with rest of library.
    And reverted the changes to H5FDflush and H5FD_flush routines.

Platforms tested:
    FreeBSD 4.7 (sleipnir)
    Solaris 5.8 (sol)
    IRIX64 6.5 (modi4) w/parallel

Misc. update:
2003-03-19 13:58:54 -05:00
Bill Wendling
d84e6e525e [svn-r6426] Purpose:
Update
Description:
    Final support addition for FPHDF5. Wherever there was an equivalent
    MPIO or MPIO/POSIX call/check, I placed an FPHDF5 call/check there as
    well, with the appropriate #ifdefs in place.

    The hdf5.h is updated with the H5FDfphdf5.h driver #include.
Platforms tested:
    Linux & Modi4
2003-02-21 09:04:35 -05:00
Quincey Koziol
0475dd9a70 [svn-r6412] Purpose:
Code cleanup

Description:
    Update dependencies and clean up a few warnings.

Platforms tested:
    Linux 2.2 (eirene) w/parallel
2003-02-17 12:11:03 -05:00
Quincey Koziol
fb4be743d3 [svn-r6410] Purpose:
Bug fix.

Description:
    Correct compile errors when configured with --enable-debug=all.

Platforms tested:
    FreeBSD 4.7 (sleipnir) serial & parallel
2003-02-17 09:58:38 -05:00
Quincey Koziol
24d8506dd5 [svn-r6387] Purpose:
Bug Fix

Description:
    Metadata cache in parallel I/O can cause hangs in applications which
    perform independent I/O on chunked datasets, because the metadata cache
    can attempt to flush out dirty metadata from only a single process, instead
    of collectively from all processes.

Solution:
    Pass a dataset transfer property list down from every API function which
    could possibly trigger metadata I/O.

    Then, split the metadata cache into two sets of entries to allow dirty
    metadata to be set aside when a hash table collision occurs during
    independent I/O.

Platforms tested:
    Tested h5committest {arabica (fortran), eirene (fortran, C++)
        modi4 (parallel, fortran)}

    FreeBSD 4.7 (sleipnir) serial & parallel

Misc. update:
    Updated release_docs/RELEASE
2003-02-10 12:26:09 -05:00
Quincey Koziol
f8da76cb9f [svn-r6266] Purpose:
Code cleanup/new feature.

Description:
    Split FUNC_LEAVE into API and non-API specific versions.  This allows a
    solution to compiling this branch with C++, as well as reducing the size
    of the binaries produced.

Platforms tested:
    FreeBSD 4.7 (sleipnir) w/serial, parallel (including MPE) & thread-safe
2003-01-10 15:26:02 -05:00
Quincey Koziol
9a433b99a5 [svn-r6252] Purpose:
Lots of performance improvements & a couple new internal API interfaces.

Description:
    Performance Improvements:
        - Cached file offset & length sizes in shared file struct, to avoid
            constantly looking them up in the FCPL.
        - Generic property improvements:
            - Added "revision" number to generic property classes to speed
                up comparisons.
            - Changed method of storing properties from using a hash-table
                to the TBBT routines in the library.
            - Share the propery names between classes and the lists derived
                from them.
            - Removed redundant 'def_value' buffer from each property.
            - Switching code to use a "copy on write" strategy for
                properties in each list, where the properties in each list
                are shared with the properties in the class, until a
                property's value is changed in a list.
        - Fixed error in layout code which was allocating too many buffers.
        - Redefined public macros of the form (H5open()/H5check, <variable>)
            internally to only be (<variable>), avoiding innumerable useless
            calls to H5open() and H5check_version().
        - Reuse already zeroed buffers in H5F_contig_fill instead of
            constantly re-zeroing them.
        - Don't write fill values if writing entire dataset.
        - Use gettimeofday() system call instead of time() system when
            checking the modification time of a dataset.
        - Added reference counted string API and use it for tracking the
            names of objects opening in a file (for the ID->name code).
        - Removed redundant H5P_get() calls in B-tree routines.
        - Redefine H5T datatype macros internally to the library, to avoid
            calling H5check redundantly.
        - Keep dataspace information for dataset locally instead of reading
            from disk each time.  Added new module to track open objects
            in a file, to allow this (which will be useful eventually for
            some FPH5 metadata caching issues).
        - Remove H5AC_find macro which was inlining metadata cache lookups,
            and call function instead.
        - Remove redundant memset() calls from H5G_namei() routine.
        - Remove redundant checking of object type when locating objects
            in metadata cache and rely on the address only.
        - Create default dataset object to use when default dataset creation
            property list is used to create datasets, bypassing querying
            for all the property list values.
        - Use default I/O vector size when performing raw data with the
            default dataset transfer property list, instead of querying for
            I/O vector size.
        - Remove H5P_DEFAULT internally to the library, replacing it with
            more specific default property list based on the type of
            property list needed.
        - Remove redundant memset() calls in object header message (H5O*)
            routines.
        - Remove redunant memset() calls in data I/O routines.
        - Split free-list allocation routines into malloc() and calloc()-
            like routines, instead of one combined routine.
        - Remove lots of indirection in H5O*() routines.
        - Simplify metadata cache entry comparison routine (used when
            flushing entire cache out).
        - Only enable metadata cache statistics when H5AC_DEBUG is turned
            on, instead of always tracking them.
        - Simplify address comparison macro (H5F_addr_eq).
        - Remove redundant metadata cache entry protections during dataset
            creation by protecting the object header once and making all
            the modifications necessary for the dataset creation before
            unprotecting it.
        - Reduce # of "number of element in extent" computations performed
            by computing and storing the value during dataspace creation.
        - Simplify checking for group location's file information, when file
            has not been involving in file-mounting operations.
        - Use binary encoding for modification time, instead of ASCII.
        - Hoist H5HL_peek calls (to get information in a local heap)
            out of loops in many group routine.
        - Use static variable for iterators of selections, instead of
            dynamically allocation them each time.
        - Lookup & insert new entries in one step, avoiding traversing
            group's B-tree twice.
        - Fixed memory leak in H5Gget_objname_idx() routine (tangential to
            performance improvements, but fixed along the way).
        - Use free-list for reference counted strings.
        - Don't bother copying object names into cached group entries,
            since they are re-created when an object is opened.

        The benchmark I used to measure these results created several thousand
        small (2K) datasets in a file and wrote out the data for them.  This is
        Elena's "regular.c" benchmark.

        These changes resulted in approximately ~4.3x speedup of the
        development branch when compared to the previous code in the
        development branch and ~1.4x speedup compared to the release
        branch.

        Additionally, these changes reduce the total memory used (code and
        data) by the development branch by ~800KB, bringing the development
        branch back into the same ballpark as the release branch.

        I'll send out a more detailed description of the benchmark results
        as a followup note.

    New internal API routines:
        Added "reference counted strings" API for tracking strings that get
            used by multiple owners without duplicating the strings.
        Added "ternary search tree" API for text->object mappings.

Platforms tested:
    Tested h5committest {arabica (fortran), eirene (fortran, C++)
	modi4 (parallel, fortran)}
    Other platforms/configurations tested?
        FreeBSD 4.7 (sleipnir) serial & parallel
        Solaris 2.6 (baldric) serial
2003-01-09 12:20:03 -05:00
Quincey Koziol
8f7425d2a2 [svn-r5867] Purpose:
Code cleanup

Description:
    Changed the last HRETURN* statements in the FUNC_ENTER macros into HGOTO*
    macros, which reduces the size of the library binary in certain
    configurations by another 10%

Platforms tested:
    FreeBSD 4.6 (sleipnir) serial & parallel, IRIX64 6.5 (modi4) serial &
    parallel
2002-08-09 15:48:23 -05:00
Quincey Koziol
d8397a6f42 [svn-r5842] Purpose:
Code cleanup

Description:
    Change most (all?) HRETURN_ERROR macros to HGOTO_ERROR macros, along with
    HRETURN macros to HGOTO_DONE macros.  This unifies the error return path
    from functions and reduces the size of the library by up to 10% on some
    platforms.

    Additionally, I improved a lot of the error cleanup code in many routines.

Platforms tested:
    FreeBSD 4.6 (sleipnir) serial & parallel and IRIX64 6.5 (modi4) serial &
    parallel.
2002-08-08 11:52:55 -05:00
Quincey Koziol
5588db111c [svn-r5840] Purpose:
Code cleanup

Description:
    Created a new H5I function which combined the some of the functionality of
    H5I_get_type and H5I_object: H5I_object_verify.

    Using this new function in the library trims another ~200 lines of code off
    the library and makes the resulting binaries smaller and faster also.

Platforms tested:
    FreeBSD 4.6 (sleipnir)
2002-07-31 14:17:12 -05:00
Quincey Koziol
009da0a6eb [svn-r5819] Purpose:
Bug Fix

Description:
    non-parallel case for new metadata cache flushing property wasn't set up
    correctly.

Solution:
    Initialize variables correctly.

Platforms tested:
    FreeBSD 4.6 (sleipnir)
2002-07-21 17:21:06 -05:00
Quincey Koziol
99eee6dff9 [svn-r5814] Purpose:
Bug Fix

Description:
    It was possible to create corrupted metadata information (either in memory
    or in the file or both) with a parallel I/O program because of the way
    metadata writes were being handled for writes out of the metadata cache.

Solution:
    Added a dataset transfer property called "block before metadata write"
    which is used by the MPI-I/O and MPI-posix drivers to sync up all the
    processes before attempting a metadata write.  This property is currently
    only for metadata writes from the metadata cache.

Platforms tested:
    IRIX64 6.5 (modi4) w/parallel
2002-07-19 14:27:09 -05:00
Quincey Koziol
e69e970a1c [svn-r5471] Purpose:
Code cleanup

Description:
    Broke the FUNC_ENTER macro into several macros, with more specialized
    uses (which followup mail will describe).  This was designed to move
    most/all of the checks which could be done at compile time to that point,
    instead of needlessly performing them (over & over :-) at run-time.
    This reduces the library's size (and thus staticly linked binaries) and
    has a minor speedup effect also.

Platforms tested:
    IRIX64 6.5 (modi4) with parallel & FORTRAN enabled, and additional testing
    on FreeBSD and Solaris immediately after the checkin.
2002-05-29 10:07:55 -05:00
Quincey Koziol
ca912c389e [svn-r5467] Purpose:
Code cleanup.

Description:
    Took Robb's recent ideas for improving the FUNC_ENTER/FUNC_LEAVE macros
    equivalents in the SAF library and adapted them to our library.  I added
    an additional macro which is equivalent to FUNC_ENTER:
        FUNC_ENTER_NOINIT - Has the API tracing code, etc. from FUNC_ENTER but
            none of the library or interface initialization code.  This is to
            be used _only_ for static functions and those which explicitly
            cannot have the library or interface initialization code enabled
            (like the API termination routines, etc.).

    This allowed many more of the functions in the library [but not all yet :-(]
    to be wrapped with FUNC_ENTER[_NOINIT]/FUNC_LEAVE pairs.

    It also reduced the size of the library and executables (by cutting out a
    bunch of code which was never executed), I'll e-mail the exact results when
    I've finished editing it.

Platforms tested:
    IRIX64 6.5 (modi4)
2002-05-28 13:17:12 -05:00