2015. 6. 2. 10:29ㆍAbout IT/유용한 정보.
https://sort.symantec.com/public/documents/sf/5.0/aix/html/fs_admin/ag_ch_interface_fs4.html
Buffered and Direct I/O
The VxFS responds with read-ahead for sequential read I/O. This results in buffered I/O. The data is prefetched and retained in buffers, in anticipation of application asking for it. The data buffers are commonly referred to as the VxFS buffer cache. This is the default VxFS behavior.
Direct I/O, on the other hand, does not buffer the data when the I/O to the underlying device is completed. This saves system resources like memory and CPU usage. Direct I/O is possible only when alignment and sizing criteria are satisfied.
All the supported platforms have a VxFS buffer cache. Each platform also has either a page cache, (aix/solaris/linux) or its own buffer cache (HP-UX). These caches are commonly known as the file system caches.
Direct I/O does not use these caches. The memory used for direct I/O is discarded after the I/O is complete, and is therefore not buffered.
Direct I/O
Direct I/O is an unbuffered form of I/O. If the VX_DIRECT
advisory is set, the user is requesting direct data transfer between the
disk and the user-supplied buffer for reads and writes. This bypasses
the kernel buffering of data, and reduces the CPU overhead associated
with I/O by eliminating the data copy between the kernel buffer and the
user's buffer. This also avoids taking up space in the buffer cache that
might be better used for something else. The direct I/O feature can
provide significant performance gains for some applications.
The direct I/O and VX_DIRECT
advisories are maintained on a per-file-descriptor basis.
For an I/O operation to be performed as direct I/O, it must meet certain alignment criteria. The alignment constraints are usually determined by the disk driver, the disk controller, and the system memory management hardware and software.
The requirements for direct I/O are as follows:
- The starting file offset must be aligned to a 512-byte boundary.
- The ending file offset must be aligned to a 512-byte boundary, or the length must be a multiple of 512 bytes.
- The memory buffer must start on an 8-byte boundary.
Direct I/O vs. synchronous I/O
Because direct I/O maintains the same data integrity as synchronous I/O, it can be used in many applications that currently use synchronous I/O. If a direct I/O request does not allocate storage or extend the file, the inode is not immediately written.
The CPU cost of direct I/O is about the same as a raw disk transfer. For sequential I/O to very large files, using direct I/O with large transfer sizes can provide the same speed as buffered I/O with much less CPU overhead.
If the file is being extended or storage is being allocated, direct I/O must write the inode change before returning to the application. This eliminates some of the performance advantages of direct I/O.
Discovered Direct I/O is a file system tunable you can set using the vxtunefs
command. When the file system gets an I/O request larger than the discovered_direct_iosz,
it tries to use direct I/O on the request. For large I/O sizes,
Discovered Direct I/O can perform much better than buffered I/O.
Discovered Direct I/O behavior is similar to direct I/O and has the same alignment constraints, except writes that allocate storage or extend the file size do not require writing the inode changes before returning to the application.
Unbuffered I/O
If the VX_UNBUFFERED
advisory is set, I/O behavior is the same as direct I/O with the VX_DIRECT
advisory set, so the alignment constraints that apply to direct I/O
also apply to unbuffered I/O. For unbuffered I/O, however, if the file
is being extended, or storage is being allocated to the file, inode
changes are not updated synchronously before the write returns to the
user. The VX_UNBUFFERED
advisory is maintained on a per-file-descriptor basis.
For information on how to set the discovered_direct_iosz
, see Tuning I/O.
Data synchronous I/O
If the VX_DSYNC
advisory is set, the user is requesting
data synchronous I/O. In synchronous I/O, the data is written, and the
inode is written with updated times and (if necessary) an increased file
size. In data synchronous I/O, the data is transferred to disk
synchronously before the write returns to the user. If the file is not
extended by the write, the times are updated in memory, and the call
returns to the user. If the file is extended by the operation, the inode
is written before the write returns.
The direct I/O and VX_DSYNC
advisories are maintained on a per-file-descriptor basis.
Data synchronous I/O vs. synchronous I/O
Like direct I/O, the data synchronous I/O feature can provide significant application performance gains. Because data synchronous I/O maintains the same data integrity as synchronous I/O, it can be used in many applications that currently use synchronous I/O. If the data synchronous I/O does not allocate storage or extend the file, the inode is not immediately written. The data synchronous I/O does not have any alignment constraints, so applications that find it difficult to meet the alignment constraints of direct I/O should use data synchronous I/O.
If the file is being extended or storage is allocated, data synchronous I/O must write the inode change before returning to the application. This case eliminates the performance advantage of data synchronous I/O.
'About IT > 유용한 정보.' 카테고리의 다른 글
MTU Size (0) | 2016.05.17 |
---|---|
Reliable UDP (0) | 2016.05.16 |
퍼옴] 컴파일러 최적화의 장애물: 포인터 (0) | 2015.01.22 |
퍼옴] Lock free Algorithms for Ultimate Performance (0) | 2015.01.22 |
퍼옴] 메모리 DB의 이해와 역할 (0) | 2015.01.22 |