LIO

The Linux SCSI Target Wiki

(Difference between revisions)
Jump to: navigation, search
m
m
Line 65: Line 65:
* {{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 <code>O_SYNC</code>.
* {{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 <code>O_SYNC</code>.
* {{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|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 [[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 instead.
+
* {{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 [[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 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.
+
* '''Direct Mapped RAMDISK''' (Linux RAMDISK_DR): The direct mapped RAM disk (''rd_dr'') devices provide RAM disk drive-based SCSI emulation. This is an ultra-fast RAM disk that is direct memory mapped.<br/> It is is most useful for benchmarking the maximum hardware performance possible with the storage system.<br/>'''WARNING''':Warning: Do not use direct mapped RAM disk (''rd_dr'') backstores unless you know exactly how they will be used, because they don’t have multi-session capabilities. Instead, use memory mapped RAM disks (''rd_mcp'') for production setups.
 +
* {{anchor|RAMDISK}} '''Memory Mapped RAMDISK''' (Linux RAMDISK_MCP): The memory mapped RAM disk (''rd_mcp'') devices provide RAM disk drive-based SCSI emulation. This is a somewhat slower but more robust RAM disk with separate memory mappings using memory copy for
 +
initiators, hence it has multi-session capability. ''rd_mcp'' is a backend that is most useful for ultra-fast volatile mass-storage, such as with HPC environments that need maximum performance storage for volatile data hot spots.
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), following the [[SPC-4]] standard.
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), following the [[SPC-4]] standard.

Revision as of 00:24, 7 July 2012

LIO Target
Logo
LIO 150513.png
LIO Unified Target
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 Target engine
License GNU General Public License
Website datera.io
LIO architecture overview.
LIO iSCSI architecture diagram.
SCSI Portal Group and multipath architecture overview.
SCSI standards diagram.
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
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.
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:

The Unified Target has become the new Linux standard with kernel version 2.6.38.[1][2] LIO Unified Target supports a wide range of platforms (from PC architecture to mobile devices, STBs and game consoles), based on a wide range of CPU architectures (x86, ia64, Alpha, Cell, PPC, ARM, MIPS, etc.), a growing number of fabric modules, and basically all existing Linux block devices for backstores.

The Unified Target 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), Asymmetric Logical Unit Assignment (ALUA) and vStorage APIs for Array Integration (VAAI) as being used by and vSphere 4 and 5.

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

Contents

Setup

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

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:

Backstores

A backstore subsystem plugin is a physical storage object that provides the actual storage underlying an SCSI 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.).

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

initiators, hence it has multi-session capability. rd_mcp is a backend that is most useful for ultra-fast volatile mass-storage, such as with HPC environments that need maximum performance storage for volatile data hot spots.

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), 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

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

Inclusion in Linux distributions

Target 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.

RFCs

Timeline

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

See also

Notes

  1. Thorsten Leemhuis (3/2/2011). "Kernel Log: Coming in 2.6.38 (Part 4) - Storage". Heise Online. 
  2. Jonathan Corbet (12/22/2010). "Shooting at SCSI targets". lnw.net. 
  3. Linus Torvalds (2011-03-14). "Linux 2.6.38". lkml.org. 
  4. Linus Torvalds (3/14/2011). "Linux 2.6.38". lkml.org. 
  5. Linus Torvalds (1/14/2011). "Target merge". lkml.org. 
  6. Linus Torvalds (5/18/2011). "Linux 2.6.39". lkml.org. 
  7. Linus Torvalds (7/21/2011). "Linux 3.0". lkml.org. 
  8. Linus Torvalds (10/24/2011). "Linux 3.1". lkml.org. 
  9. Linus Torvalds (7/27/2011). "iSCSI merge". lkml.org. 
  10. Linus Torvalds (3/18/2012). "Linux 3.3". lkml.org. 
  11. Linus Torvalds (1/18/2012). "InfiniBand/SRP merge". lkml.org. 
  12. Linus Torvalds (5/31/2012). "scsi-misc". lkml.org. 
  13. Linus Torvalds (5/22/2012). "usb-target-merge". lkml.org. 
  14. Linus Torvalds (5/23/2012). "sbp-target-merge". lkml.org. 

Wikipedia entries

External links

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox
Google AdSense