iSCSI Enterprise Target的架构分析

13 篇文章 0 订阅
4 篇文章 0 订阅

iSCSI Enterprise Target,简称IET. 是开源的iSCSI Target软件,西方在源码阅读基础上获得,可由http://iscsitarget.sourceforge.net/获取。


IET,由用户层模块和内核层模块共同组成,它们之间通过NETLINK机制进行通信。

一、用户模块(ietd daemon)

它是IET的管理工具,主要功能可描述为:

1)用来配置参数信息,如iSCSI Target的端口、uid、gid等;

2)从iSCSI Target配置文件/etc/ietd.conf中读取配置信息,提交给内核模块;


二、内核模块(iscsi_trgt.ko)

IET的绝大部分工作是在内核完成,如数据的接收、发送,而在用户态主要完成会话的建立和授权、登录等。包含了很多功能模块,描述如下:

1)IOTYPE

负责建立导出到iSCSI Initiator的iSCSI Lun. 设备类型(或者说,设备IO类型),如fileio/blockio,就在这个模块注册。

用户态程序ietd daemon与此模块通信,内容包括具体的配置信息,详情可参看/etc/ietd.conf.

这种模块化的实现方式,使设备类型可方便的进行扩展。在此模块中注册新的设备类型,根据定义良好的接口,编写相应类型的IO处理函数,就能方便地实现不同类型的存储,如key/value存储等。

2)NTHREAD(Network Thread)

负责:

监听来自iSCSI Initiator的iSCSI Request;

接收iSCSI Request;

初始化iSCSI Command结构和相应的LUN参数;

分配数据缓存(struct tio,是当前网络线程对接收到的用户数据的封装,充当了底层存储和网络收发数据的中间接口);

处理r2t数据,如果需要(r2t,指有响应数据需要回复iSCSI Initiator的情况);

3)WTHREAD(Worker Thread)

主要与NTHREAD交互,负责:

处理NTHREAD生成的iSCSI Command;

命令可以被分成两类:与设备类型相关/不相关;

对每一个命令,会有一个回调函数对应,WTHREAD在处理命令的时候调用。与设备类型相关的命令,会调用与注册的设备类型相关的回调函数,如fileio/blockio

4)iSCSI Response模块

处理完一条命令后,WTHREAD将处理用回调函数方式转移到响应模块。在错误发生时,它会根据错误类型发送SCSI sense数据。如果有响应数据,就以发送r2t的方式向Initiator回复数据。


5)



三、对iSCSI mod的理解

1)blockio

网络传过来的数据包被组织成了struct tio(一个包含多个struct page的数据结构,只是对多个页的封装),然后经过block_io.c中的请求处理函数blockio_make_request,生成bio后直接submit_bio到通用块层。

其实,就是iscsi_mod替代了VFS层注册了自己的方法去处理用户态数据(由自己分配内存页,然后生成bio结构)。

2)fileio

仍然通过VFS,由通用的read/write系统调用进行数据读写


参考:http://www.software112.com/products/iitk-osd-simulator.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值