随着NVMe SSD在技术领域的广泛应用,越来越多的存储厂商开始聚焦基于NVMe-oF网络技术的存储系统的开发和推广。在这其中,Fibre Channel凭借可靠的架构特性、灵活的产品组网方式,占据了大量的市场份额。根据Fibre Channel路线图,传输带宽已经实现64GFC、128GFC,并向256GFC进发。同时,NVMe SSD在PCIe Gen4系统下能够达到7GB/s的顺序读和5GB/s的顺序写,这对纠错带来了很大挑战。
Fibre Channel Roadmap(引自fibrechannel.org)
Fibre Channel协议分为五层,其中FC-4为最上层协议族,负责把上层应用协议转化为Fibre Channel传输协议,通常包含FCP-SCSI、FC-IP、FC-NVMe等等。对于NVMe应用,目前分为FC-NVMe和FC-NVMe-2两套协议标准,NVMe IO命令通过FC-NVMe协议把NVMe命令翻译成Fibre Channel Exchange格式。FC-NVMe-2则做了更多优化,包括在事务终止前Exchange保存更长时间,Exchange数据结构重复利用,Exchange级别数据重传,Sequence、Exchange级别错误处理等等。
NVMe-oF架构图(引自brasstacksblog.typepad.com)
下面我们来介绍一下FC-NVMe-2引入的传输层纠错机制。
对于FCP-SCSI、FCP-NVMe,通常每个Exchange用于描述一个应用命令或应答,并且按照Exchange为单位选取不同的传输路径,相同的Exchange内,保证Frame传输顺序(Frame内则包括用户数据和CRC校验信息)。FC-NVMe没有规定Exchange级别的错误恢复定义,但通过改进后的FC-NVMe-2,在传输层处理数据传输出现的问题,且不会影响到业务层协议的执行。
Fibre Channel Exchange传输包逻辑架构(引自fibrechannel.org)
FC-NVMe-2提供在Exchange内部执行所有错误恢复的操作,提供Sequence级别的错误恢复,在Basic Link Services(BLSs)里使用FLUSH请求或应答的命令;在Sequence上实现事务重传机制;在设备节点登录时完成设备能力协商等等。
如,客户端发送Format NVMe命令后,长时间未得到响应,时间超过Flush超时阈值后,客户端发送Flush命令,服务端返回应答,告诉客户端Format NVMe命令的Sequence正在被处理,还未完成,需要再等待,不需要上层NVMe应用做错误处理。
例1:长时间运行命令(引自fibrechannel.org)
再比如,客户端发送NVMe Read命令后,长时间未得到响应,时间超过Flush超时阈值后,客户端发送Flush命令,服务端返回应答,告诉客户端Read NVMe命令的Sequence没有处理。客户端重新发送NVMe Read传输命令,不需要上层NVMe应用做错误处理。
例2:丢失命令(引自fibrechannel.org)
通过在传输层协议主动处理各种异常情况,降低NVMe应用层面的错误处理难度,改善了用户使用体验,方便用户使用Fibre Channel网络访问高速NVMe SSD设备,且无需改变运维异常处理流程和使用习惯。
参考资料