]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/commit
MFC r274962: Replace home-grown CTL IO allocator with UMA.
authormav <mav@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Thu, 18 Dec 2014 08:22:16 +0000 (08:22 +0000)
committermav <mav@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Thu, 18 Dec 2014 08:22:16 +0000 (08:22 +0000)
commit748e55ec4a386511b29a006376820217fa46f0e9
tree86da3dfb1f2283fdb08b2e1898421754ae9221c8
parentf3888d42b6db21e30fccbc18df956862d1a2bd17
MFC r274962:  Replace home-grown CTL IO allocator with UMA.

Old allocator created significant lock congestion protecting its lists
of preallocated I/Os, while UMA provides much better SMP scalability.
The downside of UMA is lack of reliable preallocation, that could guarantee
successful allocation in non-sleepable environments.  But careful code
review shown, that only CAM target frontend really has that requirement.
Fix that making that frontend preallocate and statically bind CTL I/O for
every ATIO/INOT it preallocates any way.  That allows to avoid allocations
in hot I/O path.  Other frontends either may sleep in allocation context
or can properly handle allocation errors.

On 40-core server with 6 ZVOL-backed LUNs and 7 iSCSI client connections
this change increases peak performance from ~700K to >1M IOPS!  Yay! :)

Sponsored by: iXsystems, Inc.

git-svn-id: svn://svn.freebsd.org/base/stable/10@275878 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
sys/cam/ctl/ctl.c
sys/cam/ctl/ctl_frontend.c
sys/cam/ctl/ctl_frontend_cam_sim.c
sys/cam/ctl/ctl_frontend_internal.c
sys/cam/ctl/ctl_frontend_iscsi.c
sys/cam/ctl/ctl_io.h
sys/cam/ctl/ctl_private.h
sys/cam/ctl/ctl_tpc.c
sys/cam/ctl/scsi_ctl.c