Commit Graph

172 Commits

Author SHA1 Message Date
Quincey Koziol
74a30fff3e [svn-r13477] Description:
The main purpose of this checkin was to eliminate the
space used for tracking creation time indices when there is no way they
can be used (i.e. attributes can't be shared in the file and the user hasn't
turned on attribute creation tracking), however there were some other minor
changes which crept in:
	- Fix a cache locking deadlock when a shared attribute and one of its
		components end up in the same fractal heap direct block.  
		(This is fixed the "slow" way for right now, until John has time
		to add support for readers/writer locking to the cache.
	- Optimize attribute copying when a copy will be kept during a v2 B-tree
		search.
	- When freeing a block on disk, attempt to merge it with the metadata
		and "small data" aggregators.

Tested on:
	Mac OS X/32 10.4.8 (amazon)
	FreeBSD/32 6.2 (duty)
2007-03-08 15:10:12 -05:00
Quincey Koziol
509b8f645d [svn-r13465] Description:
Fix bug in external links when "strong" file close degree is used.

	Make external link callbacks use standard error reporting mechanisms.

	Other minor code cleanups...

Tested on:
	Mac OS X/32 10.4.8 (amazon)
	FreeBSD/32 6.2 (duty)
2007-03-06 10:06:05 -05:00
Quincey Koziol
2e8b6c0223 [svn-r13440] Description:
Revise latest form of superblock format pretty drastically, to
eliminate unused fields and move rarely used fields into superblock extension.

	Finished removing last vestiges of references to (never used) i"shared"
object header message ID.

	Added object header messages for non-default v1 B-tree 'K' values
and for driver info.

	Updated testfiles to reflect size changes, etc.

	Various minor cleanups, etc.

Tested on:
	FreeBSD/32 6.2 (duty)
	Mac OS X/32 10.4.8 (amazon)
2007-03-01 16:26:31 -05:00
Quincey Koziol
552bb205b9 [svn-r13413] Description:
Further cleanups to superblock code:
		- Move most of the ISOHM-specific code into the H5SM module
		- Make only one checksum, for combined superblock & driver info
			block

	Minor other cleanups, etc.

Tested on:
	Mac OS X/32 10.4.8 (amazon)
	FreeBSD/32 6.2 (duty)
2007-02-27 10:57:04 -05:00
Quincey Koziol
182c05cb95 [svn-r13375] Description:
Straighten out some of the code for handling superblocks, in preparation
for revising the format of the latest version of the superblock before the
beta release.

Tested on:
	Mac OS X/32 10.4.8 (amazon)
	FreeBSD/32 6.2 (duty)
2007-02-21 21:00:40 -05:00
Albert Cheng
ed7d456e51 [svn-r13253] Updated all C and C++ style source code files with the THG copyright notice.
Tested platform:
Kagiso only since it is only a comment block change.  If it works in one
machine, it should work in all, I hope.  Still need to check the parallel
build on copper.
2007-02-07 09:56:24 -05:00
Quincey Koziol
d47a060445 [svn-r13250] Description:
Add support for inserting attributes into creation order index.

	Also, update support for dense link & attribute storage in h5debug.

Tested on:
	FreeBSD/32 6.2 (duty)
	Mac OS X/32 10.4.8 (amazon)
2007-02-06 21:18:17 -05:00
James Laird
9e390cc1d9 [svn-r13245] Added "superblock extension" object header to hold shared object header
information, rather than storing it directly in the superblock.
This should make future updates to the superblock much less painful.

Tested on Windows, kagiso, and smirom.
2007-02-06 13:21:39 -05:00
James Laird
26fc682d8d [svn-r13153] Added checksum to superblock and driver info block (in latest version of
superblock).
Tried to standardize sizes and added #defines to H5Fpkg.h so that hopefully
the code is a little easier to read.
Of course this is a file format change.

Tested on Windows, juniper, smirom, kagiso.
2007-01-18 10:27:14 -05:00
Quincey Koziol
327ea3a766 [svn-r13116] Description:
Add support for deleting all the attributes on an object, when they
are dense and possibly shared.

	Also, add some testing routines, for better error detection.

	Should fix daily test failures also...

Tested on:
	FreeBSD/32 6.1 (duty)
2007-01-06 15:54:19 -05:00
James Laird
e215d22a79 [svn-r12935] Added list-to-btree conversion, changed SOHM apis, and pushed SOHM table
version and size information into the superblock to eliminate a read when
loading it.

This is a file format change, and hopefully the last one (knock on wood).

Tested on kagiso and Windows (mostly just a SOHM change).
2006-11-17 14:39:14 -05:00
James Laird
b6c317f27c [svn-r12902] Checkin of Shared Object Header Message work.
This feature is still in progress; Shared Object Header Messages are not
complete as a feature and are not thoroughly tested.  There are still
"TODO" comments in the code (comments with the word "JAMES" in them,
so as not to be confused with other TODO comments).

Hopefully this checkin will reduce the liklihood of conflicts as I finish
implementing this feature.

All current tests pass on juniper, copper (parallel), heping, kagiso, and mir.
2006-11-13 15:41:36 -05:00
Quincey Koziol
2b635fee4d [svn-r12866] Description:
Clean up initialization of H5F & H5L APIs.

Tested on:
    Linux/64 2.6 (chicago2)
2006-11-06 12:47:02 -05:00
Quincey Koziol
e9ea7e8eaf [svn-r12708] Description:
Add the "use the latest version of the format" support to datatype
messages.  And a regression test to check that it's working.

    Also, found that we have been over-allocating space for compound datatype
messages (when they have array datatypes or can use the latest version of the
format) and trimmed the size back.

    Clean up datatype & dataspace encode/decode routines by having them
allocate & release "fake" file structures, which gets them out of needing to
"know" about the internals of file structures.

    Other minor whitespace/formatting cleanups, etc.

Tested on:
    Linux/32 2.6 (chicago)
    Linux/64 2.6 (chicago2)
2006-10-02 19:54:33 -05:00
Quincey Koziol
a36a5b30d7 [svn-r12705] Description:
Fix file handle destroy routine to not attempt to flush out partially
initialized file handles (when opening a file fails).

Tested on:  (until they finished testing, this time... :-)
    FreeBSD/32 4.11 (sleipnir) w/threadsafe
    Linux/64 2.4 (mir) w/1.6 compat
    Linux/32 2.4 (heping) w/FORTRAN & C++
    Mac OSX/32 10.4.8 (amazon)
2006-10-02 13:32:46 -05:00
Quincey Koziol
5e7ab927c6 [svn-r12656] Description:
Add "use the latest version of the file format" flag to the file access
property list and internal file data structures.

    Fix bug where metadata block size was retrieved instead of the small
data block size.

    Categorize property list routine prototypes in the public header file.

Tested on:
    Mac OS/PPC 10.4 (amazon)
    Linux/32 2.6 (chicago)
    Linux/64 2.6 (chicago2)
2006-09-11 12:30:24 -05:00
Quincey Koziol
a1708eb023 [svn-r11712] Purpose:
New feature

Description:
    Check in baseline for compact group revisions, which radically revises the
source code for managing groups and object headers.

WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!
WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!

    This initiates the "unstable" phase of the 1.7.x branch, leading up
to the 1.8.0 release.  Please test this code, but do _NOT_ keep files created
with it - the format will change again before the release and you will not
be able to read your old files!!!

WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!
WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!


Solution:
    There's too many changes to really describe them all, but some of them
include:
    - Stop abusing the H5G_entry_t structure and split it into two separate
        structures for non-symbol table node use within the library: H5O_loc_t
        for object locations in a file and H5G_name_t to store the path to
        an opened object.  H5G_entry_t is now only used for storing symbol
        table entries on disk.

    - Retire H5G_namei() in favor of a more general mechanism for traversing
        group paths and issuing callbacks on objects located.  This gets us out
        of the business of hacking H5G_namei() for new features, generally.

    - Revised H5O* routines to take a H5O_loc_t instead of H5G_entry_t

    - Lots more...

Platforms tested:
    h5committested and maybe another dozen configurations.... :-)
