For a file opened with the O_DIRECT mode ("direct I/O"), GPFS™ will attempt to transfer the data directly between the user buffer and the file on disk.
When these conditions are not all true, the operation will still proceed but will be treated more like other normal file I/O, with the O_SYNC flag that flushes the dirty buffer to disk.
When these conditions are all true, the GPFS pagepool is not used because the data is transferred directly; therefore, an environment in which most of the I/O volume is due to direct I/O (such as in databases) will not benefit from a large pagepool. Note, however, that the pagepool still needs to be configured with an adequate size, or left at its default value, because the pagepool is also used to store file metadata (especially for the indirect blocks required for large files).
With direct I/O, the application is responsible for coordinating access to the file, and neither the overhead nor the protection provided by GPFS locking mechanisms plays a role. In particular, if two threads or nodes perform direct I/O concurrently on overlapping portions of the file, the outcome is undefined. For example, when multiple writes are made to the same file offsets, it is undetermined which of the writes will be on the file when all I/O is completed. In addition, if the file has data replication, it is not guaranteed that all the data replicas will contain the data from the same writer. That is, the contents of each of the replicas could diverge.
Note that setting the O_DIRECT flag on an open file with fcntl (fd, F_SETFL, [..]), which may be allowed on Linux, is ignored in a GPFS file system.