Two-phase I/O in parallel HDF5

Hi there,

I am developing a parallel scientific application where each MPI process
writes very small buffers of large datasets on each I/O step. As
expected, the performance is really poor due to the FS lock block issue
(block size is 2MB in our GPFS and buffers 4kb-16kb per MPI process) and
the small sets written per iteration.

Checking the literature I realized about 'two-phase I/O' (a.k.a
collective buffering) (papers: 'Improved parallel I/O via a two-phase
run-time access strategy' and 'Colletive I/O buffering: Improving
parallel I/O performance').

I was wondering if it is possible to use directly these techniques in
HDF5 with MPIO and GPFS. So, the point is that I would like to know if
this I/O strategies are already implemented in HDF5/MPIIO/GPFS layers or
I should have to program that by myself.

Thank you in advance.

Best regards,
Raúl

···

--
  Copyright protects software. Patents protect software monopolies.
          -- NO to software patents (http://swpat.ffii.org)
----------------------------------------------------------------------
  .-.--_
,´,´.´ `. Raúl de la Cruz Martínez E-mail: delacruz@bsc.es

> > BSC | Barcelona Supercomputing Center (BSC) http://www.bsc.es

`.`.`. _ .´ http://people.ac.upc.edu/delacruz Tel: +34 93-405 42 94
  `·`·· C/Gran Capità 2-4, NexusI, Despacho 204. Barcelona, SPAIN
----------------------------------------------------------------------

WARNING / LEGAL TEXT: This message is intended only for the use of the
individual or entity to which it is addressed and may contain
information which is privileged, confidential, proprietary, or exempt
from disclosure under applicable law. If you are not the intended
recipient or the person responsible for delivering the message to the
intended recipient, you are strictly prohibited from disclosing,
distributing, copying, or in any way using this message. If you have
received this communication in error, please notify the sender and
destroy and delete any copies you may have received.

http://www.bsc.es/disclaimer

Hi Raul,

HDF5 uses MPI I/O to do parallel I/O, so underneath the covers you will use two-phase I/O in most cases when you do collective I/O.

All you need to do is set the file access property list to use the MPIO VFD and use it to create the file. And whenever you do raw data I/O (H5Dread/H5Dwrite) you can set the data transfer property list to do collective I/O which should translate to the two-phase I/O algorithm that your MPI library uses.

For more detailed information you can look through these tutorials:
http://www.hdfgroup.org/HDF5/PHDF5/

Thanks,
Mohamad

···

On 7/2/2013 12:05 PM, Raúl de la Cruz wrote:

Hi there,

I am developing a parallel scientific application where each MPI process
writes very small buffers of large datasets on each I/O step. As
expected, the performance is really poor due to the FS lock block issue
(block size is 2MB in our GPFS and buffers 4kb-16kb per MPI process) and
the small sets written per iteration.

Checking the literature I realized about 'two-phase I/O' (a.k.a
collective buffering) (papers: 'Improved parallel I/O via a two-phase
run-time access strategy' and 'Colletive I/O buffering: Improving
parallel I/O performance').

I was wondering if it is possible to use directly these techniques in
HDF5 with MPIO and GPFS. So, the point is that I would like to know if
this I/O strategies are already implemented in HDF5/MPIIO/GPFS layers or
I should have to program that by myself.

Thank you in advance.

Best regards,
Raúl