[RFC][CFT] GEOM direct dispatch and fine-grained CAM locking

Alexander Motin mav at FreeBSD.org
Mon Sep 2 08:49:39 UTC 2013


Hi.

I would like to invite more people to review and test my patches for 
improving CAM and GEOM scalability, that for last six months you could 
see developing in project/camlock SVN branch. Full diff of that branch 
against present head (r255131) can be found here:
http://people.freebsd.org/~mav/camlock_patches/camlock_20130902.patch

Heavy CAM changes there were focused on reducing scope of SIM lock to 
only protecting SIM internals, but not CAM core. That allows many times 
reduce lock congestion, especially on heavily parallel request 
submission with GEOM changes below. More detailed description of changes 
you could see here earlier:
http://docs.freebsd.org/cgi/mid.cgi?520D4ADB.50209

GEOM changes were focused on avoiding switching to GEOM up/down threads 
in relatively simple setups where respective classes don't require it 
(and were explicitly marked so). That allows save on context switches 
and on systems with several HBAs and disks talk to them concurrently 
(that is where CAM locking changes are handy). Such classes were 
modified to support it: DEV, DISK, LABEL, MULTIPATH, NOP, PART, RAID 
(partially), STRIPE, ZERO, VFS, ZFS::VDEV, ZFS::ZVOL and some others. 
Requests to/from other classes will be queued to GEOM threads same as 
before.

Together that allows to double block subsystem performance on high (at 
least 100-200K) IOPS benchmarks, allowing to reach up to a million total 
IOPS, while keeping full compatibility with all major ABIs/KBIs.

Since we are already in 10.0 release process and changes are quite big, 
my plan is to wait and commit them to head branch after the freeze end, 
and then merge to stable/10.  I hope the release process will go on 
schedule to not delay this work for another six months.

This work is sponsored by iXsystems, Inc.

-- 
Alexander Motin


More information about the freebsd-scsi mailing list