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

Reply via email to