Silverfrost Forums

Welcome to our forums

SLow performance with DIRECT ACCESS unformatted files

23 Jan 2015 10:47 #15420

There appears to be a performance issue associated with UNFORMATTED files, either DIRECT or SEQUENTIAL access.

I had noticed that the work files created as DIRECT, UNFORMATTED seemed very slow to create, and slow to access. So, I ran a set of comparisons.

I wrote (and read) a file of 2000 records, of length=194 and timed the loop. The results are as follows:

For Direct Access (using REC= in the write or read)

 Starting the test at: 20150123 151057.900
 For access=direct format=unformatted, Written using REC=, in sequential order, file size=388,000
 writing         2000 records took      44.0332

 Starting the test at: 20150123 152815.356
 For access=direct format=unformatted, Read using REC=, in sequential order
 reading         2000 records took      2.12500

For Sequential access (see notation for use of REC=)

 Starting the test at: 20150123 151600.514
 For access=sequential, format=unformatted, written with no REC= , file size=392,000
 writing         2000 records took      1.76172

 Starting the test at: 20150123 151702.044
 For access=sequential, format=unformatted, records written as REC=, sequentially, file size=388,000
 writing         2000 records took      51.9512

 Starting the test at: 20150123 153330.497
 For access=sequential           format=unformatted, read as sequential records
 reading         2000 records took      1.73828

These data confirm that the act of creating a direct access file is about 25 times slower than sequential unformatted. I noticed that with Sequential/Unformatted, one can specify the REC= in the read or write. When REC= is specified, the creation of the file takes the equivalent amount of time.

It should also be noted that while using REC=, the amount of disk access that occurred was significantly more than for the faster records. I believe that is reflected in the timing data, although the root reason is unknown.

I have not bench-marked a sequential formatted file; my experience is that this is lightning fast.

!FTN95 application...
PROGRAM main
 integer print_every
 integer failed_open,failed_delete,failed_close,failed_write
 character iorecord(194)
 character*8 ddate
 character*10 ttime
 	character*5 zzone
    integer values(8)
    character*20 access,form
! Test program to open a unformatted direct access file, then write several records
! then close it and try again. Each failure to open will be logged along with the error code and date/time
! a 2 second wait will be done, then re-try.
!
! The first time, we'll delete the file, then create as a new, then old from then on
!
 print_every = 0
 failed_open = 0
 failed_delete = 0
 failed_close = 0
 failed_write = 0
 call date_and_time(ddate,ttime,zzone,values)
 print *,'Starting the test at: ',ddate(1:8),' ',ttime(1:10)
 access = 'sequential'
 form = 'unformatted'
 max_recs=2000
 ! the READ tests require that the file exists, so change 'replace' to 'old'
 open(unit=15,file='testfile.dat',access=access,iostat=icode,err=12000,&
 form=form,recl=194,status='old',share='compat')
 start_loop = high_res_clock@(.true.)
 do i=1,max_recs
 call randomfile(iorecord,194) ! this is always left in to even out the loop timing
 !This next line must change to reflect read or write and rec= if needed
 read(15,err=13000)iorecord
 end do
 end_loop = high_res_clock@(.false.)
 print *,'For access=',access,' format=',form
 print *,'writing ',max_recs,' records took ',end_loop-start_loop
  close(unit=15)
  pause
 stop
 13000 continue
 print *,'io error'
 stop
 12000 continue
 print *,'open error',icode
 stop
  
END PROGRAM main
 subroutine randomfile(iorecord,length)
 character*1 iorecord(length)
 do i=1,length
   iorecord=char(int(255.*random@()))
 end do
  return
  end
   
24 Jan 2015 12:17 (Edited: 27 Jan 2015 1:33) #15422

With the files on a ramdisk, on a Windows 8.1 laptop, writing and reading the data file with your test program took less than 0.02 seconds each. Are your files located in a remote file system, perhaps? What is the nature of your hardware, and which version of the compiler did you use?

24 Jan 2015 6:05 #15423

V7.10 system (latest release). HD is 7200 RPM 2 TB, SATA. Not a networked file.

