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的种类支持。
【本文只在51cto博客作者 "底层存储技术" https://blog.51cto.com/12580077 个人发布,公众号发布:存储之谷】,如需转载,请于本人联系,谢谢。