SCSI RDMA Protocol (SRP) Target driver for Linux ================================================= SRP Target driver is designed to work directly on top of OpenFabrics OFED-1.x software stack (http://www.openfabrics.org) or Infiniband drivers in Linux kernel tree (kernel.org). It also interfaces with Generic SCSI target mid-level driver - SCST (http://scst.sourceforge.net) By interfacing with SCST driver we are able to work and support a lot IO modes on real or virtual devices in the backend 1. scst_disk -- interfacing with scsi sub-system to claim and export real scsi devices ie. disks, hardware raid volumes, tape library as SRP's luns 2. scst_vdisk -- fileio and blockio modes. This allows you to turn software raid volumes, LVM volumes, IDE disks, and normal files into SRP's luns. 3. NULLIO mode will allow you to measure the performance without sending IOs to *real* devices Prerequisites ------------- 1. First it is required to download and install SCST driver. Please refer to SCST's Internet page http://scst.sourceforge.net for download and installation instructions. You can also find SCST's design document, svn repository development tree and utility tools for basic storage management 2a. Installation of OFED-1.x (x > 0) with kernel_ib development package rpm or 2b. Built and installed Linux "vanilla" kernel tree from kernel.org 3. Download SRP target driver and its installation scripts from openfabrics.org git clone git://git.openfabrics.org/~vu/srpt.git ~/srpt git clone git://git.openfabrics.org/~vu/srpt_inc ~/srpt_inc Installation ------------ A. Instruction to included in and built with OFED-1.1 development tree ----------------------------------------------------------------------- 1. cd /usr/local/ofed/srp/openib-1.1 2. patch -p1 < ~/srpt_inc/add_srpt_01.patch 3. patch -p1 < ~/srpt_inc/add_srpt_02.patch 4. patch -p1 < ~/srpt_inc/add_srpt_03.patch 5. cp -r ~/srpt drivers/infiniband/ulp/srpt 6. ./configure --with-srp-target-mod 7. make and make install B. Instruction to be included in and built with OFED-1.2 development tree -------------------------------------------------------------------------- 1. cd ~/ofa_1_2_kernel-2007MMDD-hhmm 2. patch -p1 < ~/srpt_inc/add_srpt_01.patch 3. patch -p1 < ~/srpt_inc/add_srpt_03.patch 4. cp -r ~/srpt drivers/infiniband/ulp/srpt 5. ./configure --with-srp-target-mod 6. make and make install B. Instruction to be included in and built with "vanilla" kernel development tree ---------------------------------------------------------------------------------- 1. cd /usr/src/linux-2.6.1x 2. patch -p1 < ~/srpt_inc/add_srpt_03.patch 3. cp -r ~/srpt drivers/infiniband/ulp/srpt 4. configure and build SRP target module driver as normal How-to run ----------- 1. Please refer to SCST's README for loading scsi_tgt driver and its dev_handlers drivers (scst_disk, scst_vdisk block or file IO mode, nullio, ...) 2. modprobe ib_srpt On initiator machines you can manualy do the following steps: 1. modprobe ib_srp 2. ipsrpdm -c (to discover new SRP target) 3. echo > /sys/class/infiniband_srp/srp-mthca0-1/add_target 4. fdisk -l (will show new discovered scsi disks) Example: Assume that you use port 1 of first HCA in the system ie. mthca0 [root@lab104 ~]# ibsrpdm -c -d /dev/infiniband/umad0 id_ext=0002c90200226cf4,ioc_guid=0002c90200226cf4,dgid=fe800000000000000002c90200226cf5,pkey=ffff,service_id=0002c90200226cf4 [root@lab104 ~]# echo id_ext=0002c90200226cf4,ioc_guid=0002c90200226cf4,dgid=fe800000000000000002c90200226cf5,pkey=ffff,service_id=0002c90200226cf4 > /sys/class/infiniband_srp/srp-mthca0-1/add_target OR + You can edit /etc/infiniband/openib.conf to load srp driver and srp HA daemon automatically ie. set SRP_LOAD=yes, and SRPHA_ENABLE=yes + To set up and use high availability feature you need dm-multipath driver and multipath tool + Please refer to OFED-1.x SRP's user manual for more in-details instructions on how-to enable/use HA feature TO DO ------ + Stress test and stabilize the code + Performance tuning + Integrate and test with SCST's admin/management tools for LUNs masking/sharing among initiator hosts + Handle QP, shared-RQ, and asynchronous events