I would expect the RAMDISK to fly on this. As I mentioned in the post, there is a LOT of disk activity while the file is being created DIRECT. It's so slow that I can see it incrementing in 5K chunks every second. Not so for the sequential file. It's running 100K+ per second.

It's the creation time that makes no sense, especially given the access time for the READ operations once it is created is quite snappy.

On my ramdisk, 2000 records took 2 seconds, or .001 seconds/record.

24 Jan 2015 10:47 #15426

Check your record length in the OPEN statement : RECL=, which should only be used for direct access, unformatted, fixed length records. REC= can/should only be used for Direct access unformatted files.

I have never identified a performance issue associated with UNFORMATTED files, either DIRECT or SEQUENTIAL access when used as limited by the standard. Your poor elapsed times being reported are probably due to problems with your incompatible use of OPEN and WRITE and are not as expected.

The combination of Fortran unformatted I/O with Windows 7 or 8 gives very good performance for the testing I have done. The file buffering works very well in FTN95.

John

24 Jan 2015 1:52 (Edited: 27 Jan 2015 1:34) #15428

On an external 7200 RPM hard drive, connected using USB 3.0 to a Windows 8.1 laptop, I get the following results for a data file creation run:

Starting the test at: 20150124 074847.450 For access=direct format=unformatted writing 2000 records took 1.86719

24 Jan 2015 2:00 #15429

John, thanks for the reply.

Pray tell, what is wrong/incompatible with the code of the timing code that I posted? I start by creating the file using the appropriate OPEN (STATUS='REPLACE') and time this operation, then change the OPEN to reflect its now created status (STATUS='OLD'), and change the WRITE to READ. What could be simpler than this?

How about running this as a WRITE test (not on RAMDISK) and get a timing of it, post the results that you get. And include some pertinent info about your system for the comparison.

I get nearly the same results running on my 3.6 GHz Window 7 system as I do on my 1.9 GHz Windows 2000 system. HD's have the same RPM, interfaces are SATA vs. ATA. RAMDISK shows expected performance, except there is no physical disk access, so seek times are not included in the RAMDISK data (other postings from yesterday).

No, something else is going on.

24 Jan 2015 4:05 #15430

Clutching at a straw: Do you have one of these newfangled back-up-to-the-cloud services running?

John's comment about the rule that opening a file for sequential format precludes using a REC= specifier in I/O statements is well founded. This issue is separate from the slowdown that you reported but I have failed to reproduce.

The Fortran 95 standard stipulates as follows:

9.4.1.3 Record number The REC= specifier specifies the number of the record that is to be read or written. This specifier may be present only in an input/output statement that specifies a unit connected for direct access

Therefore, if the file has been opened with ACCESS='sequential', no READ/WRITE statements to that file should contain a REC= specifier. FTN95 does not seem to enforce this rule. I have reported this matter in a separate thread: https://forums.silverfrost.com/Forum/Topic/2649 .

25 Jan 2015 4:11 #15434

If you look at the results, then you will see it performed both ways. I was surprised as well, it shouldn't have worked, but it does.

There is obviously something interfering with the write operation.

That being said, the Windows 2000 system, with absolutely no anti-virus installed, shows similar times to yours, but only if the status is OLD.

If I run the program on the Network on the primary machine, with STATUS=OLD, then I get times like you show. With STATUS='REPLACE' (creating a new file), and timing the WRITE operation (REC= for direct unformatted), I still get in the order of 42 seconds for 2000 records. And, about the same amount of time on the Windows 2000 system.

The access times for an old file are in line with expectations, but not for NEW (aka REPLACE) files.

I also have a NetBook, no antivirus and Windows XP. It's processing power and hard drive are quite slow, but I'm seeing file creation times of 165 seconds there. Also, not expected.

25 Jan 2015 11:44 (Edited: 25 Jan 2015 11:58) #15435

I could not see the 'write' you are referring to ? The following is my adaptation of your test code. I did not get the performance times you claim.

  PROGRAM main 
 character*10 access
 integer*4    max_recs
