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.