Dear all,
I am testing pvfs-2.1.6 and suse-10.2 (smp kernel 2.6.18, gcc-4.1.2, glibc-2.5)
on a single host as well as a 2 data servers configuration. The test
platform is the Xeon 5160 bi-processor dual core node. All the build,
config and some simple tests (with pvfs2-ping, pvfs2-cp, ...) work fine.
Even a MPI program using MPI-IO (with mpich2-1.0.5) ran correctly!
However, when I try to do simple read/write with the attached Fortran
program on the pvfs2 mounted volume, I start to have problems. More
specifically, when the program is compiled with the Intel Fortran-9.1,
it crashes when an array *larger than 16 MB* is read (although a previous
"write" has passed) with the following kernel message
...
Jan 4 08:50:04 a1 kernel: pvfs2_bufmap_copy_to_user_iovec: failed allocating
memory
Jan 4 08:50:04 a1 kernel:
/usr/local/src/pvfs2/pvfs-2.6.1/src/kernel/linux-2.6/file.c line 278:
pvfs2_file_read: Failed to copy-out buffers. Please make sure that the
pvfs2-client is running (-12)
...
While when compiled with gfortran, it crashes already on the "write"!
...
Jan 4 08:50:51 a1 kernel: pvfs2_bufmap_copy_iovec_from_user: failed allocating
memory
Jan 4 08:50:51 a1 kernel:
/usr/local/src/pvfs2/pvfs-2.6.1/src/kernel/linux-2.6/file.c line 220: Failed to
copy-in buffers. Please make sure that the pvfs2-client is running. -12
...
Additional infos:
- The same problems occur on suse-10.1 (smp kernel 2.6.16, gcc-4.1.0,
glibc-2.4)
- pvfs2-1.5.1 has no such problems on suse-10.1; however this version has
build problem on suse-10.2, due to the kernel version :-(
Thanks for any help!
-Minh.
program main
implicit none
real, dimension(:), allocatable :: array
real :: x0, x1
integer :: size, n, i, nits
!
write(*,*) 'Enter size of record (MB) and nits'
read(*,*) size, nits
n=size*1024*1024/4
!
allocate(array(n))
open(99, file='test.out', form='unformatted')
do i=1,nits
array(1:n)=i
write(99) array(1:n)
end do
close(99)
print*, 'writing ok!'
!
open(99, file='test.out', form='unformatted')
do i=1,nits
read(99) array(1:n)
x0=minval(array(1:n))
x1=maxval(array(1:n))
if ( x0 .ne. real(i) .and. x1 .ne. real(i) ) then
print*, 'error in reading, x0, x1', x0, x1
else
print*, 'reading record', i, ' OK!'
end if
end do
close(99)
end program main
_______________________________________________
Pvfs2-users mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-users