<br><font size=2 face="sans-serif">Rob,</font>
<br>
<br><font size=2 face="sans-serif">This patch can be applied to the git
repository on the wiki if you would like to begin using the fix now. It
is also in our internal BGP Release 2 repository, and it will be part of
that release.</font>
<br>
<br><font size=2 face="sans-serif">Thanks,</font>
<br><font size=2 face="sans-serif">Joe Ratterman</font>
<br><font size=2 face="sans-serif">jratt@us.ibm.com</font>
<br>
<br>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>Rob Ross <rross@mcs.anl.gov></b>
</font>
<br><font size=1 face="sans-serif">Sent by: dcmf-bounces@lists.anl-external.org</font>
<p><font size=1 face="sans-serif">02/08/08 01:02 PM</font>
<td width=59%>
<table width=100%>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">To</font></div>
<td><font size=1 face="sans-serif">Bob Cernohous/Rochester/IBM@IBMUS</font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td><font size=1 face="sans-serif">DCMF <dcmf@lists.anl-external.org></font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">Subject</font></div>
<td><font size=1 face="sans-serif">Re: [dcmf] [PATCH 1/1] Issue 4362: Honor
the romio_ds_write and romio_ds_read
hints.</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><tt><font size=2>Thanks Bob!<br>
<br>
I'm still catching up, so I have some possibly stupid questions.<br>
- When you make a change such as the one below, how/when does it <br>
appear on our BG/P?<br>
- How do we know that the patch is present (other than checking new <br>
behavior)?<br>
<br>
To make things operate correctly on PVFS without the user needing to <br>
specify a hint, we would like to use the results of statfs() at open <br>
time to detect the PVFS volume. I think perhaps the minimum impact <br>
change would be to set romio_ds_write to disable at open time when a <br>
PVFS file system is detected. If we created a patch to accomplish <br>
this, would your team be willing to integrate into BG/P releases?<br>
<br>
In the long run, we (ANL) would really like to eliminate all the lock/
<br>
unlock calls in the PVFS case; they're unnecessary tree traffic that <br>
can be avoided. Actually many of the locks aren't needed by GPFS file <br>
systems either, so there's room for optimization on that side as well.
<br>
But that can be a separate discussion.<br>
<br>
Regards,<br>
<br>
Rob<br>
<br>
On Feb 8, 2008, at 12:46 PM, Bob Cernohous wrote:<br>
<br>
> We received this request:<br>
><br>
> The ROMIO implementation used on BG/P performs some optimization using<br>
> data sieving for non-continuous individual I/O. This is done using<br>
> read-modify-write operations that rely on file locking. This fails
for<br>
> PVFS because PVFS is lockless. The easiest solution would to make<br>
> ADIOI_BGL_WriteStrided honor the romio_ds_write hint and fall back
to<br>
> ADIOI_GEN_WriteStrided_naive.<br>
><br>
> We now honor those hints and fall back to the GEN naive write/read
<br>
> routines.<br>
><br>
> It has only been tested in so far as it does run the GEN code when
<br>
> requested.<br>
> We have not tested, and will not attempt to test, PVFS.<br>
><br>
> Signed-off-by: Bob Cernohous <bobc@us.ibm.com><br>
> ---<br>
> .../mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_read.c | 19 +++++++++++
<br>
> +++++++-<br>
> .../src/mpi/romio/adio/ad_bgl/ad_bgl_write.c
| 19 +++++++++++ <br>
> +++++++-<br>
> 2 files changed, 36 insertions(+), 2 deletions(-)<br>
><br>
> diff --git a/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_read.c
<br>
> b/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_read.c<br>
> index a3aeffb..41947c9 100644<br>
> --- a/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_read.c<br>
> +++ b/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_read.c<br>
> @@ -29,10 +29,10 @@ void ADIOI_BGL_ReadContig(ADIO_File fd, void <br>
> *buf, int count,<br>
> int err=-1, datatype_size, len;<br>
> static char myname[] = "ADIOI_BGL_READCONTIG";<br>
><br>
> +#if BGL_PROFILE<br>
>
/* timing */<br>
>
double io_time, io_time2;<br>
><br>
> -#if BGL_PROFILE<br>
>
if (bglmpio_timing) {<br>
>
io_time = MPI_Wtime();<br>
>
bglmpio_prof_cr[ BGLMPIO_CIO_DATA_SIZE ] += len;<br>
> @@ -181,6 +181,23 @@ void ADIOI_BGL_ReadStrided(ADIO_File fd, void
<br>
> *buf, int count,<br>
><br>
> static char myname[] = "ADIOI_BGL_READSTRIDED";<br>
><br>
> + if (fd->hints->ds_read == ADIOI_HINT_DISABLE)
{<br>
> + /* if user has disabled data sieving on reads, use naive<br>
> +
* approach instead.<br>
> +
*/<br>
> + /*FPRINTF(stderr, "ADIOI_GEN_ReadStrided_naive(%d):\n",
<br>
> __LINE__);*/<br>
> + ADIOI_GEN_ReadStrided_naive(fd,<br>
> +
buf,<br>
> +
count,<br>
> +
datatype,<br>
> +
file_ptr_type,<br>
> +
offset,<br>
> +
status,<br>
> +
error_code);<br>
> +
return;<br>
> + }<br>
> + /*FPRINTF(stderr, "%s(%d):\n",myname, __LINE__);*/<br>
> +<br>
> ADIOI_Datatype_iscontig(datatype, &buftype_is_contig);<br>
> ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig);<br>
><br>
> diff --git a/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_write.c
<br>
> b/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_write.c<br>
> index a74d0a9..6fbdb20 100644<br>
> --- a/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_write.c<br>
> +++ b/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_write.c<br>
> @@ -29,10 +29,10 @@ void ADIOI_BGL_WriteContig(ADIO_File fd, void
<br>
> *buf, int count,<br>
> int err=-1, datatype_size, len;<br>
> static char myname[] = "ADIOI_BGL_WRITECONTIG";<br>
><br>
> +#if BGL_PROFILE<br>
>
/* timing */<br>
>
double io_time, io_time2;<br>
><br>
> -#if BGL_PROFILE<br>
>
if (bglmpio_timing) {<br>
>
io_time = MPI_Wtime();<br>
>
bglmpio_prof_cw[ BGLMPIO_CIO_DATA_SIZE ] += len;<br>
> @@ -221,6 +221,23 @@ void ADIOI_BGL_WriteStrided(ADIO_File fd, void
<br>
> *buf, int count,<br>
> int new_bwr_size, new_fwr_size, err_flag=0, info_flag,
<br>
> max_bufsize;<br>
> static char myname[] = "ADIOI_BGL_WRITESTRIDED";<br>
><br>
> + if (fd->hints->ds_write == ADIOI_HINT_DISABLE)
{<br>
> +
/* if user has disabled data sieving on reads, use
naive<br>
> +
* approach instead.<br>
> +
*/<br>
> + /*FPRINTF(stderr, "ADIOI_GEN_WriteStrided_naive(%d):\n",
<br>
> __LINE__);*/<br>
> + ADIOI_GEN_WriteStrided_naive(fd,<br>
> +
buf,<br>
> +
count,<br>
> +
datatype,<br>
> +
file_ptr_type,<br>
> +
offset,<br>
> +
status,<br>
> +
error_code);<br>
> +
return;<br>
> + }<br>
> + /*FPRINTF(stderr, "%s(%d):\n",myname, __LINE__);*/<br>
> +<br>
> ADIOI_Datatype_iscontig(datatype, &buftype_is_contig);<br>
> ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig);<br>
><br>
> -- <br>
> 1.5.3.7<br>
><br>
> _______________________________________________<br>
> dcmf mailing list<br>
> dcmf@lists.anl-external.org<br>
> http://lists.anl-external.org/cgi-bin/mailman/listinfo/dcmf<br>
> http://dcmf.anl-external.org/wiki<br>
><br>
<br>
_______________________________________________<br>
dcmf mailing list<br>
dcmf@lists.anl-external.org<br>
http://lists.anl-external.org/cgi-bin/mailman/listinfo/dcmf<br>
http://dcmf.anl-external.org/wiki<br>
</font></tt>
<br>