mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-14 09:11:27 +00:00
git-svn-id: http://svn.code.sf.net/p/scst/svn/branches/3.3.x@7749 d57e44dd-8a1f-0410-8b47-8ef2f437770f
567 lines
36 KiB
HTML
567 lines
36 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<meta name="Keywords" content="SCSI targets comparison, iSCSI targets comparison">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
<meta name="author" content="Daniel Fernandes">
|
|
<meta name="Robots" content="index,follow">
|
|
<link rel="stylesheet" href="images/Orange.css" type="text/css">
|
|
<title>SCSI Targets Comparison</title>
|
|
</head>
|
|
|
|
<body>
|
|
<!-- wrap starts here -->
|
|
<div id="wrap">
|
|
<div id="header">
|
|
<div class="logoimg"></div><h1 id="logo"><span class="orange"></span></h1>
|
|
<h2 id=slogan>Generic SCSI Target Subsystem for Linux</h2>
|
|
</div>
|
|
|
|
<div id="menu">
|
|
<ul>
|
|
<li><a href="index.html">Home</a></li>
|
|
<li><a href="http://www.sourceforge.net/projects/scst">Main</a></li>
|
|
<li><a href="http://sourceforge.net/news/?group_id=110471">News</a></li>
|
|
<li><a href="targets.html">Drivers</a></li>
|
|
<li><a href="downloads.html">Downloads</a></li>
|
|
<li><a href="contributing.html">Contributing</a></li>
|
|
<li id="current"><a href="comparison.html">Comparison</a></li>
|
|
<li><a href="users.html">Users</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<!-- content-wrap starts here -->
|
|
<div id="content-wrap">
|
|
<div id="sidebar">
|
|
<h1>Comparison</h1>
|
|
<ul class="sidemenu">
|
|
<li><a href="comparison.html">Features comparison</a></li>
|
|
<li><a href="scstvslio.html">SCST vs LIO/TCM</a></li>
|
|
<li><a href="scstvsstgt.html">SCST vs STGT</a></li>
|
|
<li><a href="mc_s.html">MC/S vs MPIO</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div id="main">
|
|
<h1>Features comparison between Linux SCSI targets</h1>
|
|
|
|
<p>This features comparison is intended to be a complete and fair feature-by-feature
|
|
comparison between the listed targets without any bias to SCST. If you see anything
|
|
wrong somewhere or anything missed, you are welcome to report it in scst-devel
|
|
mailing list and it will be corrected.
|
|
</p>
|
|
|
|
<p>Also Sebastian Riemer wrote a good summary in <a href="http://sourceforge.net/mailarchive/message.php?msg_id=30688206" rel="nofollow">his e-mail</a> (April 2013)</p>
|
|
|
|
<p><small>As on June 2011, briefly reviewed April 2013.</small></p>
|
|
|
|
<table bgcolor="#F0F0F0" border="1" cellspacing="1" cellpadding="7" style="text-align:center" width="620">
|
|
|
|
<tr>
|
|
<td>
|
|
</td><td><b><a href="http://scst.sourceforge.net/" title="http://scst.sourceforge.net/" rel="nofollow">SCST</a></b>
|
|
</td><td><b><a href="http://stgt.sourceforge.net/" title="http://stgt.sourceforge.net/" rel="nofollow">STGT</a></b>
|
|
</td><td><b><a href="http://iscsitarget.sourceforge.net/" title="http://iscsitarget.sourceforge.net/" rel="nofollow">IET</a></b>
|
|
</td><td><b><a href="scstvslio.html">LIO/TCM</a></b>
|
|
</td></tr>
|
|
|
|
<tr bgcolor="#E0E0E0">
|
|
<td colspan="5"> <b>General</b>
|
|
</td></tr>
|
|
<tr>
|
|
<td align="left"><b>Upstream kernel</b></td> <td> - </td> <td> - </td> <td> - </td> <td> <a href="scstvslio.html">Since 2.6.38</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Generic Target Engine</b></td> <td> + </td> <td> + </td> <td> iSCSI only </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Architecture</b></td> <td> Kernel only</td> <td> User space only </td> <td> Split <sup>
|
|
<A HREF="#1">1</A>
|
|
</sup> </td> <td> Kernel only </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Stability</b></td> <td> + </td> <td> + </td> <td> + </td> <td> Probably </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Performance <sup><A HREF="#2">2</A></sup></b></td> <td> ***** <sup>
|
|
<A HREF="#3">3</A>
|
|
</sup></td> <td> ***</td> <td> **** </td> <td> ****- </td>
|
|
</tr>
|
|
<tr>
|
|
<th align="left"> Zero-copy passing data between target and
|
|
backend drivers</th> <td> + <sup>
|
|
<A HREF="#4">4</A>
|
|
</sup></td> <td> + <sup>
|
|
<A HREF="#5">5</A>
|
|
</sup> </td> <td> + </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Support for transports without expecting
|
|
transfer values (Wide (parallel) SCSI, SAS)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Interface with user space</b></td> <td> SysFS (or obsolete
|
|
ProcFS)</td> <td> Custom </td> <td> - </td> <td> ConfigFS/IOCTL/ProcFS </td>
|
|
</tr>
|
|
|
|
|
|
<tr bgcolor="#E0E0E0">
|
|
<td colspan="5"><b>Features</b>
|
|
</td></tr>
|
|
<tr>
|
|
<td align="left"><b>Target drivers in kernel space</b></td> <td> + </td> <td> - </td> <td> - </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Target drivers in user space</b></td> <td>Via scst_local (e.g.
|
|
using STGT
|
|
pass-through)</td> <td> + </td> <td> - </td> <td>Via tcm_loop (e.g.
|
|
using STGT pass-through)</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Backstorage handlers in kernel space</b></td> <td> + </td> <td> - </td> <td> - </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Backstorage handlers in user space</b></td> <td>+</td> <td> + </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Advanced devices access control
|
|
<sup><A HREF="#7">7</A></sup></b></td> <td> + </td> <td> - </td> <td> - </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Automatic sessions reassignment (changes in the
|
|
access control immediately seen by initiators)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Support for Asynchronous Event Notifications
|
|
(AEN)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Notifications for devices added/removed or
|
|
resized through AENs or Unit Attentions (initiators can instantly see
|
|
any target reconfiguration in a PnP-like manner)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Bidirectional Commands</b></td> <td> +</td> <td> + </td> <td> - </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Extended CDB (size >16 bytes)</b></td> <td> +</td> <td> + </td> <td> - </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Descriptor sense support</b></td> <td> + </td> <td> + </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>RESERVE/RELEASE
|
|
(Windows 2003 clustering)</b></td> <td> + </td> <td> + </td> <td> + </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Safe RESERVE/RELEASE implementation according to
|
|
SCSI requirements <sup><A HREF="#9">9</A></sup></b></td> <td> Safe </td> <td> Safe </td> <td> Safe from
|
|
v1.4.18</td> <td> Not safe </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Safe implementation of Task Management commands
|
|
<sup><A HREF="#10">10</A></sup></b></td> <td> Safe </td> <td> Not safe </td> <td> Not safe </td> <td> LUN RESET - safe.
|
|
Other TM commands not
|
|
implemented. </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Support for SCSI task attributes, including
|
|
ORDERED commands</b></td> <td> + </td> <td> + </td> <td> -, <br> data
|
|
corruption possible
|
|
<sup><A HREF="#11">
|
|
11</A></sup></td> <td> -, <br>data
|
|
corruption possible
|
|
<sup><A HREF="#11">
|
|
11</A></sup> </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Persistent (SCSI-3) Reservations
|
|
(Windows 2008 clustering / RHEL5 I/O fencing)</b></td> <td> + </td> <td> + <br> (not all
|
|
functionality
|
|
implemented)</td> <td> - </td> <td> + </td>
|
|
<tr>
|
|
<td align="left"><b>Durable, i.e. transactional, save of Persistent
|
|
Through Power Loss Persistent Reservation data</b></td> <td> Durable </td> <td>Not supported</td> <td> - </td> <td> Not durable </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>ALUA</b></td> <td> +/- (Implicit
|
|
only)<sup>
|
|
<A HREF="#19">19</A>
|
|
</sup> </td> <td> - </td> <td> - </td> <td> +/-<sup><A HREF="#19">
|
|
19</A></sup></td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Failover Clustering</b></td> <td> + </td> <td> + </td> <td> + </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Different threading models to choose the best
|
|
performing</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>CPU affinity control</b></td> <td> + </td> <td> - </td> <td> - </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>I/O context grouping between I/O threads (big
|
|
performance win with CFQ)</b></td> <td> + </td> <td> - </td> <td> + </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Per-initiator I/O context grouping (big
|
|
performance and fairness win if several initiators access the same
|
|
virtual or backend device on the target)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Protection against commands with
|
|
wrong transfer size or transfer direction (may lead to crash or
|
|
hard lockup of the target)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Protection against crashing target by making it
|
|
to allocate too much memory for buffers and go into OOM state
|
|
</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Caching of allocated buffers</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Latencies measurement facility</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Configuration tool with ability to automatically
|
|
apply changes in the config file on fly without any restarts</b></td> <td> scstadmin </td> <td> - </td> <td> - </td> <td> rtsadmin? </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>SCSI MIBs</b></td> <td> - </td> <td> - </td> <td> - </td> <td> +-
|
|
<sup><A HREF="#12">12</A></sup></td>
|
|
</tr>
|
|
|
|
|
|
<tr bgcolor="#E0E0E0">
|
|
<td colspan="5"> <b>Supported transports and hardware</b>
|
|
</td></tr>
|
|
<tr>
|
|
<td align="left"><b>iSCSI</b></td> <td> + </td> <td> + </td> <td> + </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>QLogic (Fibre Channel and FCoE)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> +</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Emulex (Fibre Channel and FCoE)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>SRP</b></td> <td> + </td> <td> - </td> <td> - </td> <td> Preliminary </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>iSER</b></td> <td> + </td> <td> + </td> <td> - </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Marvell (SAS)</b></td> <td> Beta </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>FCoE</b></td> <td> + </td> <td>Under
|
|
development</td> <td> - </td> <td> Alpha </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>LSI (Parallel (Wide) SCSI and Fibre Channel)
|
|
</b></td> <td> Alpha </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>LSI (SAS)</b></td> <td> Preliminary
|
|
(not completed) </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>IBM pSeries Virtual SCSI</b></td> <td> + </td> <td> + </td> <td> - </td> <td> Preliminary </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Local access to emulated backstorage devices
|
|
<sup><A HREF="#6">6</A></sup></b></td> <td> scst_local </td> <td> - </td> <td> - </td> <td> tcm_loop </td>
|
|
</tr>
|
|
<tr bgcolor="#E0E0E0">
|
|
<td colspan="5"> <b>Supported backstorage</b>
|
|
</td></tr>
|
|
<tr>
|
|
<td align="left"><b>Kernel side FILEIO</b></td> <td> + </td> <td> - </td> <td> + </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Kernel side BLOCKIO</b></td> <td> + </td> <td> - </td> <td> + </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>User space FILEIO</b></td> <td> + </td> <td> + </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>O_DIRECT FILEIO</b></td> <td> fileio_tgt </td> <td> + </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Async FILEIO</b></td> <td> - </td> <td> + </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Native RAMDISK</b></td> <td> - </td> <td> - </td> <td> - </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>SCSI pass-through
|
|
<sup><A HREF="#13">13</A></sup></b></td> <td> + </td> <td> Single
|
|
initiator only, not
|
|
enforced<sup>
|
|
<A HREF="#14">14</A>
|
|
</sup> </td> <td> - </td> <td> Single initiator only, not enforced,
|
|
limited functionality for tapes
|
|
<sup><A HREF="#14">14</A></sup></td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Zero-copy data read/write to/from backstorage
|
|
</b></td> <td>BLOCKIO, user space
|
|
FILEIO in O_DIRECT mode,
|
|
pass-through <sup>
|
|
<A HREF="#15">15</A>
|
|
</sup></td> <td> - <sup>
|
|
<A HREF="#5">5</A>
|
|
</sup> </td> <td> BLOCKIO </td> <td> BLOCKIO, pass-
|
|
through </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Cache safe<sup><A HREF="#8">8</A></sup>
|
|
FILEIO</b></td> <td> Safe </td> <td>Safe only RDWR
|
|
backend</td> <td> Safe </td> <td> Safe </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Cache safe<sup><A HREF="#8">8</A></sup>
|
|
BLOCKIO</b></td> <td> Safe </td> <td> - </td> <td> Not safe </td> <td> Safe </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>4k sectors support in pass-through mode</b></td> <td> + </td> <td> - </td> <td> - </td> <td> ? </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>4k, 2k, 1k and 512 byte sectors emulation
|
|
in modes, other than pass-through</b></td> <td> + </td> <td> + </td> <td> - </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Virtual CD devices emulation from ISO files
|
|
</b></td> <td> + </td> <td> + </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Possibility to write to emulated from ISO files
|
|
CD devices</b></td> <td> - </td> <td> + </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Emulation of virtual tape and media changer
|
|
devices (VTL)</b></td> <td> - </td> <td>Experimental</td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Thin provisioning support</b></td> <td>+<br></td> <td> ? </td> <td> - </td> <td> + </td>
|
|
</tr>
|
|
|
|
<tr bgcolor="#E0E0E0">
|
|
<td colspan="5"> <b>iSCSI Target</b>
|
|
</td></tr>
|
|
<tr>
|
|
<td align="left"><b>Architecture</b></td> <td> Split <sup>
|
|
<A HREF="#1">1</A>
|
|
</sup> </td> <td> User space
|
|
only </td> <td> Split <sup>
|
|
<A HREF="#1">1</A>
|
|
</sup></td> <td> Kernel only </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Interface with user space</b></td> <td>SysFS (or obsolete
|
|
ProcFS)/
|
|
IOCTL/Netlink</td> <td> - </td> <td>IOCTL/ProcFS/
|
|
Netlink</td> <td> ConfigFS/IOCTL/ProcFS </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Zero-copy data send/receive</b></td> <td> Send only<sup>
|
|
<A HREF="#16">16</A>
|
|
</sup> </td> <td> In some cases,
|
|
send only <sup>
|
|
<A HREF="#5">5</A>
|
|
</sup> </td> <td> Send only</td> <td> Send only </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b><a href="mc_s.html">Multiple connections per
|
|
session (MS/C)</a></b></td> <td> - </td> <td> - </td> <td>+</td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Max ErrorRecoveryLevel</b></td> <td> 0 </td> <td> 0 </td> <td> 0 </td> <td> 2 </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Support for limiting number of initiators
|
|
allowed to connect to a target</b></td> <td> + </td> <td> - </td> <td> + </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Per-portal targets visibility control</b></td> <td> + </td> <td> - </td> <td> + </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Per-initiators targets visibility control</b></td> <td> + </td> <td> + </td> <td> + </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Support for AHS</b></td> <td> + </td> <td> + </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Support for iSCSI redirects</b></td> <td> + </td> <td> + </td> <td> + </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Bidirectional Commands</b></td> <td> + </td> <td> + </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Extended CDB (size >16 bytes)</b></td> <td> + </td> <td> + </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Support for AENs (initiators can instantly see any
|
|
target reconfiguration in a PnP-like manner)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Support for iSNS</b></td> <td> + </td> <td> + </td> <td> + </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Safe implementation of Task Management commands
|
|
<sup><A HREF="#10">10</A></sup></b></td> <td> Safe </td> <td> Not safe </td> <td> Not safe </td> <td> ABORT TASK - not safe,
|
|
LUN RESET - safe,
|
|
other TM commands not
|
|
implemented. </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Safe implementation of connections and sessions
|
|
reinstatement <sup><A HREF="#17">17</A></sup></b></td> <td> Safe </td> <td> Not safe </td> <td> Not safe </td> <td> Not safe </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Usage of hardware instructions for digest
|
|
calculations, if available</b></td> <td> + </td> <td> - </td> <td> - </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Each connection multithreaded digest calculation
|
|
</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Safe restart <sup><A HREF="#18">18</A></sup>
|
|
</b></td> <td> Safe </td> <td> ? </td> <td> Not safe before
|
|
v1.4.18. After -
|
|
probably safe.</td> <td> ?</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>iSCSI MIBs</b></td> <td> - </td> <td> - </td> <td> - </td> <td> +-
|
|
<sup><A HREF="#12">12</A></sup></td>
|
|
</tr>
|
|
<tr bgcolor="#E0E0E0">
|
|
<td colspan="5"> <b>Local access target</b>
|
|
</td></tr>
|
|
<tr>
|
|
<td align="left"><b>Bidirectional support</b></td> <td> + </td> <td> - </td> <td> - </td> <td> + </td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left"><b>Support for AENs (initiators can instantly see any
|
|
target reconfiguration in a PnP-like manner)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<p><strong><big><u>REMARKS:</u></big></strong></p>
|
|
|
|
<p><A NAME="1"></A> 1. All iSCSI management implemented in user space and actual data transfers in kernel space without user space involved.</p>
|
|
|
|
<p><A NAME="2"></A> 2. The result "in average" is listed. One target can be better somewhere, another one somewhere else. Although manual tuning of target and
|
|
system parameters tends the restore the difference listed in the comparison. You can find example measurements <a href="vl_res.txt">here</a>,
|
|
<a href="bart_res.txt">here</a> and <a href="tomasz_res.txt">here</a>.</p>
|
|
|
|
<p><A NAME="3"></A> 3. All SCST and its drivers' kernel patches supposed to be applied and SCST with the drivers built in the release or performance build.
|
|
Without the kernel patches SCST performance will be at "****+" level, except for the case, when user space backstorage handler used
|
|
with iSCSI-SCST iSCSI target driver, where performance will be at "***+" level.</p>
|
|
|
|
<p><A NAME="4"></A> 4 In SCST data are always passed in zero-copy manner between target and backend drivers without need for any
|
|
additional kernel patches, except in case, when local access (scst_local) used with user space backend. </p>
|
|
|
|
<p><A NAME="5"></A> 5. Some zero-copy functionality isn't available from user space, sometimes fundamentally.
|
|
For instance, zero-copy FILEIO with page cache or zero-copy send to a socket. Also STGT can't use splice() for in-kernel
|
|
target drivers, because it has memory management in user space. To use splice() with socket-based user space target drivers
|
|
STGT would need a deep redesign of internal interactions between target drivers, core and backend handlers. But in
|
|
some cases STGT can use zero-copy sendfile().</p>
|
|
|
|
<p><A NAME="6"></A> 6. "Local access to emulated backstorage devices" means that you can access emulated by a SCSI target devices
|
|
locally on the target host. For instance, you can mount your ISO image from emulated by the target
|
|
CDROM device locally on the target host.</p>
|
|
|
|
<p><A NAME="7"></A> 7. "Advanced devices access control" means that different initiators can see different sets
|
|
of devices from the same target. This feature is required for hardware targets, which don't have ability
|
|
to create virtual targets.</p>
|
|
|
|
<p><A NAME="8"></A> 8. "Cache safe" means that cache synchronization commands (SYNCHRONIZE_CACHE and FUA attribute) from initiators perform
|
|
what they expected to perform, i.e. push all the requested blocks from all caches, including devices' caches,
|
|
to non-volatile media.</p>
|
|
|
|
<p><A NAME="9"></A> 9. SCSI requires that if an initiator clears reservation held by another initiator, the reservation holder must be notified
|
|
about the reservation clearance. Otherwise, several initiators can at the same time change supposed to be protected by the
|
|
reservation data, which can corrupt them. This is what was called
|
|
<a href="http://communities.vmware.com/thread/53797?tstart=0&start=15">"Russian roulette with your data"</a> on the VMware
|
|
community forum by someone working for VMware. But, sure, it can affect not only VMware, but also any other cluster
|
|
implementation, relying on this functionality.</p>
|
|
|
|
<p><A NAME="10"></A> 10. After a task management command completed and before the corresponding response was sent to the initiator, who sent that task management
|
|
command, all the affected SCSI commands must get into a state, where they can't affect following after
|
|
the tasks management response commands from this initiator. This is the safe implementation.
|
|
The unsafe implementation only marks all the affected
|
|
SCSI commands as aborted and then immediately send task management response to the initiator. This implementation only
|
|
guarantees that the initiator will never receive responses from those commands, but it doesn't
|
|
guarantee that none of those commands will get executed by backstorage <strong>*AFTER*</strong> any
|
|
SCSI command, which initiator will send after it received the task management response thinking
|
|
that all the aborted commands actually fully aborted. This could lead to a data corruption.</p>
|
|
|
|
<p><A NAME="11"></A> 11. Both IET and LIO report in INQUIRY command response support for full task management model. But they process ORDERED
|
|
commands the same way as SIMPLE commands, i.e. allow free reorder of them before they get executed. That violates SCSI standard
|
|
and can lead to a data corruption to any application relying on commands order provided by ORDERED attribute.</p>
|
|
|
|
<p><A NAME="12"></A> 12. LIO exports the information needed for an RFC 4455 implementation, but requires additional RFC 4455 implementing module.
|
|
At the moment, there is no open source implementation of such module.</p>
|
|
|
|
<p><A NAME="13"></A> 13. SCSI pass-through mode allows to export your local SCSI-capable device. For instance with it you can share your parallel
|
|
SCSI tape or SATA DVD-RW device to your iSCSI network.</p>
|
|
|
|
<p><A NAME="14"></A> 14. STGT and LIO don't emulate all the necessary SCSI host functionality to allow to share SCSI devices
|
|
in pass-through mode to several initiators, although LIO has some necessary processing, but not all.
|
|
They can only pass SCSI commands from initiators to
|
|
SCSI devices and responses back. This is safe only with a single initiator. This limitation
|
|
isn't enforced anyhow and both STGT and LIO don't issue any warning about it, so an user will not be notified about this
|
|
limitation and can quietly corrupt his/her data. You can find more technical information about it
|
|
<a href="http://www.mail-archive.com/linux-scsi@vger.kernel.org/msg06911.html">here</a>.
|
|
Also LIO in pass-through mode doesn't do necessary sense processing for tape devices to
|
|
correctly return residual information, so tapes can used with it with limited functionality.</p>
|
|
|
|
<p><A NAME="15"></A> 15. You can find a proposal how to implement zero-copy FILEIO in SCST on the <a href="contributing.html#ZC_READ">
|
|
Contributing</a> page.</p>
|
|
|
|
<p><A NAME="16"></A> 16. Doesn't need any kernel patch, except in the case, when used with user space backend.</p>
|
|
|
|
<p><A NAME="17"></A> 17. Connections and sessions reinstatement is, basically, a kind of Task Management command, because it implies commands aborting.
|
|
So, similarly to the safe task management above, a safe implementation of connections and sessions reinstatement
|
|
must not accept SCSI commands from new connection/session until all the SCSI commands in
|
|
being reinstated connection/session get into a state, where they can't affect new commands.</p>
|
|
|
|
<p><A NAME="18"></A> 18. "Safe restart" means that after the iSCSI target restart, all the connected initiators will seamlessly restore all existing before
|
|
the restart connections. "Not safe" means that, most likely, the connected initiators will fail to restore
|
|
existing connections with some errors. However, your iSCSI initiator also should be able to handle the safe restart. For instance,
|
|
old (pre-CentOS/RHEL 5) open-iscsi has problems in this area. But the latest versions do it pretty well.</p>
|
|
|
|
<p><A NAME="19"></A> 19. Generic implementation, i.e. not coupled to any particular cluster implementation, which means it is needed additional effort
|
|
to used with each particular cluster setup.</p>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- wrap ends here -->
|
|
<!-- footer starts here -->
|
|
<div id="footer">
|
|
<p>© Copyright 2004 - 2018 <b><font color="#EC981F">Vladislav Bolkhovitin & others</font></b>
|
|
Design by: <b><font color="#EC981F">Daniel Fernandes</font></b> </p>
|
|
</div>
|
|
<!-- footer ends here -->
|
|
<!-- Piwik -->
|
|
<script type="text/javascript">
|
|
var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/scst/" : "http://apps.sourceforge.net/piwik/scst/");
|
|
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
|
|
</script><script type="text/javascript">
|
|
piwik_action_name = '';
|
|
piwik_idsite = 1;
|
|
piwik_url = pkBaseURL + "piwik.php";
|
|
piwik_log(piwik_action_name, piwik_idsite, piwik_url);
|
|
</script>
|
|
<object><noscript><p><img src="http://apps.sourceforge.net/piwik/scst/piwik.php?idsite=1" alt="piwik"></p></noscript></object>
|
|
<!-- End Piwik Tag -->
|
|
</body>
|
|
</html>
|