!
 character*8  ddate 
 character*10 ttime 
 character*5  zzone 
 integer*4    values(8) 
 !
 ! Test program to open a unformatted direct access file, then write several records 
 ! then close it and try again. Each failure to open will be logged along with the error code and date/time 
 ! a 2 second wait will be done, then re-try. 
 ! 
 ! The first time, we'll delete the file, then create as a new, then old from then on 
 ! 
   max_recs      = 2000 
!
   call date_and_time (ddate,ttime,zzone,values) 
   print *,'Starting the test at: ',ddate(1:8),' ',ttime(1:10) 
!
   call delete_file
!
   access        = 'direct' 
   call create_file ( access, 'unformatted', max_recs )
   call read_file   ( access, 'unformatted', max_recs )
!
   access        = 'sequential' 
   call create_file ( access, 'unformatted', max_recs )
   call read_file   ( access, 'unformatted', max_recs )

END PROGRAM main 
 
subroutine create_file ( access, form, max_recs )
 character*(*) access, form 
 integer*4    max_recs
!
 character*1  iorecord(194) 
 logical      use_rec
!
 integer*4    i, icode
 real*8       elapsed_time, start_open, start_loop, end_loop
 external     elapsed_time

   use_rec =  access == 'direct'
 
   print *,'Opening testfile.dat'
   start_open = elapsed_time ()
   if ( use_rec ) then
     open ( unit   = 15,               &
            file   = 'testfile.dat',   &
            form   = form,             &
            access = access,           &
            recl   = 194,              &
            status = 'unknown',        &
            iostat = icode,            &
            err    = 12000,            &
            share  = 'compat')
   else
     open ( unit   = 15,               &
            file   = 'testfile.dat',   &
            form   = form,             &
            access = access,           &
            status = 'unknown',        &
            iostat = icode,            &
            err    = 12000,            &
            share  = 'compat')
   end if
!
   start_loop = elapsed_time ()
   do i = 1,max_recs 
     call randomfile (iorecord,194)
!
     if ( use_rec ) then
       write (15, rec=i, iostat = icode, err=13000) iorecord 
     else
       write (15,        iostat = icode, err=13000) iorecord 
     end if
   end do 
   end_loop = elapsed_time ()
!
   print *,'For access=',access,' format=',form,' took ',start_loop-start_open
   print *,'writing ',max_recs,' records took ',end_loop-start_loop 
   close (unit=15) 
   return

 13000 continue 
   print *,'io error',icode,' in Create_File' 
   call report_iocode (icode)
   stop 

 12000 continue 
   print *,'open error',icode,' in Create_File'
   call report_iocode (icode)
   stop 

END subroutine create_file
25 Jan 2015 11:46 #15436

.ctd

subroutine read_file ( access, form, max_recs )
 character*(*) access, form 
 integer*4    max_recs
!
 character*1  iorecord(194) 
 logical      use_rec
!
 integer*4    i, icode
 real*8       elapsed_time, start_open, start_loop, end_loop
 external     elapsed_time
 
   use_rec =  access == 'direct'
 
   print *,'Opening testfile.dat'
   start_open = elapsed_time ()
   if ( use_rec ) then
     open ( unit   = 15,               &
            file   = 'testfile.dat',   &
            form   = form,             &
            access = access,           &
            recl   = 194,              &
            status = 'old',            &
            iostat = icode,            &
            err    = 12000,            &
            share  = 'compat')
   else
     open ( unit   = 15,               &
            file   = 'testfile.dat',   &
            form   = form,             &
            access = access,           &
            status = 'old',            &
            iostat = icode,            &
            err    = 12000,            &
            share  = 'compat')
   end if
!
   start_loop = elapsed_time ()
   do i = 1,max_recs 
     call randomfile (iorecord,194)
     if ( use_rec ) then
       read (15, rec=i, iostat = icode, err=13000) iorecord 
     else
       read (15,        iostat = icode, err=13000) iorecord 
     end if
   end do 
   end_loop = elapsed_time ()
