The end of the road for kiobufs?
[Posted July 10, 2002 by corbet]
Andrew Morton's
"direct-to-BIO for O_DIRECT"
patch is another step in the process of converting the file I/O
subsystem over to the new BIO request structure. Files opened with
O_DIRECT are a bit of a special case, in that I/O happens directly
to or from a userspace buffer. Andrew's patch sets up a BIO request
pointing directly to that buffer; for large operations, the result is a
significant speedup.
That sort of optimization is certainly worthwhile. The really interesting
part of this patch, however, is that it shorts out the "kiobuf" layer for
O_DIRECT, and for the raw block I/O devices as well. Kiobufs were
initially implemented to support that sort of raw I/O; they were intended
to be a generic abstraction for a collection of physical pages in I/O
operations. Kiobufs have been gradually falling out of favor over the last
couple of years, however, as their limitations have come to light. They
are a relatively heavyweight data structure, with high setup and teardown
costs. Kiobufs also break down operations into relatively small chunks
which must be processed sequentially, slowing down large requests.
The direct-to-BIO patch has eliminated the original and largest use of
kiobufs within the kernel. That leads to the obvious question: is it time
to remove kiobufs from 2.5? The answer seems to be "yes," and some patches removing the last remaining uses of
kiobufs have started appearing. Kiobufs, it seems, are on the way out.
The only gap left if kiobufs are removed would be direct I/O support for
character devices. There are devices which can benefit from direct I/O:
consider the SCSI generic layer, video devices, or high-speed tape drives.
Requests have been posted for a function which would map a userspace buffer
into a "scatterlist," a data structure representing memory which has been
set up for DMA operations. This capability would take almost all of the
pain out of supporting direct I/O in character devices; no such patch has
yet been posted, though.
(
Log in to post comments)