2005-11-14 21:55:39 -05:00
Quincey Koziol
e21f821fc3 [svn-r11490] Purpose:
Bug fix

Description:
    Fix "double root open" bug and apply same fix to datasets & named datatypes.

    Also fix bug in symbol table entry lookup code that would "transfer" an
object from one file handle to another file handle when the two file handles
were opened on the same actual file.

Platforms tested:
    FreeBSD 4.11 (sleipnir)
    Too minor to require h5committest
2005-10-03 00:50:05 -05:00
Quincey Koziol
6b45f5172c [svn-r11245] Purpose:
Code cleanup

Description:
    Trim trailing whitespace, which is making 'diff'ing the two branches
difficult.

Solution:
    Ran this script in each directory:

foreach f (*.[ch] *.cpp)
    sed 's/[[:blank:]]*$//' $f > sed.out && mv sed.out $f
end


Platforms tested:
    FreeBSD 4.11 (sleipnir)
    Too minor to require h5committest
2005-08-13 15:53:35 -05:00
Quincey Koziol
502b4c206d [svn-r11215] Purpose:
Bug fix & code cleanup

Description:
    Fix another bug in the file mounting code and refactor the unmount
code that it is simpler.

Platforms tested:
    FreeBSD 4.11 (sleipnir)
    Linux 2.4
    Too minor to require h5committest
