SCST
{{For|the Scheduled Castes and Scheduled Tribes of India|Scheduled Castes and Scheduled Tribes}}
{{Infobox software
| name = SCST
| logo = Sourceforge-scst-project-logo.gif
| caption = A Generic SCSI Target Subsystem for Linux
| latest release version = 3.9
| latest release date = {{release date|2024|12|28}}
| operating system = Linux
| genre = Block storage
| license = GNU General Public License
| website = {{URL|scst.sf.net}}
| repo = {{URL|github.com/SCST-project/scst}}
| programming language = C
}}
SCST is a GPL licensed SCSI target software stack.
The design goals of this software stack are high performance, high reliability, strict conformance to existing SCSI standards, being easy to extend and easy to use. SCST does not only support multiple SCSI protocols (iSCSI, FC, SRP, ...) but also supports multiple local storage interfaces (SCSI pass-through, block I/O and file I/O) and also storage drivers implemented in user-space via the scst_user driver.{{cite conference |url=https://events.static.linuxfound.org/sites/events/files/slides/lcna15_bvanassche.pdf |title=SCST, a SCSI Target Framework |first=Bart |last=Van Assche |date=19 August 2015 |conference=LinuxCon North America 2015 |location=Seattle}}
In order to reach maximum performance SCST has been implemented as a set of kernel drivers. SCST is often combined with RAID, data deduplication and/or high-availability cluster software to augment its functionality. The SCST software stack is the basis software of many SAN systems.{{cite web |url=http://scst.sourceforge.net/users.html |title=SCST Users |first1=Vladislav |last1=Bolkhovitin |date=December 20, 2012}} Several world records have been set with SAN systems based on SCST.{{cite web |url=http://www.fusionio.com/blog/new-cloud-computing-benchmarks-with-cisco-ucs-vmware-and-fusion-io |archive-url=https://web.archive.org/web/20140702212624/http://www.fusionio.com/blog/new-cloud-computing-benchmarks-with-cisco-ucs-vmware-and-fusion-io |url-status=dead |archive-date=July 2, 2014 |publisher=Fusion-io |title=New VMmark Cloud Computing World Record set with Cisco UCS, VMware, and Fusion-io |date=May 10, 2013 |accessdate=August 12, 2018}}{{cite web |url=https://www.fusionio.com/blog/hp-achieves-two-new-1-vmmark-virtualization-benchmarks-with-ion-data-accelerator/ |archive-url=https://web.archive.org/web/20140616231223/https://www.fusionio.com/blog/hp-achieves-two-new-1-vmmark-virtualization-benchmarks-with-ion-data-accelerator/ |url-status=dead |archive-date=June 16, 2014 |publisher=Fusion-io |title=HP Achieves Two New #1 VMmark Virtualization Benchmarks with ION Data Accelerator |date=September 12, 2013 |accessdate=August 12, 2018}}{{cite web |url=http://www.bitcon.be/wp-content/uploads/2013/11/4AA4-8400ENW.pdf |publisher=HP |title=HP achieves world records for 2P blade and 2P rack-mount server virtualization performance on VMmark 2.5.1 benchmark |date=October 2013}}{{cite web |url=http://kaminario.com/blog/the-k2-tops-two-million-iops-using-a-single-all-flash-storage-system/ | publisher = Kaminario |title=The K2 Tops Two Million IOPS Using a Single All-Flash Storage System |date=October 4, 2012}}
SCST competes with LIO Target for the same purpose of providing a generic SCSI target module inside the Linux kernel.{{Cite web|url=https://lwn.net/Articles/424004/|title = A tale of two SCSI targets [LWN.net]}} For the narrower purpose providing a Linux iSCSI target, the older IET and STGT modules also enjoy industry support.Florian Haas, "[https://dl.acm.org/citation.cfm?id=2240081 Replicate Everything! Highly Available iSCSI Storage with DRBD and Pacemaker]", (Linux iSCSI: a Tale of Four Targets section) Linux Journal Issue #217, May 2012
Between 2013 and 2017 SCST was primarily maintained by SanDisk personnel, after Fusion-io acquired the start-up ID7 in 2013, a driving force behind SCST{{cite web |first=David |last=Meyer |title=Fusion-io picks up software-defined storage firm ID7 for SCST chops |url=http://gigaom.com/2013/03/18/fusion-io-picks-up-software-defined-storage-firm-id7-for-scst-chops/ |website=Gigaom |date=18 March 2013 |accessdate=20 July 2014 |archive-date=1 February 2014 |archive-url=https://web.archive.org/web/20140201173436/http://gigaom.com/2013/03/18/fusion-io-picks-up-software-defined-storage-firm-id7-for-scst-chops/ |url-status=dead }}{{cite web |first=Kevin |last=O'Brien |title=Fusion-io Acquires ID7, Developers of SCST |url=http://www.storagereview.com/fusionio_acquires_id7_developers_of_scst |date=18 March 2013 |accessdate=20 July 2014 |archive-date=14 October 2014 |archive-url=https://web.archive.org/web/20141014155848/http://www.storagereview.com/fusionio_acquires_id7_developers_of_scst |url-status=dead }}{{cite web |title=Fusion-io ID7 - Accelerating Shared Storage with Software Defined Solutions |url=http://www.fusionio.com/id7 |archive-url=https://web.archive.org/web/20140804035558/http://www.fusionio.com/id7 |url-status=dead |archive-date=August 4, 2014 |website=Fusion-io |accessdate=August 12, 2018}} and after SanDisk acquired Fusion-io in 2014.{{cite web |first=Jay |last=Iyer |title=SanDisk Completes Acquisition of Fusion-io |url=http://www.sandisk.com/about-sandisk/press-room/press-releases/2014/sandisk-completes-acquisition-of-fusion-io/ |website=SanDisk |date=23 July 2014}}
Architecture
File:Scst-architecture-diagram.png
SCST consists of three groups of modules:
- The SCST core, a protocol-independent engine for processing SCSI commands.
- Target drivers which receive SCSI commands from a SCSI initiator, pass these SCSI to the SCST core and send back replies to the initiator.
- Storage drivers a.k.a. device handlers which interact with the storage medium. The supported local storage interfaces are SCSI, block device, file and scst_user. scst_user is an SCST-specific protocol that allows efficient implementation of storage drivers in user space.
Configuration of all these modules happens via a sysfs interface. Although direct configuration of SCST via its sysfs interface is convenient, the tool called scstadmin allows to control SCST via its sysfs interface and also to save and restore the SCST configuration.
The following design aspects help SCST to reach the high performance this project is known for:
- The number of threads per storage device that processes SCSI commands is configurable.
- All target driver and storage driver functions invoked by the SCST core are asynchronous, at least when the Linux kernel allows this. It is e.g. not yet possible to perform asynchronous or direct I/O from inside the Linux kernel.{{cite web |url=https://lwn.net/Articles/490114/ |title=2012 Linux Storage, Filesystem, and Memory Management Summit - Day 1 |first1=Jake |last1=Edge |date=April 3, 2012}}
- One finite-state machine is associated with each SCSI command. This allows a single command thread to process multiple SCSI commands concurrently.
- Even when using multiple threads per storage device all these threads share the same I/O scheduler context. This sharing improves performance significantly when using e.g. the CFQ I/O scheduler.
- A scatter-gather vector cache. This cache avoids having to allocate memory via the kernel for each SCSI command.
- Lockless access to certain data structures needed to process SCSI commands. This also means that I/O has to be suspended before any of the data structures that are accessed without locking can be modified.{{cite web |url=http://sourceforge.net/mailarchive/message.php?msg_id=30270835 |title=More fine-grained locking in SCST |first1=Bart |last1=Van Assche |date=December 25, 2012}}
- SCSI commands can be submitted by a target driver to the SCST core from softirq context. This results in a lower number of context switches compared to having to submit SCSI commands from thread context.{{cite web |url=https://sourceforge.net/p/scst/svn/HEAD/tree/trunk/README |title=SCST README |first1=Vladislav |last1=Bolkhovitin |first2=Bart |last2=Van Assche |date=September 26, 2012 |access-date=April 7, 2018 |archive-date=April 8, 2018 |archive-url=https://web.archive.org/web/20180408010348/https://sourceforge.net/p/scst/svn/HEAD/tree/trunk/README |url-status=dead }}
History
In the year 2000 a SCSI target framework was developed by the University of New Hampshire InterOperability Laboratory (UNH-IOL). Although the UNH-IOL SCSI target implementation only
supports the iSCSI protocol, it was designed such that support for other storage protocols would be easy to add.{{cite journal |last1=Palekar |first1=Ashish |last2=Ganapathy |first2=Narendran |last3=Chadda |first3=Anshul |last4=Russell |first4=Robert D. |title=Design and implementation of a Linux SCSI target for storage area networks |journal=Proceedings of the 5th Annual Linux Showcase & Conference |year=2001 |volume=5 |pages=11–18 |publisher=USENIX Association |citeseerx = 10.1.1.61.2706 }}
In 2004 the SCST project was announced, providing Fibre Channel and iSCSI support. The initial iSCSI target in SCST was based on the UNH-IOL iSCSI target implementation.{{cite web |url=https://lkml.org/lkml/2004/6/16/133 |title=ANNOUNCE Generic SCSI Target Middle Level for Linux (SCST) with target drivers |first1=Vladislav |last1=Bolkhovitin}}
Around that time an alternative iSCSI target software stack was developed by Ardis Technologies.{{cite book |first1=Tomonori |last1=Fujita |last2=Masanori |first2=Ogawara |title=Proceedings of the international workshop on Storage network architecture and parallel I/Os - SNAPI '04 |chapter=Analysis of iSCSI target software |date=2004 |pages=25–32 |publisher=ACM |doi=10.1145/1162628.1162632 |isbn=9781450378222 |s2cid=14730273 |chapter-url=https://dl.acm.org/citation.cfm?id=1162632}}
The iSCSI Enterprise Target software, announced in 2005, is a further evolution of the Ardis stack.{{cite web |url=http://iscsitarget.sourceforge.net/ |title=iSCSI Enterprise Target |first1=Tomonori |last1=Fujita |date=June 1, 2004}}{{cite web |url=http://marc.info/?t=110966162300003&r=1&w=2 |title=ANNOUNCE iSCSI enterprise target software |first1=Tomonori |last1=Fujita |date=March 1, 2005}}
Later in 2005 Chelsio announced an SCST iSCSI target driver for the Chelsio T2 Ethernet adapter family.{{cite web |url=http://www.chelsio.com/press-room/chelsio-delivers-next-generation-iscsi-product-family-featuring-breakthroughs-in-performance-and-port-density-1126040400/ |title=Chelsio Delivers Next-Generation iSCSI Product Family Featuring Breakthroughs in Performance and Port Density |first1=Randy |last1=Smith |publisher=Chelsio |date=September 7, 2005}}
In 2006 a target driver for LSI/MPT cards was added.{{cite web |url=https://sourceforge.net/p/scst/svn/49 |title=LSI/MPT target driver |first1=Erik |last1=Habbinga |date=December 13, 2006}}
Later in this year the scstadmin tool was added. This tool allows to save and restore the SCST configuration from or to a file.{{cite web |url=https://sourceforge.net/p/scst/svn/33 |title=Initial scstadmin commit |first1=Mark R. |last1=Buechler |date=November 14, 2006}}
In 2007 the UNH-IOL iSCSI target patch in the SCST project was replaced by a fork of IET.{{cite web |url=https://sourceforge.net/p/scst/svn/162 |title=Initial iSCSI-SCST commit |first1=Vladislav |last1=Bolkhovitin |date=August 15, 2007}}
In 2008 an SRP target driver was donated by Mellanox.{{cite web |url=https://sourceforge.net/p/scst/svn/304 |title= Initial SRP target driver commit |first1=Vu |last1=Pham |date=May 17, 2008}} Later on this driver was optimized by Bart Van Assche.{{cite web |url=https://www.spinics.net/lists/linux-scsi/msg49106.html |title=PATCH 4/7 scst: Add SRP target driver |first1=Bart |last1=Van Assche |date=December 20, 2010}}
In 2009 Marvell donated a target driver for their SAS cards.{{cite web |url=https://sourceforge.net/p/scst/svn/772 |title=Target driver for Marvell 88SE64xx(3G) and 88SE94xx(6G) SAS cards |first1=Andi |last1=Yan |date=April 14, 2009}}
Also in 2009 a target driver for Emulex Fibre Channel/FCoE adapter cards was announced by Emulex.{{cite web |url=https://lkml.org/lkml/2009/7/8/332 |title=ANNOUNCE SCST Target driver support for Emulex lpfc FC/FCoE adapters |first1=Vladislav |last1=Bolkhovitin |date= July 8, 2009}}{{cite web |url=http://www.emulex.com/resources/press-releases/2009/list/sep-15-2009-emulex-releases-target-mode-driver-software-developer-kit.html |archive-url=https://web.archive.org/web/20091015054651/http://www.emulex.com/resources/press-releases/2009/list/sep-15-2009-emulex-releases-target-mode-driver-software-developer-kit.html |url-status=dead |archive-date=October 15, 2009 |title=SDK Brings Enhanced Value and Expanded Market Opportunity to Data Center Storage Solution Developers |first1=Katherine |last1=Lane |publisher=Emulex |date=September 15, 2009 |accessdate=August 10, 2018}}{{cite web |url=http://www.emulex.com/products/software-developer-kits/targetconnect/info/overview.html |archive-url=https://web.archive.org/web/20091014060657/http://www.emulex.com/products/software-developer-kits/targetconnect/info/overview.html |url-status=dead |archive-date=October 14, 2009 |title=TargetConnect Software Developer Kit: Accelerate, Simplify and Enhance Target Driver Development |publisher=Emulex |date=September 15, 2009 |accessdate=August 10, 2018}}
The same year a sysfs interface has been added to SCST next to the already existing procfs interface.
In 2010 an FCoE target driver was donated by Cisco{{cite web |url=https://sourceforge.net/p/scst/svn/1514 |title=Initial FCoE target driver commit |first1=Joe |last1=Eykholt |date=February 20, 2010}} and Bart Van Assche ported the IBM System p SCSI target driver to SCST.{{cite web |url=https://www.spinics.net/lists/linux-scsi/msg49105.html |title=PATCH 5/7 ibmvstgt: Port from tgt to SCST |first1=Bart |last1=Van Assche |date=December 20, 2010}}
In 2011 implicit ALUA support was added to the SCST core and to the scstadmin configuration tool.{{cite web |url=https://sourceforge.net/p/scst/svn/3446 |title=PATCH scst: Add implicit ALUA support |first1=Bart |last1=Van Assche |date=May 11, 2011}} The three init scripts (scst, iscsi-scst and qla2x00t) were merged into a single init script, simplifying installation and management of SCST.
In 2013 support for QLogic InfiniBand HCA's was added in the SRP target driver.{{cite web |url=https://sourceforge.net/p/scst/svn/4824 |title=PATCH ib_srpt: Add support for QLogic InfiniBand HCA's |first1=Bart |last1=Van Assche |date=Mar 17, 2013}}
In January 2014 Mellanox donated an iSER target driver implementation to the SCST project.{{cite web |url=http://sourceforge.net/mailarchive/message.php?msg_id=31869627 |title=PATCH 0/9 iSER support for SCST |first1=Yan |last1=Burman |date=January 21, 2014}}
In May 2014 QLogic made a 16 Gbit/s QLogic target driver available and also announced to take over maintainership of the SCST QLogic target driver.{{cite web |url=http://sourceforge.net/p/scst/mailman/message/32362210/ |title=QLogic's 16G FC/FCoE HBA support |first1=Duane |last1=Grigsby |date=May 20, 2014}}
In 2016 support for asynchronous buffered and direct file I/O and also a more powerful latency measurement infrastructure were added.
In 2019 the SCST core was modified such that I/O keeps running at full speed if a LUN or storage device is added or removed.
See also
References
{{reflist|2}}
External links
- [http://www.esos-project.com/ Enterprise Storage OS] (ESOS) - An open source, high performance, block-level storage platform.
- Bill Childers, [http://www.linuxjournal.com/magazine/openfiler-open-source-network-storage-appliance OpenFiler: an Open-Source Network Storage Appliance], Linux Journal issue 181, May 2009.
- Errol Neal, [http://www.ha-guru.com/ssd-zfs-bcache-enhanceio-scst/ SSD + ZFS/bcache/EnhanceIO + SCST = Hybrid Storage Array?], ha-guru.com, 22 July 2014.
Category:Free software programmed in C
Category:Linux kernel-related software