mirror of
https://github.com/SCST-project/scst.git
synced 2026-09-20 15:04:19 +00:00
Web updates
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@2037 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
+138
-45
@@ -45,13 +45,13 @@
|
|||||||
<div id="main">
|
<div id="main">
|
||||||
<h1>Features comparison between Linux SCSI targets</h1>
|
<h1>Features comparison between Linux SCSI targets</h1>
|
||||||
|
|
||||||
<p><small>As on October 2009. Partially updated in August 2010.</small></p>
|
<p><small>As on September 2010</small></p>
|
||||||
|
|
||||||
<table bgcolor="#F0F0F0" border="1" cellspacing="1" cellpadding="7" style="text-align:center" width="620">
|
<table bgcolor="#F0F0F0" border="1" cellspacing="1" cellpadding="7" style="text-align:center" width="620">
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<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://scst.sourceforge.net/" title="http://scst.sourceforge.net/" rel="nofollow">SCST 2.0</a></b>
|
||||||
</td><td><b><a href="http://stgt.berlios.de/" title="http://stgt.berlios.de/" rel="nofollow">STGT</a></b>
|
</td><td><b><a href="http://stgt.berlios.de/" title="http://stgt.berlios.de/" 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="http://iscsitarget.sourceforge.net/" title="http://iscsitarget.sourceforge.net/" rel="nofollow">IET</a></b>
|
||||||
</td><td><b><a href="http://linux-iscsi.org/" title="http://linux-iscsi.org/" rel="nofollow">LIO</a></b>
|
</td><td><b><a href="http://linux-iscsi.org/" title="http://linux-iscsi.org/" rel="nofollow">LIO</a></b>
|
||||||
@@ -61,7 +61,9 @@
|
|||||||
<td colspan="5"> <b>General</b>
|
<td colspan="5"> <b>General</b>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Upstream kernel</b></td> <td> - </td> <td> Kernel part </td> <td> - </td> <td> - </td>
|
<td align="left"><b>Upstream kernel</b></td> <td> - </td> <td>Interface with
|
||||||
|
in-kernel target
|
||||||
|
drivers</td> <td> - </td> <td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Generic Target Engine</b></td> <td> + </td> <td> + </td> <td> iSCSI only </td> <td> + </td>
|
<td align="left"><b>Generic Target Engine</b></td> <td> + </td> <td> + </td> <td> iSCSI only </td> <td> + </td>
|
||||||
@@ -72,9 +74,11 @@
|
|||||||
</sup> </td> <td> - </td> <td> Kernel only </td>
|
</sup> </td> <td> - </td> <td> Kernel only </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Stability</b></td> <td> + </td> <td> +
|
<td align="left"><b>Stability</b></td> <td> Final testing
|
||||||
|
before release (1.0.1.x
|
||||||
|
- stable)</td> <td> +
|
||||||
<sup><A HREF="#3">3</A>
|
<sup><A HREF="#3">3</A>
|
||||||
</sup> </td> <td> + </td> <td> ? (no released packages) </td>
|
</sup> </td> <td> + </td> <td> Probably (no released packages) </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Performance <sup><A HREF="#4">4</A></sup></b></td> <td> ***** <sup>
|
<td align="left"><b>Performance <sup><A HREF="#4">4</A></sup></b></td> <td> ***** <sup>
|
||||||
@@ -92,40 +96,49 @@ backend drivers</th> <td> + <sup>
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Support for transports without expecting
|
<td align="left"><b>Support for transports without expecting
|
||||||
transfer values (parallel SCSI, SAS)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
transfer values (Wide (parallel) SCSI, SAS)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Interface with user space</b></td> <td> SysFS/ProcFS </td> <td> Custom </td> <td> - </td> <td> ConfigFS/IOCTL/ProcFS </td>
|
<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>
|
||||||
|
|
||||||
|
|
||||||
<tr bgcolor="#E0E0E0">
|
<tr bgcolor="#E0E0E0">
|
||||||
<td colspan="5"><b>Major features</b>
|
<td colspan="5"><b>Features</b>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Target drivers in kernel space</b></td> <td> + </td> <td> + </td> <td> - </td> <td> + </td>
|
<td align="left"><b>Target drivers in kernel space</b></td> <td> + </td> <td> + </td> <td> - </td> <td> + </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Target drivers in user space</b></td> <td> + </td> <td> + </td> <td> - </td> <td> - </td>
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Backstorage handlers in kernel space</b></td> <td> + </td> <td> - </td> <td> - </td> <td> + </td>
|
<td align="left"><b>Backstorage handlers in kernel space</b></td> <td> + </td> <td> - </td> <td> - </td> <td> + </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Backstorage handlers in user space</b></td> <td> + </td> <td> + </td> <td> - </td> <td> Through STGT </td>
|
<td align="left"><b>Backstorage handlers in user space</b></td> <td>+</td> <td> + </td> <td> - </td> <td> Via STGT
|
||||||
|
(under development) </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Advanced devices access control
|
<td align="left"><b>Advanced devices access control
|
||||||
<sup><A HREF="#10">10</A></sup></b></td> <td> + </td> <td> - </td> <td> - </td> <td> + </td>
|
<sup><A HREF="#10">10</A></sup></b></td> <td> + </td> <td> - </td> <td> - </td> <td> + </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td align="left"><b>Automatic sessions reassignment (changes in the
|
||||||
|
access control immediatelly seen by initiators)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td align="left"><b>Support for Asynchronous Event Notifications
|
<td align="left"><b>Support for Asynchronous Event Notifications
|
||||||
(AEN)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
(AEN)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Notifications for devices added/removed or
|
<td align="left"><b>Notifications for devices added/removed or
|
||||||
resized through AENs or Unit Attentions (Initiators can instantly see
|
resized through AENs or Unit Attentions (initiators can instantly see
|
||||||
any target reconfiguration in a PnP-like fashion)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
any target reconfiguration in a PnP-like manner)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Bidirectional Commands</b></td> <td> +</td> <td> + </td> <td> - </td> <td> - </td>
|
<td align="left"><b>Bidirectional Commands</b></td> <td> +</td> <td> + </td> <td> - </td> <td> - </td>
|
||||||
@@ -138,7 +151,7 @@ any target reconfiguration in a PnP-like fashion)</b></td> <td> + </td> <td> -
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>RESERVE/RELEASE
|
<td align="left"><b>RESERVE/RELEASE
|
||||||
<small> (Windows 2003 clustering) </small></b></td> <td> + </td> <td> + </td> <td> + </td> <td> + </td>
|
(Windows 2003 clustering)</b></td> <td> + </td> <td> + </td> <td> + </td> <td> + </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Safe RESERVE/RELEASE implementation according to
|
<td align="left"><b>Safe RESERVE/RELEASE implementation according to
|
||||||
@@ -147,7 +160,9 @@ SCSI requirements <sup><A HREF="#12">12</A></sup></b></td> <td> Safe </td> <td
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Safe implementation of Task Management commands
|
<td align="left"><b>Safe implementation of Task Management commands
|
||||||
<sup><A HREF="#13">13</A></sup></b></td> <td> Safe </td> <td> Not safe </td> <td> Not safe </td> <td> Not safe </td>
|
<sup><A HREF="#13">13</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>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Support for SCSI task attributes, including
|
<td align="left"><b>Support for SCSI task attributes, including
|
||||||
@@ -160,31 +175,50 @@ ORDERED commands</b></td> <td> + </td> <td> + </td> <td> -, <br> data
|
|||||||
14</A></sup> </td>
|
14</A></sup> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Persistent Reservations <br>
|
<td align="left"><b>Persistent (SCSI-3) Reservations
|
||||||
<small> (Windows 2008 clustering / RHEL5 I/O fencing)</small></b></td> <td> + </td> <td> + <br> (limited
|
(Windows 2008 clustering / RHEL5 I/O fencing)</b></td> <td> + </td> <td> + <br> (limited
|
||||||
functionality
|
functionality
|
||||||
implemented)</td> <td> - </td> <td> + </td>
|
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>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>ALUA</b></td> <td> - </td> <td> - </td> <td> - </td> <td> + </td>
|
<td align="left"><b>ALUA</b></td> <td> - </td> <td> - </td> <td> - </td> <td> + </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Failover Clustering</b></td> <td> + </td> <td> ? </td> <td> + </td> <td> + </td>
|
<td align="left"><b>Failover Clustering</b></td> <td> + </td> <td> + </td> <td> + </td> <td> + </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Allocated buffers cache</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
<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>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>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Protection against commands with
|
<td align="left"><b>Protection against commands with
|
||||||
wrong transfer size or transfer direction (may lead to crash or
|
wrong transfer size or transfer direction (may lead to crash or
|
||||||
hard lockup)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
hard lockup of the target)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Protection against DoS'ing target by making it
|
<td align="left"><b>Protection against crashing target by making it
|
||||||
allocate too much memory for buffers and taking it into an OOM state
|
to allocate too much memory for buffers and go into OOM state
|
||||||
</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
<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>SCSI MIBs</b></td> <td> - </td> <td> - </td> <td> - </td> <td> +-
|
<td align="left"><b>SCSI MIBs</b></td> <td> - </td> <td> - </td> <td> - </td> <td> +-
|
||||||
<sup><A HREF="#15">15</A></sup></td>
|
<sup><A HREF="#15">15</A></sup></td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -233,9 +267,8 @@ allocate too much memory for buffers and taking it into an OOM state
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Local access to emulated backstorage devices
|
<td align="left"><b>Local access to emulated backstorage devices
|
||||||
<sup><A HREF="#9">9</A></sup></b></td> <td> + </td> <td> - </td> <td> - </td> <td> + </td>
|
<sup><A HREF="#9">9</A></sup></b></td> <td> scst_local </td> <td> - </td> <td> - </td> <td> tcm_loop </td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr bgcolor="#E0E0E0">
|
<tr bgcolor="#E0E0E0">
|
||||||
<td colspan="5"> <b>Supported backstorage</b>
|
<td colspan="5"> <b>Supported backstorage</b>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
@@ -249,14 +282,24 @@ allocate too much memory for buffers and taking it into an OOM state
|
|||||||
<td align="left"><b>User space FILEIO</b></td> <td> + </td> <td> + </td> <td> - </td> <td> - </td>
|
<td align="left"><b>User space FILEIO</b></td> <td> + </td> <td> + </td> <td> - </td> <td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
<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
|
<td align="left"><b>SCSI pass-through
|
||||||
<sup><A HREF="#16">16</A></sup></b></td> <td> + </td> <td> Single
|
<sup><A HREF="#16">16</A></sup></b></td> <td> + </td> <td> Single
|
||||||
initiator only, not
|
initiator only, not
|
||||||
enforced, limited
|
enforced, limited
|
||||||
for tapes <sup>
|
functionality for tapes
|
||||||
|
<sup>
|
||||||
<A HREF="#17">17</A>
|
<A HREF="#17">17</A>
|
||||||
</sup> </td> <td> - </td> <td> Single initiator only, not enforced,
|
</sup> </td> <td> - </td> <td> Single initiator only, not enforced,
|
||||||
limited for tapes
|
limited functionality for tapes
|
||||||
<sup><A HREF="#17">17</A></sup></td>
|
<sup><A HREF="#17">17</A></sup></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -271,11 +314,20 @@ allocate too much memory for buffers and taking it into an OOM state
|
|||||||
through </td>
|
through </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td align="left"><b>Cache safe<sup><A HREF="#11">11</A></sup>
|
||||||
|
FILEIO</b></td> <td> Safe </td> <td>Safe only RDWR
|
||||||
|
backend</td> <td> Safe </td> <td> Under development (just added) </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="left"><b>Cache safe<sup><A HREF="#11">11</A></sup>
|
||||||
|
BLOCKIO</b></td> <td> Safe </td> <td> - </td> <td> Not safe </td> <td> Under development (just added)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td align="left"><b>4k sectors support in pass-through mode</b></td> <td> + </td> <td> - </td> <td> - </td> <td> ? </td>
|
<td align="left"><b>4k sectors support in pass-through mode</b></td> <td> + </td> <td> - </td> <td> - </td> <td> ? </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>4k, 2k, 1k and 512 byte sectors emulation
|
<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>
|
in modes, other than pass-through</b></td> <td> + </td> <td> - </td> <td> - </td> <td> Partial </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Virtual CD devices emulation from ISO files
|
<td align="left"><b>Virtual CD devices emulation from ISO files
|
||||||
@@ -302,8 +354,9 @@ devices (VTL)</b></td> <td> - </td> <td>Experimental</td> <td> - </td> <
|
|||||||
</sup></td> <td> Kernel only </td>
|
</sup></td> <td> Kernel only </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Interface with user space</b></td> <td>SysFS/IOCTL/ProcFS/
|
<td align="left"><b>Interface with user space</b></td> <td>SysFS (or obsolete
|
||||||
Netlink</td> <td> - </td> <td>IOCTL/ProcFS/
|
ProcFS)/
|
||||||
|
IOCTL/Netlink</td> <td> - </td> <td>IOCTL/ProcFS/
|
||||||
Netlink</td> <td> ConfigFS/IOCTL/ProcFS </td>
|
Netlink</td> <td> ConfigFS/IOCTL/ProcFS </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -322,14 +375,40 @@ devices (VTL)</b></td> <td> - </td> <td>Experimental</td> <td> - </td> <
|
|||||||
<td align="left"><b>Max ErrorRecoveryLevel</b></td> <td> 0 </td> <td> 0 </td> <td> 0 </td> <td> 2 </td>
|
<td align="left"><b>Max ErrorRecoveryLevel</b></td> <td> 0 </td> <td> 0 </td> <td> 0 </td> <td> 2 </td>
|
||||||
</tr>
|
</tr>
|
||||||
<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>
|
<td align="left"><b>Bidirectional Commands</b></td> <td> + </td> <td> + </td> <td> - </td> <td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Extended CDB (size >16 bytes)</b></td> <td> + </td> <td> + </td> <td> - </td> <td> - </td>
|
<td align="left"><b>Extended CDB (size >16 bytes)</b></td> <td> + </td> <td> + </td> <td> - </td> <td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Support for Asynchronous Event Notifications
|
<td align="left"><b>Support for AENs (initiators can instantly see any
|
||||||
(AEN)</b></td> <td> + </td> <td> - </td> <td> - </td> <td> - </td>
|
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="#13">13</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>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Safe implementation of connections and sessions
|
<td align="left"><b>Safe implementation of connections and sessions
|
||||||
@@ -337,30 +416,40 @@ reinstatement <sup><A HREF="#20">20</A></sup></b></td> <td> Safe </td> <td> N
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>Safe restart <sup><A HREF="#21">21</A></sup>
|
<td align="left"><b>Safe restart <sup><A HREF="#21">21</A></sup>
|
||||||
</b></td> <td> Safe </td> <td> ? </td> <td> Not safe </td> <td> ?</td>
|
</b></td> <td> Safe </td> <td> ? </td> <td> Not safe before
|
||||||
</tr>
|
v1.4.18. After -
|
||||||
<tr>
|
probably safe.</td> <td> ?</td>
|
||||||
<td align="left"><b>Support for <a href="max_outstanding_r2t.txt">
|
|
||||||
MaxOutstandingR2T >1</a> (write performance increase on high latency
|
|
||||||
links)</b></td> <td> + </td> <td> Partial </td> <td> - </td> <td> + </td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><b>iSCSI MIBs</b></td> <td> - </td> <td> - </td> <td> - </td> <td> +-
|
<td align="left"><b>iSCSI MIBs</b></td> <td> - </td> <td> - </td> <td> - </td> <td> +-
|
||||||
<sup><A HREF="#15">15</A></sup></td>
|
<sup><A HREF="#15">15</A></sup></td>
|
||||||
</tr>
|
</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>
|
</table>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<p><strong><big><u>REMARKS:</u></big></strong></p>
|
<p><strong><big><u>REMARKS:</u></big></strong></p>
|
||||||
|
|
||||||
<p><A NAME="1"></A> 1. STGT has SCSI target engine and memory management in user space with small hooks in the kernel to interact with in-kernel target drivers.
|
<p><A NAME="1"></A> 1. STGT has all SCSI target processing and memory management in the user space. In the kernel it has only a small library
|
||||||
As a direct consequence, fully user space STGT target (e.g. iSCSI) can run without any kernel modules needed.</p>
|
to help in-kernel target drivers to interact with it. As a direct consequence, neither iSCSI, nor iSER as well as
|
||||||
|
any other user space STGT target need any STGT kernel modules loaded to run.</p>
|
||||||
|
|
||||||
<p><A NAME="2"></A> 2. 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. All iSCSI management implemented in user space and actual data transfers in kernel space without user space involved.</p>
|
||||||
|
|
||||||
<p><A NAME="3"></A> 3. ISER target driver has long known (since Feb 2008) data corruption problem, which localization hasn't been determined yet and might be
|
<p><A NAME="3"></A> 3. ISER target driver has long known (since Feb 2008) data corruption problem, which localization hasn't been
|
||||||
in the STGT core. See <a href="http://lists.berlios.de/pipermail/stgt-devel/2008-February/001367.html">here</a> and
|
determined yet and might be in the STGT core. See
|
||||||
<a href="http://lists.wpkg.org/pipermail/stgt/2009-February/002630.html">here</a>.</p>
|
<a href="http://lists.berlios.de/pipermail/stgt-devel/2008-February/001367.html">here</a>,
|
||||||
|
<a href="http://lists.wpkg.org/pipermail/stgt/2009-February/002630.html">here</a> and
|
||||||
|
<a href="http://lists.wpkg.org/pipermail/stgt/2010-August/004076.html">here</a>.</p>
|
||||||
|
|
||||||
<p><A NAME="4"></A> 4. The result "in average" is listed. One target can be better somewhere, another one somewhere else. Although manual tuning of target and
|
<p><A NAME="4"></A> 4. 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>,
|
system parameters tends the restore the difference listed in the comparison. You can find example measurements <a href="vl_res.txt">here</a>,
|
||||||
@@ -371,8 +460,9 @@ links)</b></td> <td> + </td> <td> Partial </td> <td> - </td> <td> + </
|
|||||||
with iSCSI-SCST iSCSI target driver, where performance will be at "***+" level.</p>
|
with iSCSI-SCST iSCSI target driver, where performance will be at "***+" level.</p>
|
||||||
|
|
||||||
<p><A NAME="6"></A> 6. There is no performance data for LIO, which allow to make a direct comparison with other targets.
|
<p><A NAME="6"></A> 6. There is no performance data for LIO, which allow to make a direct comparison with other targets.
|
||||||
The conclusion was made by source code study only. LIO should have performance on the IET level or less,
|
The conclusion was made based on source code study. LIO should have performance on the IET level or less,
|
||||||
because of more processing overhead. It might be much less for small block sizes.</p>
|
because of more processing overhead. It might be much less for small block sizes. Also the single I/O thread per-device
|
||||||
|
approach LIO has is not optimal in many cases.</p>
|
||||||
|
|
||||||
<p><A NAME="7"></A> 7. In SCST data are always passed in zero-copy manner between target and backend drivers without need for any
|
<p><A NAME="7"></A> 7. 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>
|
additional kernel patches, except in case, when local access (scst_local) used with user space backend. </p>
|
||||||
@@ -391,6 +481,10 @@ links)</b></td> <td> + </td> <td> Partial </td> <td> - </td> <td> + </
|
|||||||
of devices from the same target. This feature is required for hardware targets, which don't have ability
|
of devices from the same target. This feature is required for hardware targets, which don't have ability
|
||||||
to create virtual targets.</p>
|
to create virtual targets.</p>
|
||||||
|
|
||||||
|
<p><A NAME="11"></A> 11. "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="12"></A> 12. SCSI requires that if an initiator clears reservation held by another initiator, the reservation holder must be notified
|
<p><A NAME="12"></A> 12. 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
|
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
|
reservation data, which can corrupt them. This is what was called
|
||||||
@@ -434,8 +528,7 @@ links)</b></td> <td> + </td> <td> Partial </td> <td> - </td> <td> + </
|
|||||||
<p><A NAME="19"></A> 19. Doesn't need any kernel patch, except in the case, when used with user space backend.</p>
|
<p><A NAME="19"></A> 19. Doesn't need any kernel patch, except in the case, when used with user space backend.</p>
|
||||||
|
|
||||||
<p><A NAME="20"></A> 20. Connections and sessions reinstatement is, basically, a kind of Task Management command, because it implies commands aborting.
|
<p><A NAME="20"></A> 20. Connections and sessions reinstatement is, basically, a kind of Task Management command, because it implies commands aborting.
|
||||||
For instance, open-iscsi uses it as a less intrusive substistute for target reset in eh_target_reset_handler() callback. So, similarly
|
So, similarly to the safe task management above, a safe implementation of connections and sessions reinstatement
|
||||||
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
|
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>
|
being reinstated connection/session get into a state, where they can't affect new commands.</p>
|
||||||
|
|
||||||
|
|||||||
+15
-13
@@ -36,9 +36,7 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li><span>By sending donations. They will be spent on further work making SCST better as well as on providing
|
<li><span>By sending donations. They will be spent on further work making SCST better as well as on providing
|
||||||
better support and troubleshooting for you. Donations can be on one time or per period of time basis,
|
better support and troubleshooting for you. Donations can be on one time or per period of time basis,
|
||||||
from companies or individuals. They can be sent by direct bank transfer or using
|
from companies or individuals.</span></li>
|
||||||
Western Union, Moneygram or similar payment systems. Unfortunately, more convenient options,
|
|
||||||
like PayPal, are not available in Russia.</span></li>
|
|
||||||
<li><span>By sending patches, which fix bugs or implement new functionality.
|
<li><span>By sending patches, which fix bugs or implement new functionality.
|
||||||
See below a list of possible SCST improvements with some possible
|
See below a list of possible SCST improvements with some possible
|
||||||
implementation ideas.</span></li>
|
implementation ideas.</span></li>
|
||||||
@@ -49,10 +47,6 @@
|
|||||||
<li><span>By reporting bugs or other problems.</span></li>
|
<li><span>By reporting bugs or other problems.</span></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p>Contributing in SCST, you investing not only in making Linux the best storage OS, but, if your company
|
|
||||||
has a product or service, based on SCST, you also investing in the secured future of your product
|
|
||||||
or service and, hence, in the the secured future of your company.</p>
|
|
||||||
|
|
||||||
<h1>Possible SCST extensions and improvements</h1>
|
<h1>Possible SCST extensions and improvements</h1>
|
||||||
|
|
||||||
<A NAME="ZC_READ"></A><h3>Zero-copy FILEIO for READ-direction commands</h3>
|
<A NAME="ZC_READ"></A><h3>Zero-copy FILEIO for READ-direction commands</h3>
|
||||||
@@ -282,18 +276,26 @@
|
|||||||
|
|
||||||
<A NAME="SG_LIMIT"></A><h3>Solve SG IO count limitation issue in pass-through mode</h3>
|
<A NAME="SG_LIMIT"></A><h3>Solve SG IO count limitation issue in pass-through mode</h3>
|
||||||
|
|
||||||
<p>In the pass-through mode (i.e. using the pass-through device handlers
|
<p>In the pass-through mode (i.e. using the pass-through device handlers like
|
||||||
scst_disk, scst_tape, etc) SCSI commands, coming from remote initiators,
|
scst_tape, etc) SCSI commands, coming from remote initiators,
|
||||||
are passed to local SCSI hardware on target as is, without any
|
are passed to local SCSI hardware on target as is, without any
|
||||||
modifications. As any other hardware, the local SCSI hardware can not
|
modifications. As any other hardware, the local SCSI hardware can not
|
||||||
handle commands with amount of data and/or segments count in
|
handle commands with amount of data and/or segments count in
|
||||||
scatter-gather array bigger some values. If you have this issue you will see
|
scatter-gather array bigger some values. For some commands SCST can
|
||||||
symptoms like small transfers work well, but large ones stall and
|
split them on subcommands and, hence, workaround this problem, but it isn't
|
||||||
|
always possible. For instance, for tapes splitting write commands may mean
|
||||||
|
corrupting the tape data.</p>
|
||||||
|
|
||||||
|
<p>If you have this issue you will see
|
||||||
|
symptoms like small transfers work well, but large transfers stall and
|
||||||
messages like: "Unable to complete command due to SG IO count
|
messages like: "Unable to complete command due to SG IO count
|
||||||
limitation" are printed in the kernel logs.</p>
|
limitation" are printed in the kernel logs.</p>
|
||||||
|
|
||||||
<p>In <a href="sgv_big_order_alloc.diff">sgv_big_order_alloc.diff</a> you
|
<p>
|
||||||
can find a possible way to solve this issue.</p>
|
|
||||||
|
<p>The only complete way to fix this problem is to allocate data buffers with number
|
||||||
|
of entries inside the SG IO count limitation. In <a href="sgv_big_order_alloc.diff">sgv_big_order_alloc.diff</a>
|
||||||
|
you can find a possible way to solve this issue.</p>
|
||||||
|
|
||||||
<p>There are also 2 more patches you can look at:</p>
|
<p>There are also 2 more patches you can look at:</p>
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -126,7 +126,8 @@
|
|||||||
page-cache for all operations. This mode works well with high-end storage HBAs and for applications that
|
page-cache for all operations. This mode works well with high-end storage HBAs and for applications that
|
||||||
either do not need caching between application and disk or need the large block throughput.</span></li>
|
either do not need caching between application and disk or need the large block throughput.</span></li>
|
||||||
<li><span>User space mode using scst_user device handler, which allows to implement in the
|
<li><span>User space mode using scst_user device handler, which allows to implement in the
|
||||||
user space virtual SCSI devices in the SCST environment.</span></li>
|
user space high performance virtual SCSI devices. Comparing with fully in-kernel dev handlers
|
||||||
|
this mode has very low overhead (few %%).</span></li>
|
||||||
<li><span>Performance testing device handlers as well as NULLIO mode to provide
|
<li><span>Performance testing device handlers as well as NULLIO mode to provide
|
||||||
a way for direct performance measurements without overhead of actual data
|
a way for direct performance measurements without overhead of actual data
|
||||||
transfers from/to underlying SCSI devices.
|
transfers from/to underlying SCSI devices.
|
||||||
|
|||||||
+2
-2
@@ -70,8 +70,8 @@
|
|||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p>Also you shouldn't be deceived by the fact that some (small) part of STGT was accepted into the kernel.<br>
|
<p>Also don't be deceived by the fact that some (small) part of STGT was accepted into the kernel.<br>
|
||||||
It doesn't mean that STGT has the "kernel quality". In fact, STGT as a whole similarly to any other
|
It doesn't mean that STGT has the "kernel quality". STGT as a whole similarly to any other
|
||||||
out-of-kernel-tree project lives on its own, hence has its own quality level, which isn't necessary better, than the
|
out-of-kernel-tree project lives on its own, hence has its own quality level, which isn't necessary better, than the
|
||||||
quality level of SCST.</p>
|
quality level of SCST.</p>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user