Am I misinterpreting the documentation or is this fill behavior buggy?
After enabling chunking of my multi-GB rank-8 array:
I’m finding that when I set the fill time property to H5D_FILL_TIME_IFSET
but do not set a fill value, the number of bytes written is double what is expected. Setting the property instead to H5D_FILL_TIME_NEVER
results in the expected number of Bytes written.
It seems to me the if set condition is not being honored.
This is for parallel collective IO on a Lustre filesystem with:
cray-mpich/8.1.26
cray-hdf5-parallel/1.12.2.3
There was a 2014 thread related to this matter, but I don’t read any clarification for my observation.
Some instrumented observations:
Original (no chunking, no fill property specification):
+--------------------------------------------------------+
| MPIIO write access patterns for simulation_checkpoint_candidate.h5
| ranks in communicator = 64
| independent writes = 281
| collective writes = 5
| independent writers = 64
| aggregators = 8
| stripe count = 8
| stripe size = 140737488294032
| system writes = 26533
| stripe sized writes = 0
| aggregators active = 320,0,0,0 (1, <= 4, > 4, 8)
| total bytes for writes = 27521443760 = 26246 MiB = 25 GiB
| ave system write size = 1037253
| read-modify-write count = 0
| read-modify-write bytes = 0
| number of write gaps = 0
| ave write gap size = NA
+--------------------------------------------------------+
finished step: checkpoint_write Seconds elapsed: 19.207
Resulting actual file size 27521443824 Bytes.
Enabled chunking, no fill property specification (expecting documented default):
+--------------------------------------------------------+
| MPIIO write access patterns for simulation_checkpoint_candidate.h5
| ranks in communicator = 64
| independent writes = 292
| collective writes = 6
| independent writers = 64
| aggregators = 8
| stripe count = 8
| stripe size = 140737488294096
| system writes = 52807
| stripe sized writes = 0
| aggregators active = 384,0,0,0 (1, <= 4, > 4, 8)
| total bytes for writes = 55040335424 = 52490 MiB = 51 GiB
| ave system write size = 1042292
| read-modify-write count = 0
| read-modify-write bytes = 0
| number of write gaps = 0
| ave write gap size = NA
+--------------------------------------------------------+
finished step: checkpoint_write Seconds elapsed: 39.851
Resulting actual file size 27521506904 Bytes.
Added fill time property specification: H5D_FILL_TIME_NEVER
+--------------------------------------------------------+
| MPIIO write access patterns for simulation_checkpoint_candidate.h5
| ranks in communicator = 64
| independent writes = 292
| collective writes = 5
| independent writers = 64
| aggregators = 8
| stripe count = 8
| stripe size = 140737488294016
| system writes = 26553
| stripe sized writes = 0
| aggregators active = 320,0,0,0 (1, <= 4, > 4, 8)
| total bytes for writes = 27521506880 = 26246 MiB = 25 GiB
| ave system write size = 1036474
| read-modify-write count = 0
| read-modify-write bytes = 0
| number of write gaps = 14
| ave write gap size = 40
+--------------------------------------------------------+
EndOnly completed in 20.930 seconds
Resulting actual file size 27521506904 Bytes.
Enabled compression at level 6:
+--------------------------------------------------------+
| MPIIO write access patterns for simulation_checkpoint_candidate.h5
| ranks in communicator = 64
| independent writes = 297
| collective writes = 5
| independent writers = 64
| aggregators = 8
| stripe count = 8
| stripe size = 140737488294016
| system writes = 9995
| stripe sized writes = 0
| aggregators active = 320,0,0,0 (1, <= 4, > 4, 8)
| total bytes for writes = 10163583817 = 9692 MiB = 9 GiB
| ave system write size = 1016866
| read-modify-write count = 0
| read-modify-write bytes = 0
| number of write gaps = 13
| ave write gap size = 40
+--------------------------------------------------------+
finished step: checkpoint_write Seconds elapsed: 14.786
Resulting actual file size 10160651983 Bytes.