-
I/O bus access: If the bus is busy, the request
is queued by the driver. The information is reported by sar -d wait
and %w and iostat -x avwait.
-
Bus transfer time: Arbitration time (which device
gets to use the bus), time to transfer the command (usually ~ 1.5
ms), data transfer time (in the case of a write).
-
Seek time: Time for the head to move to the proper
cylinder. Average seek times are reported by hard drive manufacturers.
-
Rotation time: Time for the correct sector to rotate
under the head. This is usually calculated as 1/2 the time for a
disk rotation. Rotation speeds (in RPM) are reported by hard drive
manufacturers.
-
ITR time: Internal Throughput Rate. This is the
amount of time required for a transfer between the hard drive's
cache and the device media. The ITR time is the limiting factor
for sequential I/O, and is reported by the hard drive manufacturer.
-
Reconnection time: After the data has been moved
to/from the hard drive's internal cache, a connection with the host
adapter must be completed. This is similar to the arbitration/ command
transfer time discussed above.
-
Interrupt time: Time for the completion interrupt
to be processed. This is very hard to measure, but high interrupt
rates on the CPUs associated with this system board may be an indication
of problems.
The disk's ITR rating and internal cache size can be
critical when tuning maxcontig (maximum contiguous I/O size). Note:
maxphys and maxcontig must be tuned at the same time. The unit of
measurement for maxphys is bytes; maxcontig is in blocks.
maxcontig can be changed via the mkfs, newfs or tunefs
commands.
The use of direct I/O
Large sequential I/O can cause performance problems
due to excessive use of the memory page cache. One way to avoid this
problem is to use direct I/O on filesystems where large sequential
I/Os are common.
Direct I/O is a mechanism for bypassing the memory page
cache alltogether. It is enforced by the directio() function or by
the forcedirectio option to mount.
VxFS enables direct I/O for large sequential operations.
It determines which operations are "large" by comparing
them to the vxtunefs parameter discovered_direct_iosz (default 256KB).
One problem that can emerge is that if large sequential
I/Os are handed to VxFS as several smaller operations, caching will
still occur. This problem can be alleviated by reducing discovered_direct_iosz
to a level that prevents caching of the smaller operations. In particular,
this can be a problem in OLTP environments. A case study of this problem
is discussed on the Sun web site.