| <!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 - 2020 <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> |