From owner-svn-doc-all@FreeBSD.ORG Mon Sep 9 21:08:58 2013
Return-Path: Last year's high-performance storage vendors reported
- performance bottleneck in &os; block storage subsystem, limiting
- peak performance around 300-500K IOPS. While that is still more
- then enough for average systems, detailed investigation has
- shown number of places that require radical improvement.
- Unmapped I/O support implemented early this year already
- improved I/O performance by about 30% and moved more accents
- toward GEOM and CAM subsystems scalability. Fixing these issues
- was the goal of this project. Last year's high-performance storage vendors reported a
+ performance bottleneck in the &os; block storage subsystem,
+ limiting peak performance around 300-500K IOPS. While that is
+ still more than enough for average systems, detailed
+ investigation has shown a number of places that require radical
+ improvement. Unmapped I/O support implemented early this year
+ already improved I/O performance by about 30% and moved more
+ accents toward GEOM and CAM subsystems scalability. Fixing
+ these issues was the goal of this project. The existing GEOM design assumed the most of I/O handling to be
- done by only two kernel threads (g_up() and
+ The existing GEOM design assumed most I/O handling to be done
+ by only two kernel threads (g_up() and
g_down()). That simplified locking in some cases, but
limited potential SMP scalability and created additional
- scheduler overhead. This project introduces concept of direct
- I/O dispatch into GEOM for cases where it is know to be safe and
- efficient. That implies marking some of GEOM consumers and
- providers with one or two new flags, declaring situations when
- direct function call can be used instead of normal request
- queuing. That allows to avoid any context switches inside GEOM
+ scheduler overhead. This project introduces the concept of
+ direct I/O dispatch into GEOM for cases where it is known to be
+ safe and efficient. That implies marking some GEOM consumers
+ and providers with one or two new flags, declaring situations
+ when a direct function call can be used instead of normal request
+ queuing. That allows avoiding any context switches inside GEOM
for the most widely used topologies, simultaneously processing
multiple I/Os from multiple calling threads. Having GEOM passing through multiple concurrent calls down to
the underlying layers exposed major lock congestion in CAM. In
- existing CAM design all devices connected to the same ATA/SCSI
- controller are sharing single lock, which can be quite busy due
+ the existing CAM design all devices connected to the same ATA/SCSI
+ controller are sharing a single lock, which can be quite busy due
to multiple controller hardware accesses and/or code logic.
- Experiments have shown that applying only above GEOM direct
+ Experiments have shown that applying only the above GEOM direct
dispatch changes burns up to 60% of system CPU time or even more
in attempts to obtain these locks by multiple callers, killing
- any benefits of GEOM direct dispatch. To overcome that new
+ any benefits of GEOM direct dispatch. To overcome that, new
fine-grained CAM locking design was implemented. It implies
splitting big per-SIM locks into several smaller ones: per-LUN
- locks, per-bus locks, queue locks, etc. After these changes
- remaining per-SIM lock protects only controller driver
- internals, reducing lock congestion down to acceptable level and
- allowing to keep compatibility with existing drivers.
Together GEOM and CAM changes twice increase peak I/O rate, +
Together, GEOM and CAM changes double the peak I/O rate, reaching up to 1,000,000 IOPS on contemporary hardware.
-The changes were tested by number of people and are going to be +
The changes were tested by a number of people and will be committed into &os; head and merged to - stable/10 after the end of &os; 10.0 release cycle.
+ stable/10 after the end of the &os; 10.0 release + cycle.The project is sponsored by iXsystems, Inc.