Numbers, API names, feature defaults and PR references checked against CONFORMANCE.md, BENCHMARKS.md, CHANGELOG.md, the code and git history. - int8 index figures (1.74x memory, 1.63x QPS) carry the dates git gives them (2026-09-19/20, machine not recorded, not re-run) instead of none; the Pi 5 1.18x carries 2026-09-21. - BENCHMARKS headline: the libhdf5 chunked-write figure is the newest measurement (35x, 2026-09-23), not 45.3x (2026-08-03). - Conformance counts follow the 2026-09-28 run (1 our-error, 2 ref-bug) in conformance/README.md, ROADMAP.md and CLAUDE.md, with a pointer to the bad_nbit_parms_walk.h5 flip. - README: LZ4 is opt-in; the browser refuses reference/opaque/bitfield/ time datasets too; zlib-rs byte-identity scoped to what was measured; macOS default links the system libz for inflate. - Crate READMEs: system-zlib-decompress does something (macOS), SweepDetector lives in prefetch, checkpoint after more than 500 WAL entries, NetCDF-4 unlimited-dimension size warning. - agent-memory.md: string-dataset compression threshold, agents-md prints Markdown, float16 file sizes linked to their study. - known-issues.md: contiguous selection reads, 1.21x vs h5py threads. - docs/README.md, USE_CASES.md, ROADMAP.md, CLAUDE.md: range-read milestones M0-M5 and PRs #17-#19, missing README rows, CLI keygen/verify, dated figures, fast-math is not BLAS. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2.6 KiB
clawhdf5-io
I/O building blocks under clawhdf5: the
HDF5Read/HDF5ReadWrite traits with in-memory, borrowed, file and
memory-mapped readers, plus several experimental modules (async reads, an
HSDS client, a VOL-style trait, sub-filing, prefetch, and an MPI connector).
The facade uses it for memory-mapped reads (MmapReader, and the private
copy-on-write mapping that applies a metadata cache image).
Remote files are not read through this crate: HTTP(S) and object
stores go through clawhdf5_format::storage::Storage and
clawhdf5-remote.
Not on crates.io yet; depend on it from git:
[dependencies]
clawhdf5-io = { git = "https://git.redclaw.dev/quantumclaw/clawhdf5", features = ["mmap"] }
Main items
| Item | What |
|---|---|
HDF5Read, HDF5ReadWrite |
byte-level read/write traits; MemoryReader, BorrowedReader, FileReader, FileWriter implement them |
MmapReader, MmapReadWrite (mmap) |
memory-mapped files through memmap2; HDF5Read::private_copy gives a copy-on-write view |
prefetch::PrefetchReader, prefetch::SweepDetector, sweep |
read-ahead (madvise(MADV_WILLNEED) on mappings) and chunk-sweep prediction |
ParallelConfig |
lane partitioning for parallel chunk decoding |
vol::VirtualObjectLayer, vol::NativeVol |
a backend-agnostic object-layer trait (modelled on libhdf5's VOL) |
async_read (async) |
tokio-based AsyncHDF5Read and AsyncHDF5File |
hsds::HsdsClient (hsds) |
a REST client for an HSDS server |
subfiling |
splitting one logical file across several physical files |
mpi_vol::MpiVol (mpi-io) |
an MPI connector: see below |
MPI (mpi-io)
MpiVol is not collective MPI-IO. Reads are root-read + broadcast
(rank 0 reads the file with std::fs::read, parses the dataset and
broadcasts the bytes); writes gather every rank's shard to rank 0, which
writes the merged dataset. It does not call MPI_File_read_at_all or any
other MPI-IO routine. Collective I/O is on the roadmap.
clawhdf5-bench's mpi_io_bench binary exercises it.
Features
| Feature | Default | What | Builds C |
|---|---|---|---|
mmap |
no (the clawhdf5 facade turns it on) |
MmapReader, MmapReadWrite |
no |
async |
no | async_read (tokio) |
no |
hsds |
no | hsds (reqwest, and async) |
yes: reqwest's default TLS is native-tls (OpenSSL on Linux) |
mpi-io |
no | a real MpiVol (without it MpiVol::new_world returns an error) |
yes: mpi-sys needs an MPI installation and libclang |
License
MIT