tcm_loop

The Linux SCSI Target Wiki

(Difference between revisions)
Jump to: navigation, search
m
m
Line 44: Line 44:
Use ''[[targetcli]]'' from {{RTS full}} to configure tcm_loop targets. ''targetcli'' aggregates service modules via a core library, and exports them through a unified API. It includes the Unified [[Target]] to configure single-node SANs independently of their underlying fabric(s).
Use ''[[targetcli]]'' from {{RTS full}} to configure tcm_loop targets. ''targetcli'' aggregates service modules via a core library, and exports them through a unified API. It includes the Unified [[Target]] to configure single-node SANs independently of their underlying fabric(s).
-
tcm_loop can be configured as described in [[tcm_loop/targetcli]].
+
tcm_loop targets can be configured as described in [[tcm_loop/targetcli]].
== Specification compliance ==
== Specification compliance ==
Line 53: Line 53:
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]].
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]].
-
 
-
== 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:
 
-
 
-
<small><pre>
 
-
[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]
 
-
</pre></small>
 
-
 
-
=== Block devices ===
 
-
 
-
The list of resulting block devices with ''sg_inq -i /dev/sdg'' is:
 
-
 
-
<pre>
 
-
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
 
-
</pre>
 
-
 
-
=== Modules ===
 
-
 
-
The resulting loadable kernel modules (LKMs) with ''lsmod output'' are:
 
-
 
-
<pre>
 
-
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
 
-
</pre>
 
== Timeline ==
== Timeline ==

Revision as of 06:18, 30 June 2012

LIO Target
Logo
LIO 150513.png
tcm_loop SCSI Emulation Device
Original author(s) Nicholas Bellinger
Developer(s) Datera, Inc.
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.

tcm_loop was initially released on 10/19/2009,[1] and it went upstream into the Linux 2.6.39 kernel on 3/18/2011.[2]

Contents

Setup

Use targetcli from Datera, Inc. to configure tcm_loop targets. targetcli aggregates service modules via a core library, and exports them through a unified API. It includes the Unified Target to configure single-node SANs independently of their underlying fabric(s).

tcm_loop targets can be configured as described in tcm_loop/targetcli.

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.

Target 4 tcm_loop also supports high level fabric emulation. That is, depending on which WWN is used to create the configFS group in /sys/kernel/config/target/loopback/$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.

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. Nicholas Bellinger (10/19/2009). "[TCM_LOOP]: Add a virtual SCSI loopback fabric module". lkml.org. 
  2. Nicholas Bellinger (3/18/2011). "[SCSI] tcm_loop: Add multi-fabric Linux/SCSI LLD fabric module". lkml.org. 

External links

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox
Google AdSense