DIRECT_IO configuration parameter (UNIX)

Use the DIRECT_IO configuration parameter to control the use of direct I/O for cooked files and block devices used for dbspace chunks.

This parameter enables direct I/O (bypassing file system buffering) on UNIX platforms or concurrent IO (bypassing both file system buffering and unnecessary write serialization) on AIX® operating systems.

Note: The DIRECT_IO value is a bitmask, allowing multiple feature-control flags to be combined.
onconfig.std value
DIRECT_IO 0
flag values
0x0 = Neither direct I/O or concurrent I/O is used
0x1 = Direct I/O, which bypasses file system buffering, is used if available
0x2 = Concurrent I/O is enabled on AIX® operating systems (The concurrent I/O option includes direct I/O and concurrent I/O.)
0x4 = Apply any of the above flags to temporary DBspaces as well as permanent spaces.
takes effect
After you edit your onconfig file and restart the database server.

Usage

Direct I/O can only be used for dbspace chunks whose file systems support direct I/O for the page size.

If direct I/O is enabled, KAIO (kernel asynchronous I/O) is used if the file system supports it. However, KAIO is not used if the environment variable KAIOOFF is set. When direct IO and KAIO are both used, the number of AIO virtual processors can be reduced. If direct IO is used, but KAIO is not, the number of AIO virtual processors should not be reduced.

HCL Informix® does not use direct or concurrent I/O for temporary dbspace chunks unless the DIRECT_IO value contains the 0x4 flag

On AIX, if Informix® uses concurrent I/O for a chunk, another program (such as an online external backup program) must also use concurrent I/O. If not, the file open operation will fail.

If Informix® uses direct I/O for a chunk, and another program tries to open the chunk file without using direct I/O, the open operation will normally succeed, but there can be a performance penalty. The penalty can occur because the file system might attempt to ensure that each open operation views the same file data, either by not using direct I/O at all for the duration of the conflicting open operation, or by flushing the file system cache before each direct I/O and invalidating the file system cache after each direct write.

Direct I/O is used for dbspace chunks on Windows platforms regardless of the value of the DIRECT_IO configuration parameter.

Example values
0x1 = Direct I/O is enabled for non-temporary dbspace chunks.
0x2 = (AIX only) Concurrent I/O is enabled for non-temp dbspace chunks.
0x5 = Direct I/O is enabled for all chunks that can support it.
0x6 = (AIX only) Concurrent I/O is enabled for all chunks that can support it.

Device Block Sizes on Linux

Prior to 15.0.1.x, Direct I/O on Linux was supported only on storage devices with a native or emulated 512-byte block size. Starting from 15.0.1.x, Direct I/O is also supported on devices with 2k and 4k block sizes.