!
   print *, 'For access=',access,' format=',form,' took ',start_loop-start_open
   print *, 'reading ',max_recs,' records took ',end_loop-start_loop 
   close (unit=15) 
   return

 13000 continue 
   print *,'io error',icode,' in Read_File', ' rec =',i
   call report_iocode (icode)
   stop 

 12000 continue 
   print *,'open error',icode,' in Read_File'
   call report_iocode (icode)
   stop 

END subroutine read_file

subroutine delete_file
!
 integer*4    icode
!
   print *,'Deleting testfile.dat'
   open ( unit   = 15,               &
          file   = 'testfile.dat',   &
          form   = 'unformatted',    &
          access = 'direct',         &
          recl   = 1,                &
          status = 'unknown',        &
          iostat = icode,            &
          share  = 'compat')
   call  report_iocode (icode)
   close (unit=15, status='DELETE', iostat = icode) 
   call  report_iocode (icode)
   return

END subroutine delete_file

subroutine report_iocode (iocode)
  integer*4 iocode
  character message*128

   if ( iocode == 0) return
   call FORTRAN_ERROR_MESSAGE@ (ioCODE,MESSAGE) 
   write (*,*) 'Error :',trim(message)
end subroutine report_iocode

subroutine randomfile (iorecord, length) 
 integer*4   length, i
 character*1 iorecord(length) 
  do i=1,length 
   iorecord=char(int(255.*random@())) 
  end do
end subroutine randomfile

real*8 function elapsed_time ()
 integer*4 COUNT, COUNT_RATE
 
  call system_clock ( COUNT, COUNT_RATE )
  elapsed_time = dble (COUNT) / dble (COUNT_RATE)
end function elapsed_time

Try omitting 'share = 'compat')' as this may not work well on all disk types.

25 Jan 2015 12:14 #15437

Have you tried de-fragmenting the disk? If the file is spread about the disk surface, there will be a lot of time for the read/write heads to respond from a mechanical point of view. Ian

25 Jan 2015 4:40 #15438

Ian, the disk(s) used are regularly defragged. I've now used a total of 4 different drive/partitions on three machines (poor times), one ramdisk (extraordinary times), and two with network connection to different NAS (great times).

I posted this originally because the slow times for one kind of access on a physical drive puzzled me beyond measure. Having people post actual timing or suggest interactions that I have not considered helps me to narrow the issue, which is an apparent incompatibility between the OS, the media, and the code. Hard data, however it is obtained (and documented) is invaluable in determining root cause of an issue.

John made a comment about 'COMPAT' being not applicable for all disk types. This is an interesting observation, because the manual would suggest that this is the most compatible method. I will investigate this further. Is it folder permissions? Is it some additional interaction with the virus software that manifests itself only when accessing the local hard drives?

All of these questions have (I hope) an answer. And it from folks like you and others offering suggestions and hard data that I hope to find what the truth is!

I thank you all for helping! Bill

25 Jan 2015 7:15 #15439

I'm always astonished by radically different hard disk timings, because provided that the file size is less than the disk cache, shouldn't we be measuring the speed of the cache in every case?

Windows is a law unto itself!

25 Jan 2015 9:13 #15440

There's disk cache, and there is disk cache....

Yes, Windows is an animal all to its own.

25 Jan 2015 9:34 (Edited: 26 Jan 2015 12:28) #15441

I have completed another set of benchmarks on my primary machine, mapped drive, using all SHARE= options, and writing and reading in both DIRECT and SEQUENTIAL file structures, and the results are seen below. I separated each SHARE= into its own set.

From these data, it is clear that, while some may not see these results, there is something 'going on' that is getting in the way of the disk I/O when the SHARE is set to either DENYNONE or COMPAT and ACCESS=DIRECT.

That is where I shall place my attention to uncover the answer.

25 Jan 2015 11:12 #15442

Bill, You posted:

There's disk cache, and there is disk cache....

Yes, Windows is an animal all to its own.

My experience of Windows 7 is that the disk cacheing works very well. It is much improved from XP. What sort of animal were you considering ?

My suggestion is that you do not use the 'share=' option at all as depending on your access rights for the disk/directory you are using, it is a problem you don't need to introduce. If you are wanting to do inter-process locking, do it on a small file, not one that has large data transfers.

