iscsi target IET架构

IET(iSCSI Enterprise Target)是内核态实现的iscsi target,相比于用户态实现的target(比如tgt),iet比较稳定,并且也算是历史悠久,io都直接经过内核态,性能比较好。本文主要针对IET的程序架构,从程序模块,命令操作处理流程,initiator与target的交互,I/O处理流程进行分析。

1.程序模块

IET包含3部分:ietadm,ietd,iscsi_trgt,其中ietadm是命令行工具,提供target,lun的创建、删除、参数设置等操作;而ietd是一个用户态程序,用于和ietadm以及initiator的交互,并进行对应的处理,iscsi相关的发现、登录、认证、登出等操作都在用户态实现;iscsi_trgt是一个内核模块,iscsi协议的解析处理,I/O处理都在这个内核态模块内完成。

1)ietdadm与ietd通过IPC进行交互,IPC在ietd程序启动的时候进行初始化;
2)ietd启动的时候还会创建监听socket(默认的端口是3260,并且会为该机器上的每个ip都生成一个监听socket,initiator在发现target的时候会指定ip和port),initiator就通过socket与ietd进行交互,一个initiator和一个target建立起一个长连接(iscsi协议标准说的是至少1个连接),后续的I/O都是通过这个连接进行交互;
3)ietd与iscsi_trgt使用ioctl进行交互,一些操作(比如创建删除target,创建删除lun等)都由ietd在用户态进行处理后,将命令通过ioctl发到iscsi_trgt,然后iscsi_trgt在内核态下进行相关处理;

2.initiator与iet的交互

initiator向ietd发起请求,ietd根据请求的类型进行相关处理,在ietd进程主要进行的是discovery、login、auth、logout等登录认证的操作,有需要的情况下ietd会将命令发到iscsi_trgt进行处理。这里以iscsi login为例来简单分析处理流程。

如图所示,initiator发起login请求到ietd,ietd收到login请求,初始化连接信息(conn),并进行login的对应处理,然后初始化session,完成后,ietd使用ioctl通过iscsi_trgt在内核态去创建session,完成后返回给ietd,然后ietd返回给initiator响应信息;之后ietd通知iscsi_trgt接管fd,iscsi_trgt就会在内核初始化连接(conn),这个连接直接与用户态ietd使用的那个fd关联,直接使用了这个fd对应的内核sock,后续initiator端的I/O就直接通过这个内核sock与iscsi_trgt进行交互。

3.I/O处理

在介绍I/O处理流程之前,先要了解一下每个target所对应的内核线程。

在创建target的时候,iscsi_trgt内核模块就会为这个target分配一个网络线程nthread(名字叫istd,比如target id是1000,那么ps的时候就可以看到“istd1000”这样的进程),并且会分配若干个工作线程wthread(名字叫istiod),默认是8个,可以通过参数配置的。网络线程会进行iscsi协议的解析处理,处理完成后放入工作队列(work_queue),并且唤醒工作线程,多个工作线程共用这个work_queue,从work_queue里取cmnd来进行对应的处理。

如图所示,在initiator端对iscsi设备进行io读写的时候经过文件系统、块设备到SCSI子系统,最后由SCSI low layer里的iscsi_tcp模块通过网络发送I/O请求到iscsi_trgt,iscsi_trgt里对应的target的连接的sock收到请求,回唤醒对应target的nthread,然后nthread进行协议的解析,处理完后将cmnd放到工作队列work_queue,并且唤醒wthread,wthread从队列里取cmnd,然后根据请求类型进行对应的处理(具体是在target_disk.c里的disk_execute_cmnd,包括INQUIRY、REPORT_LUNS、READ_CAPACITY、MODE_SENSE、READ_6/READ_10/READ_16、WRITE_6/WRITE_10/WRITE_16、SYNCHRONIZE_CACHE等对应请求的处理),比如读写处理,会走到后端存储类型(nullio,blockio,fileio)的具体处理流程:就是通过make_request指向到对应的request处理函数,比如blockio里的blockio_make_request,然后构造bio,调用submit_bio下发到底层磁盘设备进行处理;如果是fileio,就是调用vfs_read/vfs_write进行处理,I/O完成后,构造iscsi response放到到write_list(也是每个连接一个write_list,也就是说不同target不一样),唤醒nthread来进行iscsi response的相关处理,最后通过sock将相应发到initiator端的设备。

时间: 2024-11-05 11:28:22

iscsi target IET架构的相关文章

iscsi target tgt架构

