<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. &nbsp;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 &lt;rross@mcs.anl.gov&gt;</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 &lt;dcmf@lists.anl-external.org&gt;</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 &nbsp; &nbsp; &nbsp; &nbsp;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 &nbsp;<br>
appear on our BG/P?<br>
- How do we know that the patch is present (other than checking new &nbsp;<br>
behavior)?<br>
<br>
To make things operate correctly on PVFS without the user needing to &nbsp;<br>
specify a hint, we would like to use the results of statfs() at open &nbsp;<br>
time to detect the PVFS volume. I think perhaps the minimum impact &nbsp;<br>
change would be to set romio_ds_write to disable at open time when a &nbsp;<br>
PVFS file system is detected. If we created a patch to accomplish &nbsp;<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 &nbsp;<br>
can be avoided. Actually many of the locks aren't needed by GPFS file &nbsp;<br>
systems either, so there's room for optimization on that side as well.
&nbsp;<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>
&gt; We received this request:<br>
&gt;<br>
&gt; The ROMIO implementation used on BG/P performs some optimization using<br>
&gt; data sieving for non-continuous individual I/O. This is done using<br>
&gt; read-modify-write operations that rely on file locking. This fails
for<br>
&gt; PVFS because PVFS is lockless. The easiest solution would to make<br>
&gt; ADIOI_BGL_WriteStrided honor the romio_ds_write hint and fall back
to<br>
&gt; ADIOI_GEN_WriteStrided_naive.<br>
&gt;<br>
&gt; We now honor those hints and fall back to the GEN naive write/read
&nbsp;<br>
&gt; routines.<br>
&gt;<br>
&gt; It has only been tested in so far as it does run the GEN code when
&nbsp;<br>
&gt; requested.<br>
&gt; We have not tested, and will not attempt to test, PVFS.<br>
&gt;<br>
&gt; Signed-off-by: Bob Cernohous &lt;bobc@us.ibm.com&gt;<br>
&gt; ---<br>
&gt; .../mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_read.c | &nbsp; 19 +++++++++++
<br>
&gt; +++++++-<br>
&gt; .../src/mpi/romio/adio/ad_bgl/ad_bgl_write.c &nbsp; &nbsp; &nbsp;
| &nbsp; 19 +++++++++++ <br>
&gt; +++++++-<br>
&gt; 2 files changed, 36 insertions(+), 2 deletions(-)<br>
&gt;<br>
&gt; diff --git a/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_read.c
&nbsp;<br>
&gt; b/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_read.c<br>
&gt; index a3aeffb..41947c9 100644<br>
&gt; --- a/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_read.c<br>
&gt; +++ b/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_read.c<br>
&gt; @@ -29,10 +29,10 @@ void ADIOI_BGL_ReadContig(ADIO_File fd, void &nbsp;<br>
&gt; *buf, int count,<br>
&gt; &nbsp; &nbsp; int err=-1, datatype_size, len;<br>
&gt; &nbsp; &nbsp; static char myname[] = &quot;ADIOI_BGL_READCONTIG&quot;;<br>
&gt;<br>
&gt; +#if BGL_PROFILE<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
/* timing */<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
double io_time, io_time2;<br>
&gt;<br>
&gt; -#if BGL_PROFILE<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
if (bglmpio_timing) {<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; io_time = MPI_Wtime();<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; bglmpio_prof_cr[ BGLMPIO_CIO_DATA_SIZE ] += len;<br>
&gt; @@ -181,6 +181,23 @@ void ADIOI_BGL_ReadStrided(ADIO_File fd, void
&nbsp;<br>
&gt; *buf, int count,<br>
&gt;<br>
&gt; &nbsp; &nbsp; static char myname[] = &quot;ADIOI_BGL_READSTRIDED&quot;;<br>
&gt;<br>
&gt; + &nbsp; &nbsp;if (fd-&gt;hints-&gt;ds_read == ADIOI_HINT_DISABLE)
{<br>
&gt; + &nbsp;/* if user has disabled data sieving on reads, use naive<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;* approach instead.<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;*/<br>
&gt; + &nbsp; &nbsp; &nbsp;/*FPRINTF(stderr, &quot;ADIOI_GEN_ReadStrided_naive(%d):\n&quot;,
&nbsp;<br>
&gt; __LINE__);*/<br>
&gt; + &nbsp; &nbsp; &nbsp;ADIOI_GEN_ReadStrided_naive(fd,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;buf,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;count,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;datatype,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;file_ptr_type,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;offset,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;status,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;error_code);<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; return;<br>
&gt; + &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp;/*FPRINTF(stderr, &quot;%s(%d):\n&quot;,myname, __LINE__);*/<br>
&gt; +<br>
&gt; &nbsp; &nbsp; ADIOI_Datatype_iscontig(datatype, &amp;buftype_is_contig);<br>
&gt; &nbsp; &nbsp; ADIOI_Datatype_iscontig(fd-&gt;filetype, &amp;filetype_is_contig);<br>
&gt;<br>
&gt; diff --git a/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_write.c
&nbsp;<br>
&gt; b/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_write.c<br>
&gt; index a74d0a9..6fbdb20 100644<br>
&gt; --- a/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_write.c<br>
&gt; +++ b/lib/mpi/mpich2/src/mpi/romio/adio/ad_bgl/ad_bgl_write.c<br>
&gt; @@ -29,10 +29,10 @@ void ADIOI_BGL_WriteContig(ADIO_File fd, void
&nbsp;<br>
&gt; *buf, int count,<br>
&gt; &nbsp; &nbsp; int err=-1, datatype_size, len;<br>
&gt; &nbsp; &nbsp; static char myname[] = &quot;ADIOI_BGL_WRITECONTIG&quot;;<br>
&gt;<br>
&gt; +#if BGL_PROFILE<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
/* timing */<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
double io_time, io_time2;<br>
&gt;<br>
&gt; -#if BGL_PROFILE<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
if (bglmpio_timing) {<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; io_time = MPI_Wtime();<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; bglmpio_prof_cw[ BGLMPIO_CIO_DATA_SIZE ] += len;<br>
&gt; @@ -221,6 +221,23 @@ void ADIOI_BGL_WriteStrided(ADIO_File fd, void
&nbsp;<br>
&gt; *buf, int count,<br>
&gt; &nbsp; &nbsp; int new_bwr_size, new_fwr_size, err_flag=0, info_flag,
&nbsp;<br>
&gt; max_bufsize;<br>
&gt; &nbsp; &nbsp; static char myname[] = &quot;ADIOI_BGL_WRITESTRIDED&quot;;<br>
&gt;<br>
&gt; + &nbsp; &nbsp;if (fd-&gt;hints-&gt;ds_write == ADIOI_HINT_DISABLE)
{<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; /* if user has disabled data sieving on reads, use
naive<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;* approach instead.<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;*/<br>
&gt; + &nbsp; &nbsp; &nbsp;/*FPRINTF(stderr, &quot;ADIOI_GEN_WriteStrided_naive(%d):\n&quot;,
&nbsp;<br>
&gt; __LINE__);*/<br>
&gt; + &nbsp; &nbsp; &nbsp;ADIOI_GEN_WriteStrided_naive(fd,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;buf,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;count,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;datatype,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;file_ptr_type,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;offset,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;status,<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;error_code);<br>
&gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; return;<br>
&gt; + &nbsp; &nbsp;}<br>
&gt; + &nbsp; &nbsp;/*FPRINTF(stderr, &quot;%s(%d):\n&quot;,myname, __LINE__);*/<br>
&gt; +<br>
&gt; &nbsp; &nbsp; ADIOI_Datatype_iscontig(datatype, &amp;buftype_is_contig);<br>
&gt; &nbsp; &nbsp; ADIOI_Datatype_iscontig(fd-&gt;filetype, &amp;filetype_is_contig);<br>
&gt;<br>
&gt; -- <br>
&gt; 1.5.3.7<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; dcmf mailing list<br>
&gt; dcmf@lists.anl-external.org<br>
&gt; http://lists.anl-external.org/cgi-bin/mailman/listinfo/dcmf<br>
&gt; http://dcmf.anl-external.org/wiki<br>
&gt;<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>