Unmapped I/O

Konstantin Belousov kostikbel at gmail.com
Thu Feb 14 19:47:37 UTC 2013


This is an update on the message
http://lists.freebsd.org/pipermail/freebsd-arch/2012-December/013672.html

The work implements the unmapped kernel I/O buffers, eliminating the
overhead of the mapping and IPIs, for most of i/o paths on the UFS
volumes.  In particular, read(2)/write(2) initiated i/o, including
clustered operations and page-ins are unmapped.  Also the physio is
unmapped if the geom/drivers support it.

Only ahci(4) is adopted to provide required support.  Most other HBAs
which properly use bus_dmamap_load_ccb() can be trivially converted in
a way similar to ahci(4), see the changes in the patch.  I did not the
conversion because I cannot test.

I consider the current patch ready to be committed into the HEAD.
Some elements of the design were discussed with Jeff Roberson.  The
patch was tested by Peter Holm, a backport to stable/9 got load
testing by Scott Long.  I see an ~30% reduction in the system time on
reading large files over UFS/ahci on the 4-core HTT machine.

The only big stop there is the lack of testing on non-x86 platforms.
Marius Strobl pointed out that pmap_copy_pages() for sparc64 is
incorrect.  For the final commit, I will disable the unmapped buffers
on any architecture which was not tested at the time of commit.

The patch is available at
http://people.freebsd.org/~kib/misc/unmapped.13.patch
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 834 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20130214/01cf9df3/attachment.sig>


More information about the freebsd-arch mailing list