tgt是用户态实现的iscsi target,而iet(iscsi enterprise target)是在内核态实现的target,tgt相比于iet来说,因为其用户态实现,方便调试,新加入一些功能等,不过性能相比iet来说要稍差一点.下面就介绍一下tgt的程序框架(略过iscsi协议解析处理部分),以便于整体把握tgt的代码,方便后续的一些修改. 1.整体框架 这里借用tgt官网给出的一张图. tgt中命令的操作,与initiator端的通信都是通过epoll来实现的,下面分别对这两部分进行

iscsi介绍及iscsi target配置

iSCSI 主要是透过 TCP/IP 的技术,将储存设备端透过 iSCSI target (iSCSI 目标) 功能,做成可以提供磁盘的服务器端,再透过 iSCSI initiator (iSCSI 初始化用户) 功能,做成能够挂载使用 iSCSI target 的客户端,如此便能透过 iSCSI 协议来进行磁盘的应用了. 也就是说,iSCSI 这个架构主要将储存装置与使用的主机分为两个部分,分别是: iSCSI target:就是储存设备端,存放磁盘或 RAID 的设备,目前也能够将 Linu

三种iSCSI target管理工具的比较

1. iSCSI简介 从协议层次的角度看,通常所说的SCSI通常是指一组包含块命令.控制器管理.系统命令和enclosure服务等内容的协议规范,对应于回话层:而其下的物理通道和链接方式就对应在数据链路层,SCSI命令可以通过串口.Fibre Channel.SAS.infiniband.Internet.USB.PCIE等进行传输.iSCSI就是一种把异地存储资源通过TCP/IP网络映射到本地逻辑存储设备的SCSI实现.不同于NFS向用户提供按文件为单位访问远程存储的方式,它向用户提供了以块方

在Ubuntu 12.04上配置iSCSI Target服务

  今天自己按照网上搜来的教程自己在Ubuntu 12.04上配置了iSCSI Target服务,在这里简单地做个纪录.操作系统是全新安装的Ubuntu 12.04,配置一块500 GB的SATA笔记本硬盘.安装操作系统时将硬盘划分为两个分区,其中一个50 GB的分区(/dev/sda1)挂载为操作系统的根分区:另外一个450 GB的分区(/dev/sda2)作为提供存储服务的空间,暂时不挂载. 安装完操作系统之后,安装必要的软件: $ sudo apt-get install chkconfi

Linux tgtadm: Setup iSCSI Target ( SAN )

Linux target framework (tgt) aims to simplify various SCSI target driver (iSCSI, Fibre Channel, SRP, etc) creation and maintenance. The key goals are the clean integration into the scsi-mid layer and implementing a great portion of tgt in user space.

马哥学习笔记二十五——ISCSI协议,架构及其安装配置

ISCSI监听在tcp/3260端口 iSCSI Target:iscsi-target-utils 客户端认正方式: 1.基于IP 2.基于用户,CHAP tgtadm:命令行工具,模式化命令 --mode 常用模式:target,logicalunit,account target --op new.delete.show.update.bind.unbind logicalunit --op new.delete account --op new.delete.bind.unbind --

基于SSD的iSCSI target的建立和Vdbench测试

在SAN存储系统中,LIO是把存储设备直接转化为可用存储资源的高效工具,它实现了基于文件/块设备/ramdisk甚至回环设备创建存储设备的iscsi target接口和CLI. 通过iSCSI initiator访问iSCSI target 的典型应用场景和联接如下图所示意: 上图非常直观地显示了基于ram./dev/下的设备以及文件,创建iSCSI target的数据流.如果更深入地再往下看,可以看到它和底层文件系统.卷管理的接口如下所示: 厘清了iSCSI的应用模式和软件层次后,就不难理解如

iscsi target存储技术-多路径 udev动态管理设备文件方法 nfs

惠普 戴尔 华为 目前国内服务器厂商排名 存储技术分类: SCSI小型计算机系统接口DAS直连式存储NAS网络技术存储SAN存储区域网络FC光纤通道 SCSI小型计算机系统接口 (U盘) DAS技术:直连式存储(将存储设备通过scsi接口或光纤通道直连到计算机上,不能实现数据与其它主机的共享,占用服务器操作系统资源cpu,io等,数据量越大,性能越差) NAS网络技术存储  做公享文件夹  (这是一种专用数据存储服务器,以数据为中心,将存储设备与服务器彻底分离,集中管理数据,提高性能,节省成本)

Redhat7 搭建ISCSI target

划分新分区(步骤略) # fdisk /dev/sdc # partprobe   (更新分区表) 先创建卷组 # pvcreate /dev/sdc1 # vgcreate vgming /dev/sdc1 # lvcreate -L 2G -n /dev/vgming/lvming # lvscan ISCSI target # yum install targetcli # targetcli > backstores/block create /dev/vgming/lvming >