2005-08-08 13:41:35 -05:00
Quincey Koziol
bb31e94a92 [svn-r11093] Purpose:
Bug fix

Description:
    Rewrite code for mounting files to clean up layers of kludges and implement
a much cleaner and more maintainable design.

Platforms tested:
    FreeBSD 4.11 (sleipnir)
    Linux 2.4
2005-07-21 09:48:26 -05:00
Quincey Koziol
12d84d4b12 [svn-r11022] Purpose:
Bug fix & code cleanup

Description:
    Don't unmount child files from a parent file if the parent file is
being held open by an object.

    Also, moved the mounting routines into their own source file and the
superblock routines into their own file also.

Solution:
    Moved the code for unmounting child files down in the H5F_close routine
and also add checks to the file and group mounting code to unmount child
files when the last object holding open a file closes.

Platforms tested:
    FreeBSD 4.11 (sleipnir)
    h5committest
2005-07-05 16:58:50 -05:00
Raymond Lu
071be8ef3b [svn-r10971] Purpose: Bug fix
Description: See details from Bug #213.  Family member file size wasn't saved
anywhere in file.  When family file is opened, the first member size determine
the member size.

Solution:  Hopefully, this is the last step of checkin for this stage.  This step
mainly enables h5repart tool to be able to convert file driver from family to
sec2.  Because the library saves family information in file, in trying to convert
to sec2 driver, the library simply change the address of driver information to
undefined so that the driver information block can be ignored.  This step also
updates the reference manual of H5Pset_fapl_family() and h5repart.

In the fifth step of checkin, backward compatibility with v1.6
is tested.  A family file created was created with the v1.6 library and opened
with this version of the library.

In the fourth step of checkin, a test suit is added for h5repart,
including a program to generate the test files, a script file to run h5repart,
and a program to verify repartitioned files can be opened by the library.

There's a change from the first step of checkin.  Family name template is no
longer saved in the superblock because different pathname can make the name
different.

In the third step of checkin, h5repart has been modified.  If h5repart is used
to change the size of family member file, the new size(actual member size) is saved
in the superblock.

In the second step of checkin, multi driver is checked against the driver
name saved in superblock.  Wrong driver will result in a failure with an error message
indicating
multi driver should be used.  This change includes split driver because it's a special
case for multi
driver.

In the first step of checkin.  Family member size and name template(unused at this stage) are saved
in file superblock.  When file is reopened,the size passed in thrin superblock.  A different size
will trigger a failure with an error message indicating the right size.  Wrong driver to open family
file will cause a failure, too.


Platforms tested: h5committest and fuss.

Misc. update: doc/html/RM_H5P.html and doc/html/Tools.html
2005-06-22 13:59:48 -05:00
Quincey Koziol
bbe03d7361 [svn-r10736] Purpose:
Code cleanup

Description:
    Clean up some compiler warnings

Platforms tested:
    FreeBSD 4.11 (sleipnir)
    h5committest
2005-05-07 14:37:48 -05:00
John Mainzer
a9ba92287d [svn-r10688] Purpose:
Add API calls allowing user control of the metadata cache.


Description:

Prior to this update, the metadata cache was not configurable
from outside the library.


Solution:

Add API calls allowing the user to configure the metadata cache
either at file open time, or for any open file.  Also added calls
permitting the user to monitor cache size and hit rate.  These
latter facilities are needed for "manual" cache size control


Platforms tested:

h5committested


Misc. update:
2005-04-28 11:40:07 -05:00
Quincey Koziol
7af838b69c [svn-r9354] Purpose:
Bug fix & code cleanup

