[WIP] Parallel HDF5: 4MB Alignment & Buffer#898
Conversation
0063529 to
b42e242
Compare
| VERIFY(status >= 0, "[HDF5] Internal error: Failed to set H5Pset_dxpl_mpio"); | ||
|
|
||
| auto const strByte = auxiliary::getEnvString( "OPENPMD_HDF5_ALIGNMENT", "1" ); | ||
| auto const strByte = auxiliary::getEnvString( "OPENPMD_HDF5_ALIGNMENT", "4194304" ); |
There was a problem hiding this comment.
Sample & bin directory du -hs with:
OPENPMD_HDF5_ALIGNMENT |
size |
|---|---|
| 1 | 7.8M + 1.4G |
| 4194304 | 7.8M + 1.4G |
on my laptop (4KiB blocksize).
ls output (less reliable) also ok for parallel files (not padded to multiples of 4MiB). So either this is cleverly compacted or has no influence...
| double policy = 0.0; | ||
| status = H5Pget_cache(m_fileAccessProperty, &metaCacheElements, &rawCacheElements, &rawCacheSize, &policy); | ||
| VERIFY(status >= 0, "[HDF5] Internal error: Failed to set H5Pget_cache"); | ||
| rawCacheSize = bytes * 4; // default: 1 MiB per dataset |
There was a problem hiding this comment.
should be guarded so we don't accidentally set 1Byte cache if a user provides 1
|
We can run these tests again after #916 was merged, maybe we see some improvement when setting striping with chunked data sets |
FS blocksize: ``` stat -fc %s . ```
This comment has been minimized.
This comment has been minimized.
e7c4377 to
9163165
Compare
docs/source/backends/hdf5.rst
Outdated
| ===================================== ========= ==================================================================================== | ||
| ``OPENPMD_HDF5_INDEPENDENT`` ``ON`` Sets the MPI-parallel transfer mode to collective (``OFF``) or independent (``ON``). | ||
| ``OPENPMD_HDF5_ALIGNMENT`` ``1`` Tuning parameter for parallel I/O, choose an alignment which is a multiple of the disk block size. | ||
| ``OPENPMD_HDF5_ALIGNMENT`` ``ABC`` Tuning parameter for parallel I/O, choose an alignment which is a multiple of the disk block size. |
9163165 to
a34d531
Compare
a34d531 to
617c465
Compare
|
Next measurements we should try on Cori (Suren Byna): Option 1
Just in case, here’s the command to set the stripe on a directory. lfs setstripe --stripe_count 40 --stripe_size 8m ./benchmarksOption 2
Jan/Feb testsWe tried various sizes in Jan/February with the job script linked above in the PR description. We saw no improvement on Cori at the time. Since then, we implementing chunking #406 and changed the benchmark from then from 4D to 3D: #1010 |
| // align all (no threshold) if only alignment is set | ||
| if( m_alignment > 1 && m_threshold == 1 ) | ||
| m_threshold = 0; |
There was a problem hiding this comment.
This needs to be moved behind the whole if( config.contains( "hdf5" ) ) block, otherwise the env var OPENPMD_HDF5_ALIGNMENT will not imply m_threshold = 0 for values >1
FS blocksize:
Tried those options on Cori (Scratch and CFS): 8_benchmark case with
-w, KNL partition, WarpX-like MPI-rank placement.modules: ...
darshan/3.1.7gcc/8.3.0cray-mpich/7.7.10cray-hdf5-parallel/1.10.5.2...Scratch: 1MB recommended blocksize (confusingly,
stat -fc %s <dir>reports 4KiB)CFS: 16 MB blocksize (with 4MiB subblocks)
Support quote:
Sets medium striping.
Note: for proper ADIOS2 timings, keep the small default striping (it creates subfiles that should not be heavily striped); for proper HDF5 timings, enable striping (single output file that should be heavily striped).
For HDF5, we can also try T3PIO
MPI_Infohints again.cori.sbatch.txt
Cori: Darshan Logs