The data transfer component (
) in disk IOs
can be large. For example, the current maximum disk IO
size used by Linux and FreeBSD is
kB, and it
can be larger for some specialized video-on-demand systems2.
To make the
component preemptible, Semi-preemptible IO
uses chunking.
Definition 3.1: Chunking is a method for splitting the data transfer component of an IO request into multiple smaller chunk transfers. The chunk transfers are serviced using separate disk commands, issued sequentially.
Benefits:
Chunking reduces the transfer component of
.
A higher-priority request can be serviced after a chunk transfer is
completed instead of after the entire IO is completed.
For example, suppose a
kB IO request requires a
of
ms
at a transfer rate of
MBps. Using a chunk size of
kB, the expected
waiting time for a higher-priority request is reduced from
ms to
ms.
Overhead: For small chunk sizes, the IO bus can become a performance bottleneck due to the overhead of issuing a large number of disk commands. As a result, the disk throughput degrades. Issuing multiple disk commands instead of a single one also increases the CPU overhead for performing IO. However, for the range of chunk sizes, the disk throughput using chunking is optimal with negligible CPU overhead.