Description:
    More dataset cleanups to get to a point where we can fix the chunked I/O
bug.

    Also fix a couple of errors in the recent file object resurrection changes
which should hopefully address the recent daily test failres (H5T.c)

Platforms tested:
    FreeBSD 4.10 (sleipnir) w/parallel
    Solaris 2.7 (arabica)
    h5committest
2004-10-01 18:00:42 -05:00
Quincey Koziol
18c505c675 [svn-r8853] Purpose:
Code optimization

Description:
    Refactor B-tree code to extract all common information for a B-tree into a
shared structure that is pointed to by all the nodes in tree (instead of being
included in each node).

    Also re-order B-tree node comparison checks for chunked datasets to
check for >= the upper node first, since the comparison is a bit "heavy" and
this check is more likely to succeed when you are adding records to the
dataset.

Platforms tested:
    Solaris 2.7 (arabica)
    FreeBSD 4.10 (sleipnir) w/parallel
    Too minor to require h5committest
    (also, recent h5dump commits have broken testing...)
2004-07-09 21:28:06 -05:00
Quincey Koziol
fe76fb1b58 [svn-r8844] Purpose:
Bug fix

Description:
    The "shared" raw B-tree node can get freed before all the B-tree nodes
had been flushed out to disk and released by the cache.

Solution:
    Implement a simple reference counting wrapper for objects in the library
and use it to hold the shared raw B-tree nodes so they aren't freed before all
references to them in memory are released.

Platforms tested:
    Solaris 2.7 (arabica)
    FreeBSD 4.10 (sleipnir)
    IRIX64 6.5 (modei4)
2004-07-08 21:06:29 -05:00
Quincey Koziol
585d31b7cb [svn-r8823] Purpose:
Code optimization

Description:
    Since the raw B-tree nodes are the same size and only used when reading in
or writing out a B-tree node, move raw B-tree node buffer from being per node
to a single node that is shared among all B-tree nodes of a particular tree,
freeing up a lot of space and eliminating lots of memory copies, etc.

Platforms tested:
    Solaris 2.7 (arabica)
    FreeBSD 4.10 (sleipnir) w/parallel
    Too minor to require h5committest
2004-07-07 16:23:45 -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
Quincey Koziol
339a81a766 [svn-r8613] Purpose:
Refactor code

Description:
    Move chunk and contiguous cached raw data from file information to dataset
information.  This simplifies a number of internal interfaces, aligns the
code with it's purpose better and should allow more optimizations to the
chunked data I/O performance.

Platforms tested:
    Solaris 2.7 (arabica)
    FreeBSD 4.10 (sleipnir)
    h5committest

Misc. update:
2004-06-05 14:04:49 -05:00
Quincey Koziol
1ec351813b [svn-r8600] Purpose:
Code optimization

Description:
    Don't recompute the internal index value for looking up the chunk in the
hash table, just use the value already computed from iterating through the
chunks.

Platforms tested:
    Solaris 2.7 (arabica)
    FreeBSD 4.9 (sleipnir) w/parallel
2004-05-31 14:59:59 -05:00
Quincey Koziol
d8cfeadd90 [svn-r8158] Purpose:
Code cleanup/optimization

Description:
    Query property list values once, at the beginning of the I/O routines,
instead of querying the property list values multiple (lots!) of times in
lower level routines.

Solution:
    Create "property list caches" for internal library queries of the property
list values.

Platforms tested:
    IBM p690 (copper) w/parallel & fphdf5
    h5committest
2004-02-06 10:34:01 -05:00
Quincey Koziol
138bc92ebd [svn-r8126] Purpose:
Bug fix/optimization

Description:
    Address slowdown in MPI-I/O file metadata operations that was introduced
mid-stream.  We now _require_ a POSIX compliant parallel file system for the
MPI-I/O file driver (as well as for the MPI-POSIX file driver).
    Also optimized file open operation when the file is being created by
reducing the number of collective & syncronizing calls.
    Additionally, refactor the MPI routines into a common place, eliminating
duplicated code.

Platforms tested:
    FreeBSD 4.9 (sleipnir) w/parallel
    h5committest
2004-01-30 20:38:44 -05:00
Quincey Koziol
1619a308cb [svn-r7860] Purpose:
Bug fix

Description:
    Our previous "optimization" of metadata writing which only wrote metadata
