2005-04-12 05:03:14

by Alex Aizman

[permalink] [raw]
Subject: [ANNOUNCE 0/6] Linux-iSCSI High-Performance Initiator

This is to announce Linux-iSCSI project: High-Performance iSCSI
Initiator v5.0.0.2.

The corresponding user space tools:

http://sourceforge.net/project/showfiles.php?group_id=26396

1. Performance Results
=================

1.1 SETUP
========
See http://www.open-iscsi.org/cgi-bin/wiki.pl/Performance-setup

1.2 SUMMARY
============
256K block Write: 810 MBytes/sec
256K blocks Read: 550 MBytes/sec
1K block Read: 75,000 IOPS


1.3 Disktest results
==============

256K block size WRITE operation:
--------------------------------

Session #0: /dev/sda

| 2005/04/11-09:39:42 | STAT | 9796 | v1.1.12 | /dev/sda | Write
throughput: 430646600.1B/s (410.70MB/s), IOPS 1642.9/s.
| 2005/04/11-09:39:43 | STAT | 9796 | v1.1.12 | /dev/sda | Write
throughput: 430876514.5B/s (410.92MB/s), IOPS 1643.8/s.


Session #1: /dev/sdb

| 2005/04/11-09:40:11 | STAT | 9811 | v1.1.12 | /dev/sdb | Write
throughput: 419816033.3B/s (400.37MB/s), IOPS 1601.6/s.
| 2005/04/11-09:40:12 | STAT | 9811 | v1.1.12 | /dev/sdb | Write
throughput: 419868739.1B/s (400.42MB/s), IOPS 1601.8/s.


Total: ~810 MBytes/sec from a single iSCSI Initiator.


256K block size READ operation:
----------------------------------------

Session #0: /dev/sda

| 2005/04/11-09:47:00 | STAT | 9988 | v1.1.12 | /dev/sda | Read
throughput: 278883766.9B/s (265.96MB/s), IOPS 1065.3/s.
| 2005/04/11-09:47:01 | STAT | 9988 | v1.1.12 | /dev/sda | Read
throughput: 281018368.0B/s (268.00MB/s), IOPS 1073.2/s.

Session #1: /dev/sdb

| 2005/04/11-09:47:04 | STAT | 9976 | v1.1.12 | /dev/sdb | Read
throughput: 294106843.4B/s (280.48MB/s), IOPS 1122.6/s.
| 2005/04/11-09:47:05 | STAT | 9976 | v1.1.12 | /dev/sdb | Read
throughput: 294842094.9B/s (281.18MB/s), IOPS 1125.4/s.

Total: ~550 MBytes/sec from single iSCSI Initiator machine


1K block size READ operation:
-----------------------------

Session #0: /dev/sda

| 2005/04/11-09:57:28 | STAT | 10067 | v1.1.12 | /dev/sda | Read
throughput: 38327973.2B/s (36.55MB/s), IOPS 37430.2/s.
| 2005/04/11-09:57:29 | STAT | 10067 | v1.1.12 | /dev/sda | Read
throughput: 38321291.3B/s (36.55MB/s), IOPS 37423.7/s.

Session #1: /dev/sdb

| 2005/04/11-09:57:30 | STAT | 10000 | v1.1.12 | /dev/sdb | Read
throughput: 39967796.7B/s (38.12MB/s), IOPS 39031.5/s.
| 2005/04/11-09:57:31 | STAT | 10000 | v1.1.12 | /dev/sdb | Read
throughput: 40131755.9B/s (38.27MB/s), IOPS 39191.6/s.

Total: ~76,000 IOPS from single iSCSI Initiator machine


2. Patches
========

The following 6 patches alltogether represent the Open-iSCSI Initiator:

Patch 1:
SCSI LLDD consists of 3 files:
- iscsi_if.c (iSCSI open interface over netlink);
- iscsi_tcp.[ch] (iSCSI transport over TCP/IP).

Patch 2:
Common header files:
- iscsi_if.h (user/kernel #defines);
- iscsi_proto.h (RFC3720 #defines and types);
- iscsi_iftrans.h (iscsi transport interface).
- iscsi_ifev.h (user/kernel events).

Patch 3:
drivers/scsi/Kconfig changes.

Patch 4:
drivers/scsi/Makefile changes.

Patch 5:
include/linux/netlink.h changes (added new protocol NETLINK_ISCSI)

Patch 6:
Documentation/scsi/iscsi.txt


3. Changelog since v5.0.0.1 (Open-iSCSI v 0.1)
===================================
* ERL=0 in kernel support
* fixed scsi discovery
* highmem fix
* more acurate asserts
* host-put fix
* r2t vs. sendhdr race fix
* minor fixes
* discovery fix, small write cleanup
* serialization between conn_destroy(), xmitworker() and data_recv()
* xmit code cleanup
* read regression fix
* more accurate command line handling
* adding tname to the node rec key
* mempool preallocation
* recv pdu OOM-safe
* fix r2t->sg
* buf_left() fix
* trim skb on alloc
* immqueue leak fix
* more accurate error reporting
* do not check for LUN on R2T receive in ERL=0.
* flush xmit queues on conn_stop()
* Ming's patch to have default port for discovery
* do not close session on bad cmd_rsp() from target
* write optimization: send iSCSI PDU header as a part of the same TCP
payload
* ctask->sg vs. sg_count cleanup
* refcounting on session create/destroy fix
* unblock eh_abort() in case of TMF timedout
* 256 LUNS support fix
* race fixed: rmmod concurrent with session_destroy()
* cleanup comments (Matt Mackall) - implemented
* recovery optimization: avoid big allocations on re-open
* initial scsi_transport_iscsi implementation
* introduced host, session and connection contexts on the iscsi_if level
* iscsi_if parameters validation
* no mallocs on datapath during netlink operations in user-space for
down calls
* initial resource error detection
* task abort sent after session gets reopened - fixed
* greater than 2TB support
* iscsid fork now works.
* to sync caches, delete session's LUNs before actual logout task
* added get_param(); used in iscsi transport class
* regression.sh: device parameter added
* transport register/unregister path cleanup
* transport api vs. user/kernel definitions split
* idbm node and discovery records version check
* IPC via netlink + mempool_zones initial implementation
* immediate task's data pool preallocation
* added protection from SIGTERM
* added protection from OOM-killer using oom_adj == -17
* allocate cache aligned iscsi_taskcache
* tx latency: transmitting from queuecommand() if trylock succeeds
* reduced context switching in queuecommand
* max_xmit_dlength properly negotiated
* enable Nagle
* netlink reply cleanup
* kernel/user IPC cleanup: added and implemented iscsi_ipc callback
structure
* receive pool for control PDU's per-connection added
* using predefined macro for max_sg SG_ALL
* kernel IPC transport header file added
* picking unique OUI ISID for the same target based on session's SID


Regards,

Alex Aizman & Dmitry Yusupov