Another possible explanation for the times observed is when and how often the disk cache is being flushed to the disk. This may explain the case of write delays, as the cache may be flushed after each write. When things are working well, the only flush takes place when the file is closed, although this is not always observed from the results.

I have a disk I/O test program for direct access files, although it typically uses larger blocks. The test sequence is:

  • Open file
  • Write N blocks
  • Read N blocks
  • Write N/10 blocks randomly
  • Read N/10 blocks randomly
  • Close file

I have 3 file access libraries:

  • Standard Fortran
  • My variable block size random access library (based on Fortran with extra buffers)
  • File access library based on FTN95 file manipulation routines (or ifort routines)

I have tested this for a range of N for file sizes of 1k up to 3 x installed memory.

I have found that:

  • Standard Fortran works as well as available system libraries
  • There was a significant improvement in disk cache from XP to Win 7
  • Disk flushing does not always occur on CLOSE !!
  • for medium size files that can fit in the disk cache (say less than 6gb on my 8gb pc) disk cache can be a good substitute for a SSD, although they offer more flexible performance improvements.
  • Cache performance is a function of other activities on the disk.

I have not tested share= alternatives, as the purpose of the tests was to identify ways of improving large data transfers.

I would expect that the problem you are observing is due to other factors and not FTN95 I/O performance.

John

26 Jan 2015 12:30 #15443

Here is the test code I used, should you desire to replicate my tests on your machine and share the results.

!FTN95 application...
PROGRAM main
 integer print_every
 integer failed_open,failed_delete,failed_close,failed_write
 character iorecord(194)
 character*8 ddate,oper(6),share(5)
 character*10 ttime
 	character*5 zzone
    integer values(8),stest
    character*20 access(6),form(6),status(6)
    data status/'replace','old',   'old',   'replace',   'old',       'old'/
    data access/'direct', 'direct','direct','sequential','sequential','sequential'/
    data form/6*'unformatted'/
    data oper/   'write',  'write', 'read',  'write',     'write',     'read'/
    data share/'denynone','denyrw','denywr','denyrd','compat'/

! Test program to open a unformatted direct access file, then write several records
! then close it and try again. Each failure to open will be logged along with the error code and date/time
! a 2 second wait will be done, then re-try.
!
! The first time, we'll delete the file, then create as a new, then old from then on
!
 call date_and_time(ddate,ttime,zzone,values)
 print *,'Starting the test at: ',ddate(1:8),' ',ttime(1:10)
 max_recs=1000
 do stest=1,5 !share
 do jtest=1,6
  open(unit=15,file='testfile.dat',access=access(jtest),iostat=icode,err=12000,&
  form=form(jtest),recl=194,status=status(jtest),share=share(stest))
 ! the READ tests require that the file exists, so change 'replace' to 'old'
  start_loop = high_res_clock@(.true.)
 do 10000 i=1,max_recs
   call randomfile(iorecord,194) ! this is always left in to even out the loop timing
   !This next line must change to reflect read or write and rec= if needed
   go to (1000,1000,2000,3000,3000,4000),jtest
1000 continue
   write(15,rec=i,err=13000)iorecord
   go to 10000
2000 continue
	read(15,rec=i,err=13000,iostat=icheck)iorecord
    go to 10000
3000 continue
   write(15,err=13000)iorecord
   go to 10000 
4000 continue
   read(15,err=13000)iorecord
   go to 10000 
10000 continue
  end_loop = high_res_clock@(.false.)
  print *,oper(jtest),max_recs,' records took ',end_loop-start_loop,'For access=',trim(access(jtest)),&
  ' format=',trim(form(jtest)),' status=',trim(status(jtest)),' share=',trim(share(stest))
  close(unit=15)
  call sleep1@(2.)
  end do ! jtest
  end do ! stest
  pause
 stop
 13000 continue
 print *,'io error',icheck
 stop
 12000 continue
 print *,'open error',icode
 stop
  
END PROGRAM main
 subroutine randomfile(iorecord,length)
 character*1 iorecord(length)
 do i=1,length
   iorecord=char(int(255.*random@()))
 end do
  return
  end
   
26 Jan 2015 12:34 #15444

