[MPICH2-dev] question about romio lock functions
Ryzhykh, Alexey
alexey.ryzhykh at intel.com
Thu Sep 8 03:47:19 CDT 2005
Hi,
I am working at Intel Parallel System & Applications group.
We have a problem with benchmarks for MPI I/O functions for data write
functions MPI_File_write_* when zero length buffer is passed to them.
We see a very long delay in fcnt() function, sometimes it takes several
hours. We used mpich2-1.02 built for ch3:sock. The delay appears
because of following call of fcnt() in ADIO_Set_lock:
int ADIOI_Set_lock(FDTYPE fd, int cmd, int type, ADIO_Offset offset, int
whence,
ADIO_Offset len)
{
int err, error_code;
struct flock lock;
/* Depending on the compiler flags and options, struct flock
may not be defined with types that are the same size as
ADIO_Offsets. */
/* FIXME: This is a temporary hack until we use flock64 where
available. It also doesn't fix the broken Solaris header sys/types.h
header file, which declars off_t as a UNION ! Configure tests to
see if the off64_t is a union if large file support is requested;
if so, it does not select large file support.
*/
#ifdef NEEDS_INT_CAST_WITH_FLOCK
lock.l_type = type;
lock.l_start = (int)offset;
lock.l_whence = whence;
lock.l_len = (int)len;
#else
lock.l_type = type;
lock.l_whence = whence;
lock.l_start = offset;
lock.l_len = len;
#endif
do {
err = fcntl(fd, cmd, &lock);
} while (err && (errno == EINTR));
.........................
When zero length buffer is passed to MPI_File_write_*() the field
lock.l_len is assigned to zero as well.
In this case the whole file is locked but there is no reason to do that.
Linux man says:
"Specifying 0 for l_len has the special meaning: lock all bytes starting
at the location
specified by l_whence and l_start through to the end of file, no matter
how large the file
grows."
May be there is a reason to add the check of zero len at the beginning
of ADIOI_Set_lock like below:
if( len == 0) return MPI_SUCCESS;
In this case the observed delay is not happened.
I went through mpich2-1.02 romio sources and did not find explicit call
of ADIOI_Set_lock with zero length.
So I assume there are no hindrances to add the check of zero length.
What do you think about this idea?
With best regards,
--
Alexey Ryzhykh
Intel Sarov,
Russia
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.mcs.anl.gov/mailman/private/mpich2-dev/attachments/20050908/930ace9e/attachment.htm>
More information about the mpich2-dev
mailing list