tcm_loop

The Linux SCSI Target Wiki

(Difference between revisions)
Jump to: navigation, search
m
m
Line 46: Line 46:
tcm_loop now (v4) also supports ''high level fabric'' emulation. That is, depending on which [[WWN]] is used to create the configFS group in <code>/sys/kernel/config/target/tcm_loop/$WWN</code>, it configures itself to return iSCSI, SAS or FC device identifiers for the SCSI LUN protocol identifiers in the EVPD 0x83 device identifier page.
tcm_loop now (v4) also supports ''high level fabric'' emulation. That is, depending on which [[WWN]] is used to create the configFS group in <code>/sys/kernel/config/target/tcm_loop/$WWN</code>, it configures itself to return iSCSI, SAS or FC device identifiers for the SCSI LUN protocol identifiers in the EVPD 0x83 device identifier page.
-
The entire corresponding logic resides in <code>target_core_fabric_lib.c</code>, and is shared by the different target fabric modules. The code simply contains magic numbers defined for different protocols in [[SPC-4]], and is commented using pieces directly from [[SPC-4]].
+
The entire corresponding logic resides in [http://git.kernel.org/?p=linux/kernel/git/nab/lio-core-2.6.git;a=blob;f=drivers/target/target_core_fabric_lib.c;hb=HEAD target_core_fabric_lib.c], and is shared by the different target fabric modules. The code simply contains magic numbers defined for different protocols in [[SPC-4]], and is commented using pieces directly from [[SPC-4]].
== CLI ==
== CLI ==

Revision as of 07:12, 14 February 2011

LIO Target
Logo
RisingTide Systems
tcm_loop SCSI Emulation Device
Original author(s) Nicholas Bellinger
Developer(s) RisingTide Systems LLC
Initial release May 18, 2011 (2011-05-18)
Stable release 4.1.0 / June 20, 2012;
8 years ago
 (2012-06-20)
Preview release 4.2.0-rc5 / June 28, 2012;
8 years ago
 (2012-06-28)
Development status Production
Written in C
Operating system Linux
Type Fabric module
License GNU General Public License
Website datera.io
See Target for a complete overview over all fabric modules.
FILEIO with a tcm_loop SAS port on KVM x86_64 host running v2.6.34 with the new LSI Megasas 8708EM2 PPC HBA emulation into a Windows 7 x64 KVM 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:.
tcm_loop fabric module running on LIO v3.2 on a Linux Host providing shared virtual SAS Target emulation into a VM hypervisor to multiple VM guests of RHEL 5.4 x86_64 and NetBSD 5.x 32-bit.
tcm_loop fabric module running on LIO v3.2 on Linux Host v2.6.32-rc5 providing persistent reservations to RHEL 5.4 x86_64 KVM Guest using scsi generic passthrough with Vmware Workstation 6.5.

tcm_loop is a pluggable virtual fabric module (tcm_loop.ko) for the LIO multiprotocol Target engine.

It provides full local SCSI device emulation (SPC-3 and SPC-4) for raw block storage objects. It thus makes any raw block device apear to the Target as a full SPC-3/SPC-4 SCSI compliant device with the corresponding CDB-level SAS emulation, for access from any SCSI LLD driver.

tcm_loop minimizes overhead - it delivers >12 GB/s (native) and >2 GB/s (from a single KVM guest, without hardware assist) on Intel Nehalem platforms. This provides e.g., unmodified guest operating systems, such as VMware ESX or VMware vSphere, to use the full SPC-3/SPC-4 SCSI functionality on any type of local raw block storage object they require.

The initial release of tcm_loop was announced on 10/19/2009.

Contents

Specification compliance

The type of SCSI fabric features that are available with tcm_loop (Target mode emulated SAS ports) includes the complete set of SPC-3 logic in the Target engine including advanced features such as PRs, ALUA, etc.

tcm_loop now (v4) also supports high level fabric emulation. That is, depending on which WWN is used to create the configFS group in /sys/kernel/config/target/tcm_loop/$WWN, it configures itself to return iSCSI, SAS or FC device identifiers for the SCSI LUN protocol identifiers in the EVPD 0x83 device identifier page.

The entire corresponding logic resides in target_core_fabric_lib.c, and is shared by the different target fabric modules. The code simply contains magic numbers defined for different protocols in SPC-4, and is commented using pieces directly from SPC-4.

CLI

The LIO 3.0 CLI manual describes a simple userspace shell (lio-utils) for LIO v3.0 (Target+iSCSI). It also describes how to setup a number of different subsystem storage object backstores for LIO LUN endpoints:

RisingTide Systems makes available upon request and for free RTSadmin, a comprehensive, powerful, yet easy storage management tool that can easily handle even complex LIO installations.

Example

Here is an example of creating two local virtual SCSI devices from a single IBLOCK object on two virtual SAS Target port addresses, which are prefixed here with "naa."

The simple userspace shell (lio-utils) for LIO v3.0 configuration was used in this example (RTSadmin is a better management tool).

Setup

Create first I_T Nexus

Create the first I_T Nexus that creates a new Linux/SCSI struct Scsi_Host:

target:/usr/src/lio-utils.git# tcm_loop --createnexus 1
Successfully created virtual SCSI I_T Nexus between TCM and Linux/SCSI HBA
  SAS Target Address: naa.600140554cf3a18e
  SAS Initiator Address naa.60014053226f0388

Create LUN

Create the LUN on the SAS Target port and rescan the Linux SCSI LLD by SCSI HCTL bus address:

target:/usr/src/lio-utils.git# tcm_loop --addlun naa.600140554cf3a18e 1 0 iblock_0/lvm_test0
Successfully created SAS Target Port to local virtual SCSI Logical Unit

Create second I_T Nexus

Create the second I_T Nexus that creates another virtual Linux SCSI HBA:

target:/usr/src/lio-utils.git# tcm_loop --createnexus 1
Successfully created virtual SCSI I_T Nexus between TCM and Linux/SCSI HBA
  SAS Target Address: naa.600140566ce31347
  SAS Initiator Address naa.6001405fd3afa2ef

target:/usr/src/lio-utils.git# tcm_loop --addlun naa.600140566ce31347 1 0 iblock_0/lvm_test0
Successfully created SAS Target Port to local virtual SCSI Logical Unit

Results

See tcm_loop/configFS for the ConfigFS and kernel ringbuffer output of a working tcm_loop driver.

Other healthy results should look similar to the following examples, which are provided as a reference.

SCSI devices

The list of resulting SCSI devices with lsscsi -v output is:

[9:0:1:0]    disk    LIO-ORG  IBLOCK           3.1   /dev/sdg 
  dir: /sys/bus/scsi/devices/9:0:1:0  [/sys/devices/tcm_loop_0/tcm_loop_adapter_0/host9/target9:0:1/9:0:1:0]
[10:0:1:0]   disk    LIO-ORG  IBLOCK           3.1   /dev/sdh 
  dir: /sys/bus/scsi/devices/10:0:1:0  [/sys/devices/tcm_loop_0/tcm_loop_adapter_1/host10/target10:0:1/10:0:1:0]

Block devices

The list of resulting block devices with sg_inq -i /dev/sdg is:

VPD INQUIRY: Device Identification page
Designation descriptor number 1, descriptor length: 20
  id_type: NAA,  code_set: Binary
  associated with the addressed logical unit
    NAA 6, IEEE Company_id: 0x1405
    Vendor Specific Identifier: 0xa97e4ce21
    Vendor Specific Identifier Extension: 0xc0711de829b000c2
    [0x6001405a97e4ce21c0711de829b000c2]
Designation descriptor number 2, descriptor length: 52
  id_type: T10 vendor identification,  code_set: ASCII
  associated with the addressed logical unit
    vendor id: LIO-ORG
    vendor specific: IBLOCK:a97e4ce21c0711de829b000c2943d57b
Designation descriptor number 3, descriptor length: 8
  transport: Serial Attached SCSI (SAS)
  id_type: Relative target port,  code_set: Binary
  associated with the target port
    Relative target port: 0x8
Designation descriptor number 4, descriptor length: 8
  transport: Serial Attached SCSI (SAS)
  id_type: Target port group,  code_set: Binary
  associated with the target port
    Target port group: 0x0
Designation descriptor number 5, descriptor length: 8
  id_type: Logical unit group,  code_set: Binary
  associated with the addressed logical unit
    Logical unit group: 0x0
Designation descriptor number 6, descriptor length: 36
    transport: Serial Attached SCSI (SAS)
    id_type: SCSI name string,  code_set: UTF-8
    associated with the target port
    SCSI name string:
    naa.600140554cf3a18e,t,0x0001

Modules

The resulting loadable kernel modules (LKMs) with lsmod output are:

Module                  Size  Used by
tcm_loop               11606  9 
iscsi_target_mod      205640  44 
target_core_mod       226770  75 tcm_loop,iscsi_target_mod
scsi_tgt                8806  1 target_core_mod
configfs               21168  4 tcm_loop,iscsi_target_mod,target_core_mod
dm_mirror              10356  0 
dm_region_hash          7562  1 dm_mirror
dm_log                  6769  2 dm_mirror,dm_region_hash
dm_snapshot            18562  0 
pcnet32                25510  0 
mii                     3430  1 pcnet32

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

External links

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox
Google AdSense