作者:-1 发布时间:2022-02-18 14:34 浏览次数 :
前端是负责主机和SSD设备通讯的接口,命令和数据传输通过前端总线流向或流出SSD设备。
从硬件模块上来看,前端有SATA/SAS/PCIe PHY层,俗称物理层,接收串行比特数据流,转化成数字信号给前端后续模块处理。这些模块处理NVMe/SATA/SAS命令,它接收并处理一条条命令和数据信息,涉及到数据搬移会使用到DMA。一般命令信息会排队放到队列中,数据会放到SRAM快速介质中。如果涉及到加密和压缩功能,前端会有相应的硬件模块做处理,软件无法应对压缩和加密的快速的需求,会成为性能的瓶颈。
从协议角度,以一条SATA Write FPDMA命令为例,从主机端文件系统出发发出一条写命令请求,到主板南桥AHCI寄存器级别的写命令操作,忽略文件系统到AHCI路径的操作细节,从SSD前端总线上看会发出如下的写交互操作:
Step 1: 主机在总线上发出Write FPDMA命令FIS(Frame Information Structure,帧信息结构,是SATA为了实现异步传输数据块而使用的封包);
Step 2: SSD收到命令后,判断自己内部写缓存(Write Buffer)是否有空间去接收新的数据:如果有,则发出DMA Setup FIS到主机端,否则什么也不发,主机端处于等待状态。(这叫流控:数据流量控制);
Step 3: 主机端收到DMA Setup FIS后,发送不大于8KB数据的Data FIS给设备;
Step 4: 重复Step 2和Step 3直到数据全部发送完毕;
Step 5: 最后步骤设备(SSD)发送一个状态Status FIS给主机,表示从协议层面这条写命令完成全部操作。当然Status可以是一个good status或者一个bad/error status,表示这条Write FPDMA命令操作正常或者异常完成。