Paul, it would be useful (to me, at least) to know how FTN95 opens a file in each of the available SHARE= modes. Right now, I can only guess. I might be able to find something with this small bit of detailed knowledge, perhaps even able to replicate in another language to identify the root cause. The way I figure it, if I found this, perhaps others have the same problem. And, if there is a root cause, it can be addressed (or not, as the case might be).

Rather than to say 'Don't do it this way', perhaps the proper answer is 'If you do it this way AND you get these kinds of results...'.

26 Jan 2015 4:22 #15445

Bill,

I ran your test on Windows 7 Home Premium, Service Pack 1 i5-2300 921 GB partition of 2Tb HDD in directory c:\temp\forum ftn95 bill_file_io /-imp /lgo >zz

 [FTN95/Win32 Ver. 7.10.0 Copyright (c) Silverfrost Ltd 1993-2014]

    NO ERRORS  [<MAIN> FTN95/Win32 v7.10.0]
    NO ERRORS  [<RANDOMFILE> FTN95/Win32 v7.10.0]
Creating executable: c:\\temp\\forum\\lgotemp@.exe
Program entered
 Starting the test at: 20150126 153114.426
 write           1000 rec      1.49023    sec; For ac=direct fo=unformatted st=replace sh=denynone
 write           1000 rec      1.63867    sec; For ac=direct fo=unformatted st=old sh=denynone
 read            1000 rec      1.07422    sec; For ac=direct fo=unformatted st=old sh=denynone
 write           1000 rec     0.982422    sec; For ac=sequential fo=unformatted st=replace sh=denynone
 write           1000 rec     0.978516    sec; For ac=sequential fo=unformatted st=old sh=denynone
 read            1000 rec     0.976563    sec; For ac=sequential fo=unformatted st=old sh=denynone
 write           1000 rec     0.982422    sec; For ac=direct fo=unformatted st=replace sh=denyrw
 write           1000 rec     0.972656    sec; For ac=direct fo=unformatted st=old sh=denyrw
 read            1000 rec     0.964844    sec; For ac=direct fo=unformatted st=old sh=denyrw
 write           1000 rec     0.978516    sec; For ac=sequential fo=unformatted st=replace sh=denyrw
 write           1000 rec     0.994141    sec; For ac=sequential fo=unformatted st=old sh=denyrw
 read            1000 rec     0.986328    sec; For ac=sequential fo=unformatted st=old sh=denyrw
 write           1000 rec     0.978516    sec; For ac=direct fo=unformatted st=replace sh=denywr
 write           1000 rec     0.998047    sec; For ac=direct fo=unformatted st=old sh=denywr
 read            1000 rec     0.974609    sec; For ac=direct fo=unformatted st=old sh=denywr
 write           1000 rec     0.980469    sec; For ac=sequential fo=unformatted st=replace sh=denywr
 write           1000 rec     0.974609    sec; For ac=sequential fo=unformatted st=old sh=denywr
 read            1000 rec     0.992188    sec; For ac=sequential fo=unformatted st=old sh=denywr
 write           1000 rec      1.51563    sec; For ac=direct fo=unformatted st=replace sh=denyrd
 write           1000 rec      1.56250    sec; For ac=direct fo=unformatted st=old sh=denyrd
 read            1000 rec      1.08008    sec; For ac=direct fo=unformatted st=old sh=denyrd
 write           1000 rec     0.980469    sec; For ac=sequential fo=unformatted st=replace sh=denyrd
 write           1000 rec     0.974609    sec; For ac=sequential fo=unformatted st=old sh=denyrd
 read            1000 rec     0.978516    sec; For ac=sequential fo=unformatted st=old sh=denyrd
 write           1000 rec      1.53906    sec; For ac=direct fo=unformatted st=replace sh=compat
 write           1000 rec      1.50000    sec; For ac=direct fo=unformatted st=old sh=compat
 read            1000 rec      1.08008    sec; For ac=direct fo=unformatted st=old sh=compat
 write           1000 rec     0.974609    sec; For ac=sequential fo=unformatted st=replace sh=compat
 write           1000 rec     0.984375    sec; For ac=sequential fo=unformatted st=old sh=compat
 read            1000 rec     0.976563    sec; For ac=sequential fo=unformatted st=old sh=compat
