linux I/O栈 之 SCSI TARGET (1) 基础介绍

    我们之前介绍了,linux I/O 栈的预习方面。简单地了解了一下整个linux I/O 栈的组成。

从今天开始我们仔细介绍linux I/O栈的导出I/O栈,linux I/O target。

 一、基础介绍

     I/O导出协议栈是什么?

     从广义上讲,大家每天可能都会去接触这个东西。

     比如:我们每天使用的移动硬盘,它的内部也是一个I/O导出协议栈,但是由于它不涉及于I/O命令的解析,它仅仅是做了从SATA转USB的工作。

     其实硬盘本身也是一个I/O导出的标准规范,它用的规范往往是在后端存储协议实现(SAS 、SATA等)。

     那么我今天主要介绍的是前端导出I/O协议栈,主要是包括:iscsi、fiber channel等大家比较常见的方式。

     历史上很多导出I/O协议栈,如我最早接触的IET(iSCSI Enterprise Target),他只能导出iscsi target,还有SCST,他比较全面debug,很多hba板卡厂商推荐它。

     我们重点介绍的是:linux 主线维护的LIO,也就是内核里的target模块。

     

        linux I/O target的架构是很清晰的,从最上层的管理由CLI实现。

        CLI由/usr/lib/python3/dist-packages/rtslib_fb等支持。

    rtslib_fb通过操作/sys/kernel/config/target目录下面的目录和文件来创建target内核支持。

    target在内核的configfs是一套比较复杂的代码,用来管理kernel里的target的各个实例。

        target core模块由内核实现,它主要是做SCSI CMD的仿真工作,能够提供各样先进的能力。

    比如在cluster的角度,支持persistent reservations,ALUA(asymmetric logical unit assigntment),

REFERRALS特性,fence特性等。能够实现高级VAAI特性,这主要用于vmware exsi。

    这其中主要的SCSI命令unmap,zero,write same,xcopy等也可以适用于其他虚拟化存储平台。

    存储管理引擎包括:标准storage,内存map和RDMA等功能。

        最下层的fabric mod主要是导出协议驱动的支持。

        storage mod,主要是提供backend的种类支持。

        

    

        


猜你喜欢

转载自blog.51cto.com/12580077/2312193