Features comparison between Linux SCSI targets
+ +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. +
+ +Also Sebastian Riemer wrote a good summary in his e-mail (April 2013)
+ +As on June 2011, briefly reviewed April 2013.
+ +| + | SCST + | STGT + | IET + | LIO/TCM + |
| General + | ||||
| Upstream kernel | - | - | - | Since 2.6.38 | +
| Generic Target Engine | + | + | iSCSI only | + | +
| Architecture | Kernel only | User space only | Split + 1 + | Kernel only | +
| Stability | + | + | + | Probably | +
| Performance 2 | ***** + 3 + | *** | **** | ****- | +
| Zero-copy passing data between target and +backend drivers | + + 4 + | + + 5 + | + | + | +
|---|---|---|---|---|
| Support for transports without expecting +transfer values (Wide (parallel) SCSI, SAS) | + | - | - | - | +
| Interface with user space | SysFS (or obsolete + ProcFS) | Custom | - | ConfigFS/IOCTL/ProcFS | +
| Features + | ||||
| Target drivers in kernel space | + | - | - | + | +
| Target drivers in user space | Via scst_local (e.g. + using STGT + pass-through) | + | - | Via tcm_loop (e.g. + using STGT pass-through) | +
| Backstorage handlers in kernel space | + | - | - | + | +
| Backstorage handlers in user space | + | + | - | - | +
| Advanced devices access control +7 | + | - | - | + | +
| Automatic sessions reassignment (changes in the +access control immediately seen by initiators) | + | - | - | - | +
| Support for Asynchronous Event Notifications +(AEN) | + | - | - | - | +
| Notifications for devices added/removed or +resized through AENs or Unit Attentions (initiators can instantly see +any target reconfiguration in a PnP-like manner) | + | - | - | - | +
| Bidirectional Commands | + | + | - | + | +
| Extended CDB (size >16 bytes) | + | + | - | + | +
| Descriptor sense support | + | + | - | - | +
| RESERVE/RELEASE +(Windows 2003 clustering) | + | + | + | + | +
| Safe RESERVE/RELEASE implementation according to +SCSI requirements 9 | Safe | Safe | Safe from + v1.4.18 | Not safe | +
| Safe implementation of Task Management commands +10 | Safe | Not safe | Not safe | LUN RESET - safe. + Other TM commands not + implemented. | +
| Support for SCSI task attributes, including +ORDERED commands | + | + | -, data + corruption possible + + 11 | -, data + corruption possible + + 11 |
+
| Persistent (SCSI-3) Reservations +(Windows 2008 clustering / RHEL5 I/O fencing) | + | + (not all + functionality + implemented) | - | + | +
| Durable, i.e. transactional, save of Persistent +Through Power Loss Persistent Reservation data | Durable | Not supported | - | Not durable | +
| ALUA | +/- (Implicit + only) + 19 + | - | - | +/- + 19 | +
| Failover Clustering | + | + | + | + | +
| Different threading models to choose the best +performing | + | - | - | - | +
| CPU affinity control | + | - | - | + | +
| I/O context grouping between I/O threads (big +performance win with CFQ) | + | - | + | - | +
| Per-initiator I/O context grouping (big +performance and fairness win if several initiators access the same +virtual or backend device on the target) | + | - | - | - | +
| Protection against commands with +wrong transfer size or transfer direction (may lead to crash or +hard lockup of the target) | + | - | - | - | +
| Protection against crashing target by making it +to allocate too much memory for buffers and go into OOM state + | + | - | - | - | +
| Caching of allocated buffers | + | - | - | - | +
| Latencies measurement facility | + | - | - | - | +
| Configuration tool with ability to automatically +apply changes in the config file on fly without any restarts | scstadmin | - | - | rtsadmin? | +
| SCSI MIBs | - | - | - | +- + 12 | +
| Supported transports and hardware + | ||||
| iSCSI | + | + | + | + | +
| QLogic (Fibre Channel and FCoE) | + | - | - | + | +
| Emulex (Fibre Channel and FCoE) | + | - | - | + | +
| SRP | + | - | - | Preliminary | +
| iSER | + | + | - | + | +
| Marvell (SAS) | Beta | - | - | - | +
| FCoE | + | Under + development | - | Alpha | +
| LSI (Parallel (Wide) SCSI and Fibre Channel) + | Alpha | - | - | - | +
| LSI (SAS) | Preliminary + (not completed) | - | - | - | +
| IBM pSeries Virtual SCSI | + | + | - | Preliminary | +
| Local access to emulated backstorage devices +6 | scst_local | - | - | tcm_loop | +
| Supported backstorage + | ||||
| Kernel side FILEIO | + | - | + | + | +
| Kernel side BLOCKIO | + | - | + | + | +
| User space FILEIO | + | + | - | - | +
| O_DIRECT FILEIO | fileio_tgt | + | - | - | +
| Async FILEIO | - | + | - | - | +
| Native RAMDISK | - | - | - | + | +
| SCSI pass-through + 13 | + | Single + initiator only, not + enforced + 14 + | - | Single initiator only, not enforced, + limited functionality for tapes + 14 | +
| Zero-copy data read/write to/from backstorage + | BLOCKIO, user space + FILEIO in O_DIRECT mode, + pass-through + 15 + | - + 5 + | BLOCKIO | BLOCKIO, pass- + through | +
| Cache safe8 +FILEIO | Safe | Safe only RDWR + backend | Safe | Safe | +
| Cache safe8 +BLOCKIO | Safe | - | Not safe | Safe | +
| 4k sectors support in pass-through mode | + | - | - | ? | +
| 4k, 2k, 1k and 512 byte sectors emulation +in modes, other than pass-through | + | + | - | + | +
| Virtual CD devices emulation from ISO files + | + | + | - | - | +
| Possibility to write to emulated from ISO files +CD devices | - | + | - | - | +
| Emulation of virtual tape and media changer +devices (VTL) | - | Experimental | - | - | +
| Thin provisioning support | + | ? | - | + | +
| iSCSI Target + | ||||
| Architecture | Split + 1 + | User space + only | Split + 1 + | Kernel only | +
| Interface with user space | SysFS (or obsolete + ProcFS)/ + IOCTL/Netlink | - | IOCTL/ProcFS/ + Netlink | ConfigFS/IOCTL/ProcFS | +
| Zero-copy data send/receive | Send only + 16 + | In some cases, + send only + 5 + | Send only | Send only | +
| Multiple connections per +session (MS/C) | - | - | + | + | +
| Max ErrorRecoveryLevel | 0 | 0 | 0 | 2 | +
| Support for limiting number of initiators +allowed to connect to a target | + | - | + | - | +
| Per-portal targets visibility control | + | - | + | - | +
| Per-initiators targets visibility control | + | + | + | - | +
| Support for AHS | + | + | - | - | +
| Support for iSCSI redirects | + | + | + | - | +
| Bidirectional Commands | + | + | - | - | +
| Extended CDB (size >16 bytes) | + | + | - | - | +
| Support for AENs (initiators can instantly see any +target reconfiguration in a PnP-like manner) | + | - | - | - | +
| Support for iSNS | + | + | + | - | +
| Safe implementation of Task Management commands +10 | Safe | Not safe | Not safe | ABORT TASK - not safe, + LUN RESET - safe, + other TM commands not + implemented. | +
| Safe implementation of connections and sessions +reinstatement 17 | Safe | Not safe | Not safe | Not safe | +
| Usage of hardware instructions for digest +calculations, if available | + | - | - | + | +
| Each connection multithreaded digest calculation + | + | - | - | - | +
| Safe restart 18 + | Safe | ? | Not safe before + v1.4.18. After - + probably safe. | ? | +
| iSCSI MIBs | - | - | - | +- + 12 | +
| Local access target + | ||||
| Bidirectional support | + | - | - | + | +
| Support for AENs (initiators can instantly see any +target reconfiguration in a PnP-like manner) | + | - | - | - | +
+
REMARKS:
+ +1. All iSCSI management implemented in user space and actual data transfers in kernel space without user space involved.
+ +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 here, + here and here.
+ +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.
+ +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.
+ +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().
+ +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.
+ +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.
+ +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.
+ +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 + "Russian roulette with your data" 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.
+ +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 *AFTER* 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.
+ +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.
+ +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.
+ +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.
+ +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 + here. + 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.
+ +15. You can find a proposal how to implement zero-copy FILEIO in SCST on the + Contributing page.
+ +16. Doesn't need any kernel patch, except in the case, when used with user space backend.
+ +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.
+ +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.
+ +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.
+ +
+
+
+ SCST Fibre Channel over Ethernet (FCoE) target is developed by Open-FCoE team and Joe Eykholt.
+ Since February 2010 the main development place of it is SCST SVN repository.
+
+ Target driver for LSI/MPT adapters was originally developed by Hu Gang, then Erik Habbinga has continued the development.
+
+ This is an SCST driver for ISP QLogic chipsets commonly used in many SCSI and FC host bus adapters.
+ It is based on Matthew Jacob's (
+ This is target driver for QLogic qla2xxx (22xx++) Fibre Channel adapters.
+ SCSI RDMA Protocol (SRP) target driver has been developed by Vu Pham. Since March
+ 2008 the main development place of the SRP target driver is SCST SVN repository.
+ It is maintained by Bart Van Assche.





