from one process was abusing MPI-I/O and after some consultation with Rob Ross
and Rajeev Thakur, Albert & I have come up with a solution...

Solution:
    Instead of only writing from one process, issue a collective write
operation with all processes, for metadata writes.

Platforms tested:
    FreeBSD 4.9 (sleipnir)
    h5committest
2003-11-20 09:36:59 -05:00
Raymond Lu
d1f7c81a46 [svn-r7784] *** empty log message *** 2003-10-29 12:04:58 -05:00
Quincey Koziol
a3888a3b00 [svn-r7426] Purpose:
Bug fix

Description:
    When datasets are deleted from a file, they are removed from the sieve
buffer, but instead of invalidating only the part of the sieve buffer affected,
the sieve buffer code would throw away the entire sieve buffer, potentially
including other raw data in the buffer that hadn't been written to disk yet.

Solution:
    Improve the sieve buffer clearing code to handle partial invalidations.

Platforms tested:
    FreeBSD 4.8 (sleipnir)
    h5committest
2003-08-28 11:02:21 -05:00
Quincey Koziol
9881fa7e34 [svn-r7381] Purpose:
Code cleanup

Description:
    Various cleanups resulting from running lint tool over H5F.c source module

Platforms tested:
    FreeBSD 4.8 (sleipnir)
    too minor to require h5committest
2003-08-18 11:34:27 -05:00
Quincey Koziol
e9cc951e03 [svn-r7232] Purpose:
Bug fix

Description:
    When a non-default indexed storage B-tree internal 'K' value is set by the
user, the chunked datasets created in that file (until it is closed) use the
user's 'K' value and the data can be accessed correctly, but the 'K' value is
not stored in the file.
    However, once the file is closed and re-opened, the non-default 'K' value
is lost and the data in the chunked datasets will not be able to be accessed
correctly.

Solution:
    Store the indexed storage B-tree internal 'K' value in the superblock.

Platforms tested:
    FreeBSD 4.8 (sleipnir)
    h5committest
2003-07-16 09:56:58 -05:00
Quincey Koziol
932101bb80 [svn-r7201] Purpose:
Code cleanup

Description:
    Finish converting the B-tree 'K' values to use unsigned integers, rather
than signed ones, since negative amounts of entries in a B-tree node aren't
meaningful.

Platforms tested:
    FreeBSD 4.8 (sleipnir)
    h5committest
2003-07-10 14:39:04 -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
6028d7f9c9 [svn-r7172] Purpose:
Code cleanup

Description:
    Remove "UNUSED" keyword from function prototypes in header files.

Platforms tested:
    IA64 Linux cluster (titan)
    too small to need commit test
2003-07-07 11:20:43 -05:00
Quincey Koziol
87a5f6480c [svn-r7122] Purpose:
Code cleanup/Feature removal

Description:
    Remove "round robin" writing of metadata in MPI VFDs (and a couple of other
places).  This never really worked the way I hoped it would and it causes
problems on certain machines.

Platforms tested:
    FreeBSD 4.8 (sleipnir) w/parallel
    Too small for triple check.
2003-06-30 10:53:02 -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
43e3b45021 [svn-r6825] Purpose:
New feature/enhancement

Description:
    Chunked datasets are handled poorly in several circumstances involving
certain selections and chunks that are too large for the chunk cache and/or
chunks with filters, causing the chunk to be read from disk multiple times.

Solution:
    Rearrange raw data I/O infrastructure to handle chunked datasets in a much
more friendly way by creating a selection in memory and on disk for each chunk
in a chunked dataset and performing all of the I/O on that chunk at one time.

    There are still some scalability (the current code attempts to
create a selection for all the chunks in the dataset, instead of just the
chunks that are accessed, requiring portions of the istore.c and fillval.c
tests to be commented out) and performance issues, but checking this in will
allow the changes to be tested by a much wider audience while I address the
remaining issues.


Platforms tested:
    h5committested, FreeBSD 4.8 (sleipnir) serial & parallel, Linux 2.4 (eirene)
2003-05-07 16:52:24 -05:00
Bill Wendling
b5d7fa02a9 [svn-r6546] Purpose:
Update

Description:
    Updated copyright statement in files which hadn't been updated yet.

Platforms tested:
    Linux (Only comment change)

Misc. update:
2003-03-31 13:30:57 -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
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
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