通过之前的三篇博文,我介绍了目前Linux中广泛使用的三个SCSI target的架构和使用方法。那如何在这三者之间做一个选择呢?这里给出我对它们之间优劣点的总结,欢迎高手指正错误。
1. STGT
在2.6.38之后,STGT默认只剩下用户态的实现,这对于iSCSI target来说,用户态即可满足要求。如果需要iSER等,需要自己将kernel的部分打上。另外从以上功能图表上可以看出,STGT主要专注于iSCSI上。
它的优点是:
1)简单,方便使用和维护;
2)另外已经有ceph的target driver,只是需要做性能优化;
3)因为工作在用户态,所以即使挂掉了,也不会对其他运行的程序产生影响;
它的缺点是:
1)支持的传输协议较少;
2)对SCSI协议支持比较简单,一些cluster中的特性比如PR等都不支持,所以基于stgt的方案不能在cluster中使用;
3)对于多initiator访问同一target的场景,性能表现不好,这个主要是因为tgt的实现所致,即它目前的策略是针对一个lun创建16个线程处理IO。不过可以通过one lun per target的方案解决;
2. SCST
SCST的核心模块工作在内核里,可以支持通过系统模块(VFS、块层)访问的后端存储如块设备、文件设备以及passthrough的scsi设备。对于通过library库访问的ceph rbd以及glusterfs等后端存储,SCST也提供了一个模块scst_user,不过你得自己写插件。
它的优点是:
1)支持更多传输协议
2)针对性能做了特殊的优化
3)除了基本的SCSI协议支持外,还有一些高级支持:
SCST支持永久性预留(Persistent Reservation, PR);这是一个用于高可用集