***Pause: 
Enter system command or press ENTER key to restart:
26 Jan 2015 8:14 #15448

Bill,

I changed randomfile to: do i=1,length iorecord(i)=char(int(255.*random@())) end do I also tidied up the formats and used SYSTEM_CLOCK for timing. I got the following results.

[FTN95/Win32 Ver. 7.10.0 Copyright (c) Silverfrost Ltd 1993-2014]

    NO ERRORS  [<MAIN> FTN95/Win32 v7.10.0]
    NO ERRORS  [<RANDOMFILE> FTN95/Win32 v7.10.0]
    NO ERRORS  [<ELAPSE_TIME> FTN95/Win32 v7.10.0]
Creating executable: c:\\temp\\forum\\lgotemp@.exe
Program entered
 Starting the test at: 20150126 190544.999
  
write   1000 rec  0.4375 sec; For ac=direct fo=unformatted st=replace sh=denynone
write   1000 rec  0.4336 sec; For ac=direct fo=unformatted st=old sh=denynone
read    1000 rec  0.0859 sec; For ac=direct fo=unformatted st=old sh=denynone
write   1000 rec  0.0156 sec; For ac=sequential fo=unformatted st=replace sh=denynone
write   1000 rec  0.0234 sec; For ac=sequential fo=unformatted st=old sh=denynone
read    1000 rec  0.0234 sec; For ac=sequential fo=unformatted st=old sh=denynone
  
write   1000 rec  0.0156 sec; For ac=direct fo=unformatted st=replace sh=denyrw
write   1000 rec  0.0195 sec; For ac=direct fo=unformatted st=old sh=denyrw
read    1000 rec  0.0078 sec; For ac=direct fo=unformatted st=old sh=denyrw
write   1000 rec  0.0117 sec; For ac=sequential fo=unformatted st=replace sh=denyrw
write   1000 rec  0.0078 sec; For ac=sequential fo=unformatted st=old sh=denyrw
read    1000 rec  0.0117 sec; For ac=sequential fo=unformatted st=old sh=denyrw
  
write   1000 rec  0.0156 sec; For ac=direct fo=unformatted st=replace sh=denywr
write   1000 rec  0.0195 sec; For ac=direct fo=unformatted st=old sh=denywr
read    1000 rec  0.0117 sec; For ac=direct fo=unformatted st=old sh=denywr
write   1000 rec  0.0078 sec; For ac=sequential fo=unformatted st=replace sh=denywr
write   1000 rec  0.0117 sec; For ac=sequential fo=unformatted st=old sh=denywr
read    1000 rec  0.0078 sec; For ac=sequential fo=unformatted st=old sh=denywr
  
write   1000 rec  0.4180 sec; For ac=direct fo=unformatted st=replace sh=denyrd
write   1000 rec  0.4258 sec; For ac=direct fo=unformatted st=old sh=denyrd
read    1000 rec  0.0898 sec; For ac=direct fo=unformatted st=old sh=denyrd
write   1000 rec  0.0156 sec; For ac=sequential fo=unformatted st=replace sh=denyrd
write   1000 rec  0.0117 sec; For ac=sequential fo=unformatted st=old sh=denyrd
read    1000 rec  0.0313 sec; For ac=sequential fo=unformatted st=old sh=denyrd
  
write   1000 rec  0.4023 sec; For ac=direct fo=unformatted st=replace sh=compat
write   1000 rec  0.4297 sec; For ac=direct fo=unformatted st=old sh=compat
read    1000 rec  0.0859 sec; For ac=direct fo=unformatted st=old sh=compat
write   1000 rec  0.0156 sec; For ac=sequential fo=unformatted st=replace sh=compat
write   1000 rec  0.0195 sec; For ac=sequential fo=unformatted st=old sh=compat
read    1000 rec  0.0313 sec; For ac=sequential fo=unformatted st=old sh=compat

These results now show a difference for different share options, but not as dramatic as before.

John

Please login to reply.