As you know ASM is doing non (operating system) buffered I/O (also known as ‘DIO’ or Direct I/O) regardless of the oracle database filesystemio_options parameter.

But what’s about :  Asynchronous/Synchronous I/O ?

If you have a look to MOS note [ID 751463.1] you’ll see that ASM asynchronous/synchronous I/O is entirely controlled by the DISK_ASYNCH_IO parameter and not the FILESYSTEMIO_OPTIONS one.

At the time being, this note only deals with 10.2 databases, so I want to check if this is still the case with 11.2 databases (Let me tell you than I hope so ;-) ) :

For this test I will (at the database level):

  • create a tablespace of 10M (create tablespace bdt datafile ‘+DATA’ size 10m)
  • strace the DBW process (strace -cp <pid of dbw process>)

With differents values for filesystemio_options and disk_asynch_io.

The results are :

filesystemio_options=setall
disk_asynch_io=true

% time seconds usecs/call calls errors syscall

------ ----------- ----------- --------- --------- ----------------
41.39 0.001000 7 150 14 semtimedop
35.02 0.000846 7 126 io_submit
20.70 0.000500 4 126 io_getevents

As you can see the io_getevents and io_submit system calls have been used => Asynchronous I/O.

filesystemio_options=setall
disk_asynch_io=false

% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
75.38 0.007469 30 252 pwrite
20.19 0.002000 10 202 5 semtimedop
0.00 0.000000 0 8 close
0.00 0.000000 0 2 2 stat

As you can see the pwrite system call has been used => Synchronous I/O.

filesystemio_options=none
disk_asynch_io=true

% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
75.45 0.005055 40 126 io_submit
14.93 0.001000 6 157 2 semtimedop
9.10 0.000610 5 126 io_getevents

As you can see the io_getevents and io_submit system calls have been used => Asynchronous I/O.

filesystemio_options=none
disk_asynch_io=false

% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
56.54 0.005354 21 252 pwrite
42.23 0.003999 16 256 3 semtimedop
0.51 0.000048 0 268 semctl
0.49 0.000046 0 817 times

As you can see the pwrite system call has been used => Synchronous I/O.

Conclusion :

With 11.2 databases, ASM asynchronous/synchronous I/O is still entirely controlled by the DISK_ASYNCH_IO parameter.