LIO

The Linux SCSI Target Wiki

(Difference between revisions)
Jump to: navigation, search
m
m
 
(257 intermediate revisions not shown)
Line 1: Line 1:
{{Infobox software
{{Infobox software
-
| name                  = LIO Target
+
| name                  = {{Target}}
-
| logo                  = [[Image:RisingTide_Logo_small.png|180px|Logo]]
+
| logo                  = [[Image:Corp_Logo.png|180px|Logo]]
-
| screenshot            = RisingTide Systems
+
| screenshot            = {{RTS screenshot|{{Target}}}}
-
| caption                = Multiprotocol Target Engine
+
| caption                = {{Target}}
| collapsible            =  
| collapsible            =  
-
| author                = Nicholas Bellinger
+
| author                = {{Nicholas Bellinger}}
-
| developer              = RisingTide Systems LLC
+
| developer              = {{RTS legal}}
| released              = {{RTS releases|LIO|initial_date}}
| released              = {{RTS releases|LIO|initial_date}}
| discontinued          = {{RTS releases|LIO|eol_date}}
| discontinued          = {{RTS releases|LIO|eol_date}}
Line 13: Line 13:
| latest preview version = {{RTS releases|LIO|preview_ver}}
| latest preview version = {{RTS releases|LIO|preview_ver}}
| latest preview date    = {{RTS releases|LIO|preview_date}}
| latest preview date    = {{RTS releases|LIO|preview_date}}
 +
| status                = {{RTS releases|LIO|status}}
| frequently updated    =
| frequently updated    =
| programming language  = C
| programming language  = C
Line 19: Line 20:
| size                  =
| size                  =
| language              =
| language              =
-
| status                = Production
+
| genre                  = SCSI target
-
| genre                  = Target engine
+
| license                = {{GPLv2}}
-
| license                = GNU General Public License
+
| website                = {{RTS website}}
| website                = {{RTS website}}
}}
}}
-
{{Image|LIO Architecture.png|LIO architecture overview.}}
+
{{Image|LIO Architecture.png|architecture overview.}}
-
{{Image|LIO iSCSI Architecture.png|LIO iSCSI architecture diagram.}}
+
{{Image|LIO iSCSI Architecture.png|{{T}} iSCSI architecture diagram.}}
-
<!--{{Image|Portal-Groups.jpg|SCSI Portal Group architecture overview.}}-->
+
{{Image|Portal-Groups.jpg|SCSI Portal Group and multipath architecture overview.}}
{{Image|SCSI Standards Architecture.jpg|SCSI standards diagram.}}
{{Image|SCSI Standards Architecture.jpg|SCSI standards diagram.}}
-
{{Image|Tcm qla2xxx-pcie-passthrough-to-baremetal.png|TCM_QLA2xxx running at line rate HW target mode from with PCIe device passthrough with MSI-X polled interrupts across Linux/SCSI qla2xxx LLD request and response rings}}
+
{{Image|Tcm qla2xxx-pcie-passthrough-to-baremetal.png|QLogic [[Fibre Channel]] running at line rate in target mode with PCIe device passthrough and MSI-X polled interrupts across Linux/SCSI qla2xxx LLD request and response rings.}}
-
{{Image|Tcm_qla2xx-qemu-kvm-megasas-windows7-64-bit.png|TCM v4.0 QLAXXX prototype using PCIe device passthrough for target mode MSI-X interrupts, and QEMU Megasas HBA emulation into Windows7 64-bit guest.}}
+
<!--{{Image|Tcm_qla2xx-qemu-kvm-megasas-windows7-64-bit.png|TCM v4.0 qla2xxx prototype using PCIe device passthrough for target mode MSI-X interrupts, and QEMU Megasas HBA emulation into Windows7 64-bit guest.}}-->
-
{{Image|TCM Loop-OS2Warp-QEMU-KVM-HPFS.png|[[FILEIO]] with a [[Tcm_loop]] SCSI port on [[KVM]] x86_64 host running v2.6.36-rc3+ with QEMU lsi53c895a HBA emulation into an OS/2 Warp v4 guest. A HPFS partition has been formatted and mounted as DRIVE D:}}
+
<!--{{Image|TCM Loop-OS2Warp-QEMU-KVM-HPFS.png|[[FILEIO]] with a [[Tcm_loop]] SCSI port on [[Kernel-based Virtual Machine|KVM]] x86_64 host running v2.6.36-rc3+ with QEMU lsi53c895a HBA emulation into an OS/2 Warp v4 guest. A HPFS partition has been formatted and mounted as DRIVE D:.}}-->
 +
{{Image|Linux-fireware-target-bootc-macosx.png|The IEEE Firewire driver exporting IBLOCK LUNs to a MacOS-X based IEEE-1394/FireWire client.}}
-
The '''Target''' ([http://git.kernel.org/?p=linux/kernel/git/nab/lio-core-2.6.git;a=tree;f=drivers/target;hb=HEAD target_core_mod.ko]) is the generic multiprotocol target engine of LIO.  It is the standard multiprotocol target engine in Linux with 2.6.38 (spring 2011 release).<ref name=h-online>{{cite web| url=http://www.h-online.com/open/features/Kernel-Log-Coming-in-2-6-38-Part-4-Storage-1199926.html| title=Kernel Log: Coming in 2.6.38 (Part 4) - Storage| author=Thorsten Leemhuis| publisher=Heise Online| date=3/2/2011}}</ref><ref name=lkml>{{cite web| url=http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=38567333a6dabd0f2b4150e9fb6dd8e3ba2985e5| title=Trivial merge| author=Linus Torvalds| date=1/14/2011| publisher=lkml.org}}</ref><ref name=lwn>{{cite web| url=http://lwn.net/SubscriberLink/420691/eb6ae8a12222aac6/| title=Shooting at SCSI targets| author=Jonathan Corbet| date=12/22/2010| publisher=lnw.net}}</ref> LIO Target supports a wide range of [[platforms]] (from PC architecture to mobile devices, STBs and game consoles), based on a wide range of {{anchor|CPUs}}CPU architectures (x86, ia64, Alpha, [[PlayStation 3|Cell]], [[Platforms#Nintendo Gamecube|PPC]], [[TS-7800|ARM]], [[PlayStation 2|MIPS]], etc.), a growing number of [[#fabric modules|fabric modules]], and basically all existing Linux block devices for [[#backstores|backstores]].
+
'''{{Target}}''' ({{T}}) has been the Linux SCSI target since kernel version {{RTS releases|LIO|kernel_ver}}.<ref name=h-online>{{cite web| url=http://www.h-online.com/open/features/Kernel-Log-Coming-in-2-6-38-Part-4-Storage-1199926.html| title=Kernel Log: Coming in 2.6.38 (Part 4) - Storage| author=Thorsten Leemhuis| publisher=Heise Online| date=2011-03-02}}</ref><ref name=lwn>{{cite web| url=http://lwn.net/SubscriberLink/420691/eb6ae8a12222aac6/| title=Shooting at SCSI targets| author=Jonathan Corbet| date=2010-12-22| publisher=lnw.net}}</ref> It supports a rapidly growing number of [[#Fabric modules|fabric modules]], and all existing Linux block devices as [[#Backstores|backstores]].
-
The LIO [[SCSI]] engine implements a comprehensive [[SPC-3]]/[[SPC-4]] feature set with support for high-end SCSI features in a fabric-agnostic way, such as [[Persistent Reservations]] (PR) and [[Asymmetric Logical Unit Assignment]] (ALUA).
+
== Overview ==
 +
 
 +
{{Target}} is based on a SCSI engine that implements the semantics of a SCSI target as described in the SCSI Architecture Model (SAM), and supports its comprehensive [[SPC-3]]/[[SPC-4]] feature set in a fabric-agnostic way. The SCSI target core does not directly communicate with initiators and it does not directly access data on disk.
 +
 
 +
{{T}} has obtained [[VMware vSphere]]&nbsp;4 Ready certification on Buffalo [[http://www.risingtidesystems.com/doc/VMware_HCL_Buffalo.pdf PDF]] and QNAP [[http://www.risingtidesystems.com/doc/VMware_HCL_QNAP.pdf PDF]] systems, and vSphere&nbsp;5 Ready certification on Netgear [[http://www.risingtidesystems.com/doc/VMware_HCL_Netgear.pdf PDF]] and Pure Storage [[http://www.risingtidesystems.com/doc/VMware_HCL_PureStorage.pdf PDF]] systems.
 +
 
 +
Native support in OpenStack ([https://wiki.openstack.org/wiki/Cinder/LIO-Grizzly setup], [https://review.openstack.org/#/c/18274/ code]), starting with the Grizzly release, makes {{T}} also an attractive storage option for cloud deployments.
 +
 
 +
The {{T}} core ({{RTS releases|LIO|module_repo}}, see {{RTS releases|LIO|module_info}}) was released with Linux kernel {{RTS releases|LIO|kernel_ver}} on {{RTS releases|LIO|initial_date}}.<ref>{{RTS releases|LIO|kernel_rel}}</ref>
 +
 
 +
== Setup ==
 +
 
 +
''[[targetcli]]'' provides a comprehensive, powerful and easy CLI tool to configure and manage {{T}}. ''targetcli'' was developed by {{C}}.
== {{anchor|Fabric modules}}Fabric modules ==
== {{anchor|Fabric modules}}Fabric modules ==
-
The LIO ''Fabric Hardware Abstraction Layer'' (''F-HAL'') allows all protocol-specific processing to be encapsulated in fabric modules, and thus can also accommodate novel fabric technologies and requirements:
+
Fabric modules implement the "frontend" of the SCSI target. They "speak" specific protocols that transport [[SCSI]] commands. The ''Fabric Hardware Abstraction Layer'' (''F-HAL'') allows all protocol-specific processing to be encapsulated in fabric modules. The following fabric modules are available:
-
* {{anchor|iSCSI}} '''[[iSCSI]]''' ([http://git.kernel.org/?p=linux/kernel/git/nab/lio-core-2.6.git;a=tree;f=drivers/target/lio-target;hb=HEAD iscsi_target_mod.ko]): SCSI access over IP networks. Status: released.
+
* {{anchor|FC}} '''[[Fibre Channel]]''': [[SCSI]] access over FC networks with [http://www.qlogic.com QLogic] [[HBA]]s ({{RTS releases|FC-QLogic|module_repo}}, released).
-
* {{anchor|FCoE}} '''[[Fibre Channel over Ethernet|FCoE]]''' ([http://git.kernel.org/?p=linux/kernel/git/nab/lio-core-2.6.git;a=tree;f=drivers/target/tcm_fc;hb=HEAD tcm_fc.ko]): FC access over Ethernet, based on [http://open-fcoe.org open-fcoe.org]. Status: released.
+
* {{anchor|FCoE}} '''[[Fibre Channel over Ethernet]]''' (FCoE): FC access over Ethernet ({{RTS releases|FCoE|module_repo}}, released).
-
* {{anchor|FC}} '''[[Fibre Channel]]''': support for FC Host Bus Adapters (HBAs).
+
* {{anchor|FireWire|1394}} FireWire: SCSI access over FireWire / iEEE 1394 networks ({{RTS releases|FireWire|module_repo}}, released).
-
** [[QLogic]] ([http://git.kernel.org/?p=linux/kernel/git/nab/lio-core-2.6.git;a=tree;f=drivers/target/tcm_qla2xxx;hb=refs/heads/tcm_qla2xxx tcm_qla2xxx.ko]). Status: Beta.
+
* {{anchor|ibmvscsis|IBM vSCSI}} '''[[IBM vSCSI]]''': [http://www.ibm.com IBM] virtual SCSI (vSCSI) module for [http://www-03.ibm.com/systems/p/ IBM System&nbsp;p] ({{RTS releases|vSCSI|module_repo}}, RC).
-
* {{anchor|ibmvscsis|IBM vSCSI}} '''[[IBM vSCSI]]''': [http://www.ibm.com IBM] virtual SCSI (vSCSI) module for [http://www-03.ibm.com/systems/p/ IBM System&nbsp;p]. Status: Beta.
+
* {{anchor|iSCSI}} '''[[iSCSI]]''': SCSI access over IP networks ({{RTS releases|iSCSI|module_repo}}, released).
-
* {{anchor|IB}} '''[[InfiniBand]]''': support for Infiniband Host Channel Adapters (HCAs).
+
* {{anchor|iSER}} '''[[iSER]]''': [[iSCSI]] access over [[InfiniBand]] networks with [http://www.mellanox.com Mellanox] [[HCA]]s ({{RTS releases|iSER|module_repo}}, released)
-
** {{anchor|SRP}} [http://www.mellanox.com Mellanox] [[SCSI RDMA Protocol|SRP]] (tcm_ib_srpt.ko). Status: Beta.
+
* {{anchor|SRP}} '''[[SRP]]''': SCSI access over InfiniBand networks with Mellanox HCAs ({{RTS releases|SRP-Mellanox|module_repo}}, released).
-
* {{anchor|SAS}} '''[[Serial Attached SCSI|SAS]]''': Marvell. Status: Development.
+
* {{anchor|tcm_loop}} '''[[tcm_loop]]''': SCSI emulation device to serve any type of raw hardware to local applications and VMs as a fully [[SCSI]] [[SPC-4]] compliant block device, including emulation of advanced functionality ({{RTS releases|tcm_loop|module_repo}}, released).
-
* {{anchor|tcm_loop}} '''[[tcm_loop]]''' ([http://git.kernel.org/?p=linux/kernel/git/nab/lio-core-2.6.git;a=tree;f=drivers/target/tcm_loop;hb=HEAD tcm_loop.ko]): This high-speed SCSI emulation device can serve any type of raw hardware to local applications and virtual machines as a fully [[SCSI]] [[SPC-4]] compliant block device, including emulation of advanced functionality, such as [[Persistent Reservations|PRs]], [[Asymmetric Logical Unit Assignment|ALUA]], etc. Status: released.
+
* {{anchor|USB}} USB Gadget: SCSI access over USB networks ({{RTS releases|USB-Gadget|module_repo}}, released).
 +
* [[vHost]]: QEMU virtio and virtio-scsi PV guests ({{RTS releases|vHost|module_repo}}, released).
== {{anchor|Backstores}} Backstores ==
== {{anchor|Backstores}} Backstores ==
-
A backstore subsystem plugin is a physical storage object that provides the actual storage underlying an SCSI [[#Endpoint|Endpoint]]. Backstore objects can be added via the ''Storage Hardware Abstraction Layer'' (''S-HAL'') that brings storage hardware into the Target engine as raw block devices, on which the full Linux stack just works (including complex functionality such as software RAID, the LVM, snapshots, virtualization, etc.).
+
Backstores implement the {{T}} "backend". They implement the methods of accessing data on disk. A backstore subsystem plugin is a physical storage object that provides the block device underlying a SCSI [[#Endpoint|Endpoint]].
-
The Target supports the [[SCSI-3]] standard for all backstore devices (block devices and/or VFS):
+
Backstore objects can be added via the ''Storage Hardware Abstraction Layer'' (''S-HAL'') that brings storage hardware into {{T}} engine as raw block devices, on which the Linux stack just works (including complex functionality such as software RAID, LVM, snapshots, virtualization, etc.).
-
* {{anchor|FILEIO}} '''FILEIO''' (Linux VFS devices): any file on a mounted filesystem. It may be backed by a file or an underlying real block device. FILEIO is using struct file to serve block I/O with various methods (synchronous or asynchronous) and (buffered or direct). The Linux kernel code for filesystems resides in linux/fs.
+
{{T}} supports the [[SCSI-3]] standard for all backstore devices (block devices and/or VFS):
-
* {{anchor|IBLOCK}} '''IBLOCK''' (Linux BLOCK devices): any block device that appears in /sys/block. The Linux kernel code for block devices is in linux/block.
+
-
* {{anchor|PSCSI}} '''PSCSI''' (Linux physical [[SCSI]] devices): any storage object that supports direct pass-through of SCSI commands without SCSI emulation. This assumes an underlying SCSI device that appears with ''lsscsi'' in /proc/scsi/scsi, such as a SAS hard drive, etc. [[SCSI-3]] and higher is supported with this subsystem, but only for control [[CDB]]s capable by the device firmware.<br/> WARNING: Do not use PSCSI unless you know exactly how it will be used. Advanced SCSI CDBs such as for Persistent Reservations or ALUA are typically not implemented in the device firmware, and can cause malfunctions or crashes. Use IBLOCK instead.
+
-
* {{anchor|RAMDISK}} '''RAMDISK''' (Linux RAMDISK_MCP and RAMDISK_DR devices): any struct page device, such as a regular ramdisk. This type of device is typically used for bandwidth testing.
+
-
The SCSI functionality is implemented directly in the target engine in a fabric agnostic way, including a number of high-end features, such as [[Persistent Reservations]] (PRs) and [[Asymmetric Logical Unit Assignment]] (ALUA), which have been available with LIO 3, following the [[SPC-4]] standard.
+
* {{anchor|FILEIO}} '''FILEIO''' (Linux VFS devices): any file on a mounted filesystem. It may be backed by a file or an underlying real block device. FILEIO is using struct file to serve block I/O with various methods (synchronous or asynchronous) and (buffered or direct). The Linux kernel code for filesystems resides in ''linux/fs''. By default, [[FILEIO]] uses non-buffered mode (<code>O_SYNC</code> set).
-
== Rollout ==
+
{{Ambox| type=warning| head=Do not use buffered FILEIO| text=Creating a FILEIO backend with ''buffered=True'' enables the buffer cache. While this can provide significant performance increases, it also creates a serious data integrity hazard: If the system crashes for any reason, an unflushed buffer cache can cause the entire backstore to be irrecoverably corrupted.}}
-
* Linux 2.6.38: generic multiprotocol target engine
+
* {{anchor|IBLOCK}} '''IBLOCK''' (Linux BLOCK devices): any block device that appears in ''/sys/block''. The Linux kernel code for block devices is in ''linux/block''.
-
* Linux 2.6.39: [[iSCSI]], [[Fibre Channel over Ethernet|FCoE]], [[IBM vSCSI]] and [[tcm_loop]]
+
-
* Linux 2.6.40: [[Fibre Channel]] and [[InfiniBand]]
+
-
* Linux 2.6.41: SCSI Referrals
+
-
== Setup ==
+
{{Ambox| type=info| head=Recommended for performance| text=IBLOCK backstores usually provide the best performance.}}
-
The [http://linux-iscsi.org/builds/docs/LIO-3.0-Users_Reference_Manual.pdf LIO 3 CLI] manual describes a simple userspace shell ([[lio-utils]]) for LIO 3 (Target+[[iSCSI]]). It also describes how to setup a number of different subsystem storage object backstores for LIO LUN endpoints:
+
* {{anchor|PSCSI}} '''PSCSI''' (Linux pass-through [[SCSI]] devices): any storage object that supports direct pass-through of SCSI commands without SCSI emulation. This assumes an underlying SCSI device that appears with ''lsscsi'' in ''/proc/scsi/scsi'', such as a SAS hard drive, etc. [[SCSI-3]] and higher is supported with this subsystem, but only for control [[CDB]]s capable by the device firmware.
-
* [[Lio-utils#Target|Target CLI]]: basic Target v3 CLI operations using ''tcm_node.py'' from [[lio-utils]].
+
{{Ambox| type=warning| head=Do not use PSCSI| text=Do not use PSCSI unless you know exactly how it will be used. Advanced SCSI CDBs such as for [[Persistent Reservations]] or [[Asymmetric Logical Unit Assignment|ALUA]]s (used e.g. by [[VMware ESX]] and [[VMware vSphere|vSphere]]) are typically not implemented in the device firmware, and can cause malfunctions or crashes. Use IBLOCK for production setups instead.}}
-
* [[Lio-utils#iSCSI|iSCSI CLI]]: basic [[iSCSI]] v3 CLI operations using ''lio_node.py'' and ''lio_dump.py'' from [[lio-utils]].
+
-
* [[lio-utils HOWTO#Starting|HOWTO]]: starting the Target.
+
-
[[RisingTide Systems]] makes available upon request and for free [[RTSadmin]], a comprehensive, powerful, yet easy storage management tool that can efficiently handle even complex LIO installations.
+
* {{anchor|RAMDISK|RAMDISK_MCP|RD_MCP}} '''Memory Copy RAMDISK''' (Linux RAMDISK_MCP): Memory Copy ram disks (''rd_mcp'') provide ram disks with full SCSI emulation and separate memory mappings using memory copy for initiators, thus providing multi-session capability. This is most useful for fast volatile mass storage for production.
-
Lastly, the Target engine configuration is mapped into [[Target/configFS]], where it can be configured manually from user space by using inter- and intra-module symbolic links.
+
SCSI functionality is implemented directly in the {{T}} engine in a fabric-agnostic way, including a number of high-end features, such as [[Persistent Reservations]] (PRs), [[Asymmetric Logical Unit Assignment]] (ALUA), [[vStorage APIs for Array Integration]] (VAAI) following the [[SPC-4]] standard.
-
== Specifications ==  
+
The backstore devices ([[FILEIO]], [[IBLOCK]], [[pSCSI]], [[RAMDISK]], etc.) report the underlying HW limitiations for things like TCQ depth, ''MaxSectors'', ''TaskAbortedStatus'', ''UA Interlocking'', etc. All of these values are available as attributes in the ''[[targetcli]]'' device context.
 +
 
 +
== Specifications ==
{{anchor|T10}}The following specifications are available as [http://www.t10.org/drafts.htm T10 Working Drafts]:
{{anchor|T10}}The following specifications are available as [http://www.t10.org/drafts.htm T10 Working Drafts]:
-
* {{anchor|SAM-2|SCSI-2}} '''SCSI Architecture Model - 2''' ('''SAM-2'''): SAM-2 describes the second generation of the SCSI Architecture Model. Status: Published, 9/11/2002
+
* {{anchor|SAM-2|SCSI-2}} '''SCSI Architecture Model - 2''' ('''SAM-2'''): SAM-2 describes the second generation of the SCSI Architecture Model. Status: Published, 2002-09-11
-
* {{anchor|SAM-3|SCSI-3}} '''SCSI Architecture Model - 3''' ('''SAM-3'''): SAM-3 describes the third generation of the SCSI Architecture Model. Status: Published, 9/21/2004
+
* {{anchor|SAM-3|SCSI-3}} '''SCSI Architecture Model - 3''' ('''SAM-3'''): SAM-3 describes the third generation of the SCSI Architecture Model. Status: Published, 2004-09-21
-
* {{anchor|SAM-4|SCSI-4}} '''SCSI Architecture Model - 4''' ('''SAM-4'''): SAM-4 describes the fourth generation of the SCSI Architecture Model. Status: Published, 5/8/2008
+
* {{anchor|SAM-4|SCSI-4}} '''SCSI Architecture Model - 4''' ('''SAM-4'''): SAM-4 describes the fourth generation of the SCSI Architecture Model. Status: Published, 2008-05-08
-
* {{anchor|SPC-2}} '''SCSI Primary Commands - 2''' ('''SPC-2'''): contains the second-generation definition of the basic commands for all SCSI devices. SPC-2 is used in conjuction with a standard for the specific device type. In 2006, the ANSI SPC-2 standard was replaced with ISO/IEC 14776-452:2005, which is available through ANSI. Status: Published, 7/18/2001
+
* {{anchor|SPC-2}} '''SCSI Primary Commands - 2''' ('''SPC-2'''): contains the second-generation definition of the basic commands for all SCSI devices. SPC-2 is used in conjuction with a standard for the specific device type. In 2006, the ANSI SPC-2 standard was replaced with ISO/IEC 14776-452:2005, which is available through ANSI. Status: Published, 2001-07-18
-
* {{anchor|SPC-3}} '''SCSI Primary Commands - 3''' ('''SPC-3'''): contains the third-generation definition of the basic commands for all SCSI devices. SPC-3 is used in conjuction with a standard for the specific device type. Status: Published, 5/4/2005
+
* {{anchor|SPC-3}} '''SCSI Primary Commands - 3''' ('''SPC-3'''): contains the third-generation definition of the basic commands for all SCSI devices. SPC-3 is used in conjuction with a standard for the specific device type. Status: Published, 2005-05-04
-
* {{anchor|SPC-4}} '''SCSI Primary Commands - 4''' ('''SPC-4'''): contains the fourth-generation definition of the basic commands for all SCSI devices. SPC-4 is used in conjuction with a standard for the specific device type. Status: Development, 11/16/2010
+
* {{anchor|SPC-4}} '''SCSI Primary Commands - 4''' ('''SPC-4'''): contains the fourth-generation definition of the basic commands for all SCSI devices. SPC-4 is used in conjuction with a standard for the specific device type. Status: Development, 2010-11-16
-
* '''Small Computer System Interface - 2''' ('''SCSI-2'''): SCSI-2 defines the second generation of the Small Computer System Interface. Status: Published, 9/7/1993
+
* '''Small Computer System Interface - 2''' ('''SCSI-2'''): SCSI-2 defines the second generation of the Small Computer System Interface. Status: Published, 1993-09-07
== Glossary ==
== Glossary ==
Line 105: Line 113:
* {{anchor|CID}} '''Connection Identifier''' ('''CID'''): A 16-bit number, generated by the Initiator, that uniquely identifies a connection between two iSCSI devices. This number is presented during the login phase.
* {{anchor|CID}} '''Connection Identifier''' ('''CID'''): A 16-bit number, generated by the Initiator, that uniquely identifies a connection between two iSCSI devices. This number is presented during the login phase.
* {{anchor|CID}} '''Endpoint''': The combination of an iSCSI TargetName with an iSCSI [[TPG]] Tag ([[IQN]] + Tag).
* {{anchor|CID}} '''Endpoint''': The combination of an iSCSI TargetName with an iSCSI [[TPG]] Tag ([[IQN]] + Tag).
-
* {{anchor|Demo Mode}} '''Demo Mode''': Means disabling authentification for an iSCSI Endpoint, i.e. its [[ACL]]s are diabled. Demo Mode grants read-only access to all iSCSI Initiators that attempt to connect to that specific Endpoint.
+
* {{anchor|CNA}} '''Converged Network Adapter''' ('''CNA'''): An Ethernet PCIe network adapter ([[NIC]]) that natively supports [[RDMA]] (via [[RoCE]]), also called [[RNIC]].
 +
* {{anchor|Demo Mode}} '''Demo Mode''': Means disabling authentification for an iSCSI Endpoint, i.e. its [[ACL]]s are diabled. Demo Mode grants read-only access to all iSCSI Initiators that attempt to connect to that specific Endpoint. See the [[iSCSI]] entry on how to enable [[iSCSI#Demo mode|Demo Mode]].
 +
* {{anchor|DIF}} '''Data Integrity Field''' ('''DIF'''): Is an approach to protect data integrity in computer data storage. It was proposed in 2003 by the T10 committee of the International Committee for Information Technology Standards.
* {{anchor|EUI}} '''Extended Unique Identifier''' ('''EUI'''): A 64-bit number that uniquely identifies every device in the world. The format consists of 24 bits that are unique to a given company, and 40 bits assigned by the company to each device it builds.
* {{anchor|EUI}} '''Extended Unique Identifier''' ('''EUI'''): A 64-bit number that uniquely identifies every device in the world. The format consists of 24 bits that are unique to a given company, and 40 bits assigned by the company to each device it builds.
-
* {{anchor|I_T Nexus}} '''I_T Nexus''': An I_T Nexus denotes a live session between an [[Initiator]] and a Target.
+
* {{anchor|I_T Nexus}} '''I_T Nexus''': An I_T Nexus denotes a live session between an [[Initiator]] and a target.
* {{anchor|Initiator}} '''[[Initiator]]''': The originating end of a SCSI session. Typically a controlling device such as a computer.
* {{anchor|Initiator}} '''[[Initiator]]''': The originating end of a SCSI session. Typically a controlling device such as a computer.
* {{anchor|IPS}} '''Internet Protocol Storage''' ('''IPS'''): The class of protocols or devices that use the IP protocol to move data in a storage network. FCIP, iFCP, and [[iSCSI]] are all examples of IPS protocols.
* {{anchor|IPS}} '''Internet Protocol Storage''' ('''IPS'''): The class of protocols or devices that use the IP protocol to move data in a storage network. FCIP, iFCP, and [[iSCSI]] are all examples of IPS protocols.
-
* {{anchor|IQN}} '''iSCSI Qualified Name''' ('''IQN'''): A name format for iSCSI that uniquely identifies every device in the world (e.g. <code>iqn.5886.com.acme.tapedrive.sn-a12345678</code>).
+
* {{anchor|IQN}} '''iSCSI Qualified Name''' ('''IQN'''): A name format for iSCSI that uniquely identifies every device in the world (e.g. iqn.5886.com.acme.tapedrive.sn-a12345678).
-
* {{anchor|ISID}} '''Initiator Session Identifier''' ('''ISID'''): A 48-bit number, generated by the Initiator, that uniquely identifies a session between the Initiator and the Target. This value is created during the login process, and is sent to the target with a Login PDU.
+
* {{anchor|ISID}} '''Initiator Session Identifier''' ('''ISID'''): A 48-bit number, generated by the Initiator, that uniquely identifies a session between the Initiator and the target. This value is created during the login process, and is sent to the target with a Login PDU.
* {{anchor|MPIO}} '''Multipath I/O''' ('''MPIO'''): A method by which data can take multiple redundant paths between a server and storage.
* {{anchor|MPIO}} '''Multipath I/O''' ('''MPIO'''): A method by which data can take multiple redundant paths between a server and storage.
* {{anchor|Network Portal}} '''Network Portal''': The combination of an iSCSI Endpoint with an IP address plus a TCP port. The TCP port number for the iSCSI protocol defined by IANA is 3260.
* {{anchor|Network Portal}} '''Network Portal''': The combination of an iSCSI Endpoint with an IP address plus a TCP port. The TCP port number for the iSCSI protocol defined by IANA is 3260.
 +
* {{anchor|NIC}} '''Network Interface Card''' ('''NIC'''): An Ethernet PCIe network adapter.
 +
* {{anchor|NPIV}} '''N_Port ID Virtualization''' ('''NPIV'''): is a [[Fibre Channel]] facility allowing multiple N_Port IDs to share a single physical N_Port. This allows multiple Fibre Channel initiators to occupy a single physical port, easing hardware requirements in Storage Area Network design, especially where virtual SANs are called for. NPIV is defined by the Technical Committee T11 in the Fibre Channel - Link Services (FC-LS) specification.
 +
* {{anchor|NTB}} '''Non-Transparent Bridging''' ('''NTB'''): Non-transparent bridges in PCI systems support intelligent adapters in enterprise systems and multiple processors in embedded systems. The Intel DrawBridge established the paradigm of the embedded bridge and became a defacto standard in such environments as Compact PCI and intelligent adapters for enterprise systems. In these systems, the non-transparent bridge functions as a gateway between the local subsystem and the backplane.<ref>{{cite book |url=http://download.intel.com/design/intarch/papers/323328.pdf |title=Intel® Xeon® Processor C5500/C3500 Series Non-Transparent Bridge |series=323328-001 |author=Mark J. Sullivan |publisher=Intel |location=Santa Clara |date=January 2010}}</ref>
* {{anchor|OUI}} '''Organizationally Unique Identifier''' ('''OUI''') is a 24-bit number that is purchased from the IEEE Registration Authority. This identifier uniquely identifies a vendor, manufacturer, or other organization (referred to by the IEEE as the “assignee”) globally or worldwide and effectively reserves a block of each possible type of derivative identifier (such as MAC addresses, group addresses, Subnetwork Access Protocol protocol identifiers, etc.) for the exclusive use of the assignee, see [http://en.wikipedia.org/wiki/Organizationally_Unique_Identifier OUI Wikipedia entry]. The OUI is subsequently used by the assignee to create particular instances of these identifiers for various purposes, such as the identification of a particular piece of equipment.
* {{anchor|OUI}} '''Organizationally Unique Identifier''' ('''OUI''') is a 24-bit number that is purchased from the IEEE Registration Authority. This identifier uniquely identifies a vendor, manufacturer, or other organization (referred to by the IEEE as the “assignee”) globally or worldwide and effectively reserves a block of each possible type of derivative identifier (such as MAC addresses, group addresses, Subnetwork Access Protocol protocol identifiers, etc.) for the exclusive use of the assignee, see [http://en.wikipedia.org/wiki/Organizationally_Unique_Identifier OUI Wikipedia entry]. The OUI is subsequently used by the assignee to create particular instances of these identifiers for various purposes, such as the identification of a particular piece of equipment.
 +
* {{anchor|RNIC}} '''[[RDMA]] [[NIC]]''' ('''RNIC'''): An Ethernet PCIe network adapter ([[NIC]]) that natively supports RDMA (via [[RoCE]]), also called [[CNA]].
* {{anchor|SAM}} '''SCSI Architectural Model''' ('''SAM'''): A document that describes the behavior of SCSI in general terms, allowing for different types of devices communicating over various media.
* {{anchor|SAM}} '''SCSI Architectural Model''' ('''SAM'''): A document that describes the behavior of SCSI in general terms, allowing for different types of devices communicating over various media.
-
* {{anchor|Target}} '''Target''': The receiving end of a SCSI session, typically a device such as a disk drive, solid state drive, tape drive, or scanner.
+
* {{anchor|Target}} SCSI '''Target''': The receiving end of a SCSI session, typically a device such as a disk drive, solid state drive, tape drive, or scanner.
* {{anchor|Target Group}} '''Target Group''': A collection of fabric module SCSI target endpoints containing SCSI target ports that provide access to individual storage objects.
* {{anchor|Target Group}} '''Target Group''': A collection of fabric module SCSI target endpoints containing SCSI target ports that provide access to individual storage objects.
* {{anchor|Target Port}} '''Target Port''': The combination of an iSCSI Endpoint with one or more LUNs.
* {{anchor|Target Port}} '''Target Port''': The combination of an iSCSI Endpoint with one or more LUNs.
 +
* {{anchor|TOE}} '''TCP/IP Offload Engine''' ('''TOE'''): An enhanced NIC that runs a full TCP/IP stack independent from the main CPU and OS.
* {{anchor|TPG}} '''Target Portal Group''' ('''TPG'''): A list of IP addresses and TCP port numbers that determines which interfaces a specific iSCSI target will listen to.
* {{anchor|TPG}} '''Target Portal Group''' ('''TPG'''): A list of IP addresses and TCP port numbers that determines which interfaces a specific iSCSI target will listen to.
* {{anchor|TSID}} '''Target Session Identifier''' ('''TSID'''): A 16-bit number, generated by the target, that uniquely identifies a session between the initiator and the target. This value is created during the login process, and is sent to the initiator with a Login Response PDU.
* {{anchor|TSID}} '''Target Session Identifier''' ('''TSID'''): A 16-bit number, generated by the target, that uniquely identifies a session between the initiator and the target. This value is created during the login process, and is sent to the initiator with a Login Response PDU.
Line 125: Line 140:
** New addressing schema: the first nibble is either hex 5 or 6 followed by a 3-byte vendor identifier and 36 bits for a vendor-specified serial number
** New addressing schema: the first nibble is either hex 5 or 6 followed by a 3-byte vendor identifier and 36 bits for a vendor-specified serial number
-
== RFCs ==
+
== Inclusion in Linux distributions ==
-
* {{RFC|1994|PPP Challenge Handshake Authentication Protocol (CHAP)}}
+
 
 +
{{T}} and ''[[targetcli]]'' are included in most Linux distributions per default. Here is an overview over the most popular distributions:
 +
 
 +
{{Linux Inclusion}}
== Timeline ==
== Timeline ==
-
{{LIO Timeline}}
 
-
== See also ==
+
{{T}} and fabric modules have gone upstream into the Linux kernel as follows:
-
* Platforms: PC architecture (x86/ia64), [[PlayStation 2]] and [[PlayStation 3]] (Cell), etc.
+
-
* Fabric modules: [[iSCSI]], [[Fibre Channel]], [[Fibre Channel over Ethernet|FCoE]], [[InfiniBand]], [[IBM vSCSI]], [[tcm_loop]]
+
-
* Distributions: [[RTS Director]], RHEL 4.x/5.x, SLES11, [[CentOS]], [[Debian]], [[Ubuntu]], etc.
+
-
* Configuration: [[RTSadmin]] and [[lio-utils]]
+
-
* [[ConfigFS]] low level kernel API
+
-
* [[SCSI]]
+
-
== Notes ==
+
* Linux 2.6.38 (2011-03-14<ref>{{cite web| url=https://lkml.org/lkml/2011/3/14/508| title=Linux 2.6.38| author=Linus Torvalds| date=2011-03-14| publisher=lkml.org}}</ref>): {{T}} [[SCSI]] target core<ref>{{cite web| url=http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=38567333a6dabd0f2b4150e9fb6dd8e3ba2985e5| title=Target merge| author=Linus Torvalds| date=2011-01-14| publisher=lkml.org}}</ref>
-
{{Reflist}}
+
* Linux 2.6.39 (2011-05-18<ref>{{cite web| url=https://lkml.org/lkml/2011/5/19/16| title=Linux 2.6.39| author=Linus Torvalds| date=2011-05-18| publisher=lkml.org}}</ref>): [[tcm_loop]] (SCSI support on top of any raw hardware)
 +
* Linux 3.0 (2011-07-21<ref>{{cite web| url=https://lkml.org/lkml/2011/7/21/455| title=Linux 3.0| author=Linus Torvalds| date=2011-07-21| publisher=lkml.org}}</ref>): [[Fibre Channel over Ethernet|FCoE]] (by Cisco)
 +
* Linux 3.1 (2011-10-24<ref>{{cite web| url=https://lkml.org/lkml/2011/10/24/212| title=Linux 3.1| author=Linus Torvalds| date=2011-10-24| publisher=lkml.org}}</ref>): [[iSCSI]]<ref>{{cite web| url=http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=91d41fdf31f74e6e2e5f3cb018eca4200e36e202| title=iSCSI merge| author=Linus Torvalds| date=2011-07-27| publisher=lkml.org}}</ref>
 +
* Linux 3.3 (2012-03-18<ref>{{cite web| url=https://lkml.org/lkml/2012/3/18/132| title=Linux 3.3 release| author=Linus Torvalds| date=2012-03-18| publisher=lkml.org}}</ref>): [[InfiniBand]]/[[SRP]]<ref>{{cite web| url=http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=f59e842fc0871cd5baa213dc32e0ce8e5aaf4758| title=InfiniBand/SRP merge| author=Linus Torvalds| date=2012-01-18| publisher=lkml.org}}</ref> (Mellanox HCAs)
 +
* Linux 3.5 (2012-07-21<ref>{{cite web| url=http://marc.info/?l=linux-kernel&m=134290924929425&w=2| title=Linux 3.5 released| author=Linus Torvalds| date=2012-07-21| publisher=marc.info}}</ref>): [[Fibre Channel]] (QLogic HBAs),<ref>{{cite web|url=http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=054552272e6e152ff40f8b7f164dd390a5a62097 |title=scsi-misc| author=Linus Torvalds| date=2012-05-31| publisher=lkml.org}}</ref> USB Gadget<ref>{{cite web|url=http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=ba01a87e37d3ca9efe141e2907c2ec3f89490b4f |title=usb-target-merge| author=Linus Torvalds| date=2012-05-22| publisher=lkml.org}}</ref> and IEEE 1394<ref>{{cite web|url=http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=2c13bc0f8f0d3e13b42be70bf74fec8e56b58324 |title=sbp-target-merge| author=Linus Torvalds| date=2012-05-23| publisher=lkml.org}}</ref>
 +
* Linux 3.6 (2012-10-01<ref>{{cite web| url=https://lkml.org/lkml/2012/9/30/152| title=Linux 3.6| author=Linus Torvalds| date=2012-10-01| publisher=lkml.org}}</ref>): [[vHost]] (QEMU virtio and virtio-scsi PV guests)<ref>{{cite web|url=http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=f82202bae3f7f076402b16ca7bced9928aad16d0 |title=tcm_vhost: Initial merge for vhost level target fabric driver| author=Linus Torvalds| date=2012-08-13| publisher=lkml.org}}</ref>
 +
* Linux 3.9 (2013-04-28<ref>{{cite web| url=https://lkml.org/lkml/2013/4/28/69| title=Linux 3.9 released| author=Linus Torvalds| date=2013-04-28| publisher=lkml.org}}</ref>): [[Fibre Channel|16 GFC]] (QLogic HBAs)
 +
* Linux 3.10 (2013-06-30<ref>{{cite web| url=http://marc.info/?l=linux-kernel&m=137263382100690&w=2| title=Linux 3.10| author=Linus Torvalds| date=2013-06-30| publisher=marc.org}}</ref>): [[InfiniBand]]/[[iSER]] (Mellanox HCAs and CNAs)
 +
* Linux 3.12 (2013-11-03<ref>{{cite web| url=https://lkml.org/lkml/2013/11/3/160| title=Linux 3.12 released..| author=Linus Torvalds| date=2013-11-03| publisher=lkml.org}}</ref>): [[VAAI]]
 +
* Linux 3.14 (2014-03-30<ref>{{cite web| url=http://kernelnewbies.org/Linux_3.14| title=Linux 3.14| date=2014-03-30| publisher=kernelnewbies.org}}</ref>): T10 [[DIF]] core, T10 Referrals, [[NPIV]]
 +
* Linux 3.15 (2014-06-08<ref>{{cite web| url=http://kernelnewbies.org/Linux_3.15| title=Linux 3.15| date=2014-06-08| publisher=kernelnewbies.org}}</ref>): T10 DIF iSER
 +
* Linux 3.16 (2014-08-03<ref>{{cite web| url=http://kernelnewbies.org/Linux_3.16| title=Linux 3.16| date=2014-08-03| publisher=kernelnewbies.org}}</ref>): Qlogic T10 DIF, vhost T10 DIF
 +
* Linux 3.17 (2014-10-05<ref>{{cite web| url=http://kernelnewbies.org/Linux_3.17| title=Linux 3.17| date=2014-10-05| publisher=kernelnewbies.org}}</ref>): Userspace backend (TCMU), Xen host paravirtualized driver (xen-back)
 +
* Linux 3.20 (planned): Update vhost-scsi to support virtio v1.0 specification requirements
 +
* Linux 3.22 (planned): NVMe-OF reference target driver
 +
 
 +
== Wikipedia ==
-
== Wikipedia entries ==
 
* Fabrics: [http://en.wikipedia.org/wiki/ATA_over_Ethernet ATA over Ethernet] (AoE), [http://en.wikipedia.org/wiki/Fibre_Channel_over_Ethernet FibreChannel over Ethernet] (FCoE), [http://en.wikipedia.org/wiki/Fibre_Channel FibreChannel] (FC), [http://en.wikipedia.org/wiki/InfiniBand InfiniBand] (IB), [http://en.wikipedia.org/wiki/iSCSI iSCSI], [http://en.wikipedia.org/wiki/iSCSI_Extensions_for_RDMA iSCSI Extensions for RDMA] (iSER), [http://en.wikipedia.org/wiki/IWARP Internet Wide Area RDMA Protocol] (iWARP), and [http://en.wikipedia.org/wiki/SCSI_RDMA_Protocol SCSI RDMA Protocol] (SRP)
* Fabrics: [http://en.wikipedia.org/wiki/ATA_over_Ethernet ATA over Ethernet] (AoE), [http://en.wikipedia.org/wiki/Fibre_Channel_over_Ethernet FibreChannel over Ethernet] (FCoE), [http://en.wikipedia.org/wiki/Fibre_Channel FibreChannel] (FC), [http://en.wikipedia.org/wiki/InfiniBand InfiniBand] (IB), [http://en.wikipedia.org/wiki/iSCSI iSCSI], [http://en.wikipedia.org/wiki/iSCSI_Extensions_for_RDMA iSCSI Extensions for RDMA] (iSER), [http://en.wikipedia.org/wiki/IWARP Internet Wide Area RDMA Protocol] (iWARP), and [http://en.wikipedia.org/wiki/SCSI_RDMA_Protocol SCSI RDMA Protocol] (SRP)
* Services: [http://en.wikipedia.org/wiki/Service_Location_Protocol Service Location Protocol] (SLP), [http://en.wikipedia.org/wiki/Internet_Storage_Name_Service Internet Storage Name Service] (iSNS)
* Services: [http://en.wikipedia.org/wiki/Service_Location_Protocol Service Location Protocol] (SLP), [http://en.wikipedia.org/wiki/Internet_Storage_Name_Service Internet Storage Name Service] (iSNS)
* Other: [http://en.wikipedia.org/wiki/Storage_Area_Network Storage Area Network] (SAN),  [http://en.wikipedia.org/wiki/Serial_attached_SCSI Serial attached SCSI] (SAS), [http://en.wikipedia.org/wiki/World_Wide_Name World Wide Name] (WWN)
* Other: [http://en.wikipedia.org/wiki/Storage_Area_Network Storage Area Network] (SAN),  [http://en.wikipedia.org/wiki/Serial_attached_SCSI Serial attached SCSI] (SAS), [http://en.wikipedia.org/wiki/World_Wide_Name World Wide Name] (WWN)
 +
 +
== Contact ==
 +
 +
Please direct all technical discussion on ''targetcli'' to the [http://www.spinics.net/lists/target-devel/ target-devel] mailing list ([mailto:target-devel@vger.kernel.org post], [mailto:majordomo@vger.kernel.org&body=subscribe%20target-devel subscribe], [http://vger.kernel.org/vger-lists.html#target-devel list info], [http://dir.gmane.org/gmane.linux.scsi.target.devel gmane archive]). Please see [[Support]] for more information.
 +
 +
== See also ==
 +
 +
* [[{{OS}}]], [[targetcli]]
 +
* Fabric modules: [[FCoE]], [[Fibre Channel]], [[IBM vSCSI]], [[iSCSI]], [[iSER]], [[SRP]], [[vHost]]
 +
* Distributions: [[RHEL]] 4/5/6, SLES11, [[CentOS]], [[Debian]], [[Fedora]], [[openSUSE]], [[Ubuntu]], etc.
 +
* Platforms: PC architecture (x86/ia64), [[PlayStation 2]] and [[PlayStation 3]] (Cell), etc.
 +
* Low level kernel API: [[configFS]]
 +
* Standards: [[SCSI]]
 +
 +
== Notes ==
 +
 +
{{Reflist}}
== External links ==
== External links ==
-
* LIO Wikipedia entries: [http://de.wikipedia.org/wiki/LIO German]
+
 
 +
* {{T}} Wikipedia entries: [http://de.wikipedia.org/wiki/LIO German] [http://en.wikipedia.org/wiki/LIO_Target English]
 +
* {{LIO Admin Manual}}
 +
* RTSlib Reference Guide {{Lib Ref Guide HTML}}{{Lib Ref Guide PDF}}
* [http://www.scsi4me.com/scsi-connectors.htm Adapters by SCSI connector type]
* [http://www.scsi4me.com/scsi-connectors.htm Adapters by SCSI connector type]
* [http://www.ibm.com/developerworks/linux/library/l-scsi-subsystem/?ca=dgr-lnxw57LinuxSCSIsub&S_TACT=105AGX59&S_CMP=GR Anatomy of the Linux SCSI subsystem]
* [http://www.ibm.com/developerworks/linux/library/l-scsi-subsystem/?ca=dgr-lnxw57LinuxSCSIsub&S_TACT=105AGX59&S_CMP=GR Anatomy of the Linux SCSI subsystem]
Line 160: Line 206:
* [http://www.t10.org/drafts.htm#SBC_Family T10 Block Commands (SBC) using SBC-3]
* [http://www.t10.org/drafts.htm#SBC_Family T10 Block Commands (SBC) using SBC-3]
* [http://blackmagic02881.wetpaint.com wetpaint.com] Fun storage stuff (Ming Zhang)
* [http://blackmagic02881.wetpaint.com wetpaint.com] Fun storage stuff (Ming Zhang)
 +
 +
{{LIO Timeline}}
[[Category:T10]]
[[Category:T10]]
-
[[Category:Target]]
+
[[Category:LIO]]
[[Category:SCSI]]
[[Category:SCSI]]
__NOEDITSECTION__
__NOEDITSECTION__

Latest revision as of 02:17, 12 March 2016

LinuxIO
Logo
LIO 150513.png
LinuxIO
Original author(s) Nicholas Bellinger
Developer(s) Datera, Inc.
Initial release January 14, 2011 (2011-01-14)
Stable release 4.1.0 / June 20, 2012;
7 years ago
 (2012-06-20)
Preview release 4.2.0-rc5 / June 28, 2012;
7 years ago
 (2012-06-28)
Development status Production
Written in C
Operating system Linux
Type SCSI target
License GNU General Public License, version 2 (GPLv2)
Website datera.io
architecture overview.
LIO iSCSI architecture diagram.
SCSI Portal Group and multipath architecture overview.
SCSI standards diagram.
QLogic Fibre Channel running at line rate in target mode with PCIe device passthrough and MSI-X polled interrupts across Linux/SCSI qla2xxx LLD request and response rings.
The IEEE Firewire driver exporting IBLOCK LUNs to a MacOS-X based IEEE-1394/FireWire client.

LinuxIO (LIO) has been the Linux SCSI target since kernel version 2.6.38.[1][2] It supports a rapidly growing number of fabric modules, and all existing Linux block devices as backstores.

Contents

Overview

LinuxIO is based on a SCSI engine that implements the semantics of a SCSI target as described in the SCSI Architecture Model (SAM), and supports its comprehensive SPC-3/SPC-4 feature set in a fabric-agnostic way. The SCSI target core does not directly communicate with initiators and it does not directly access data on disk.

LIO has obtained VMware vSphere 4 Ready certification on Buffalo [PDF] and QNAP [PDF] systems, and vSphere 5 Ready certification on Netgear [PDF] and Pure Storage [PDF] systems.

Native support in OpenStack (setup, code), starting with the Grizzly release, makes LIO also an attractive storage option for cloud deployments.

The LIO core (target_core.ko, see Linux kernel driver database) was released with Linux kernel 2.6.38 on January 14, 2011 (2011-01-14).[3]

Setup

targetcli provides a comprehensive, powerful and easy CLI tool to configure and manage LIO. targetcli was developed by Datera.

Fabric modules

Fabric modules implement the "frontend" of the SCSI target. They "speak" specific protocols that transport SCSI commands. The Fabric Hardware Abstraction Layer (F-HAL) allows all protocol-specific processing to be encapsulated in fabric modules. The following fabric modules are available:

Backstores

Backstores implement the LIO "backend". They implement the methods of accessing data on disk. A backstore subsystem plugin is a physical storage object that provides the block device underlying a SCSI Endpoint.

Backstore objects can be added via the Storage Hardware Abstraction Layer (S-HAL) that brings storage hardware into LIO engine as raw block devices, on which the Linux stack just works (including complex functionality such as software RAID, LVM, snapshots, virtualization, etc.).

LIO supports the SCSI-3 standard for all backstore devices (block devices and/or VFS):

SCSI functionality is implemented directly in the LIO engine in a fabric-agnostic way, including a number of high-end features, such as Persistent Reservations (PRs), Asymmetric Logical Unit Assignment (ALUA), vStorage APIs for Array Integration (VAAI) following the SPC-4 standard.

The backstore devices (FILEIO, IBLOCK, pSCSI, RAMDISK, etc.) report the underlying HW limitiations for things like TCQ depth, MaxSectors, TaskAbortedStatus, UA Interlocking, etc. All of these values are available as attributes in the targetcli device context.

Specifications

The following specifications are available as T10 Working Drafts:

Glossary

Inclusion in Linux distributions

LIO and targetcli are included in most Linux distributions per default. Here is an overview over the most popular distributions:

Distribution Version[Linux 1] Release Archive Install Source git[Linux 2] Documentation
CentOS 6.2 2011-12-20 CentOS mirror su -c 'yum install fcoe-target-utils' targetcli-fb.git Tech Notes
Debian 7.0 ("wheezy") TBA Debian pool su -c 'apt-get install targetcli' targetcli
Fedora 16, 17/18 2011-11-08 Fedora Rawhide su -c 'yum install targetcli' targetcli-fb.git Target Wiki
openSUSE 12.1 2011-11-08 Requires manual installation from targetcli.
RHEL 6.2 2011-11-16 Fedora Rawhide su -c 'yum install fcoe-target-utils' targetcli-fb.git Tech Notes
Scientific Linux 6.2 2012-02-16 SL Mirror su -c 'yum install fcoe-target-utils' targetcli-fb.git Tech Notes
SLES SP2 2012-02-15 Requires manual installation from targetcli.
Ubuntu PrecisePangolin v12 2012-04-26 Ubuntu universe su -c 'apt-get install targetcli' targetcli
  1. The distribution release where LIO was included first.
  2. Technical support, and qualified backports to other kernels and distributions are available from Datera.

Timeline

LIO and fabric modules have gone upstream into the Linux kernel as follows:

Wikipedia

Contact

Please direct all technical discussion on targetcli to the target-devel mailing list (post, subscribe, list info, gmane archive). Please see Support for more information.

See also

Notes

  1. Thorsten Leemhuis (2011-03-02). "Kernel Log: Coming in 2.6.38 (Part 4) - Storage". Heise Online. 
  2. Jonathan Corbet (2010-12-22). "Shooting at SCSI targets". lnw.net. 
  3. Linus Torvalds (2011-03-14). "Linux 2.6.38". lkml.org. 
  4. Mark J. Sullivan (January 2010). Intel® Xeon® Processor C5500/C3500 Series Non-Transparent Bridge. 323328-001. Santa Clara: Intel. 
  5. Linus Torvalds (2011-03-14). "Linux 2.6.38". lkml.org. 
  6. Linus Torvalds (2011-01-14). "Target merge". lkml.org. 
  7. Linus Torvalds (2011-05-18). "Linux 2.6.39". lkml.org. 
  8. Linus Torvalds (2011-07-21). "Linux 3.0". lkml.org. 
  9. Linus Torvalds (2011-10-24). "Linux 3.1". lkml.org. 
  10. Linus Torvalds (2011-07-27). "iSCSI merge". lkml.org. 
  11. Linus Torvalds (2012-03-18). "Linux 3.3 release". lkml.org. 
  12. Linus Torvalds (2012-01-18). "InfiniBand/SRP merge". lkml.org. 
  13. Linus Torvalds (2012-07-21). "Linux 3.5 released". marc.info. 
  14. Linus Torvalds (2012-05-31). "scsi-misc". lkml.org. 
  15. Linus Torvalds (2012-05-22). "usb-target-merge". lkml.org. 
  16. Linus Torvalds (2012-05-23). "sbp-target-merge". lkml.org. 
  17. Linus Torvalds (2012-10-01). "Linux 3.6". lkml.org. 
  18. Linus Torvalds (2012-08-13). "tcm_vhost: Initial merge for vhost level target fabric driver". lkml.org. 
  19. Linus Torvalds (2013-04-28). "Linux 3.9 released". lkml.org. 
  20. Linus Torvalds (2013-06-30). "Linux 3.10". marc.org. 
  21. Linus Torvalds (2013-11-03). "Linux 3.12 released..". lkml.org. 
  22. "Linux 3.14". kernelnewbies.org. 2014-03-30. 
  23. "Linux 3.15". kernelnewbies.org. 2014-06-08. 
  24. "Linux 3.16". kernelnewbies.org. 2014-08-03. 
  25. "Linux 3.17". kernelnewbies.org. 2014-10-05. 

External links

Timeline of the LinuxIO
Release Details 2011 2012 2013 2014 2015
123456789101112 123456789101112 123456789101112 123456789101112 123456789101112
4.x Version 4.0 4.1
Feature LIO Core Loop back FCoE iSCSI Perf SRP
CM WQ FC
USB
1394
vHost Perf Misc 16 GFC iSER Misc VAAI Misc DIF Core
NPIV
DIF iSER DIF FC vhost TCMU Xen Misc Misc virtio 1.0 Misc NVMe OF
Linux 2.6.38 2.6.39 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 3.20 3.21 3.22
Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox
Google AdSense