作者:-1????發(fā)布時間:2022-02-18 14:34 ????瀏覽次數(shù) :
前端是負(fù)責(zé)主機(jī)和SSD設(shè)備通訊的接口,命令和數(shù)據(jù)傳輸通過前端總線流向或流出SSD設(shè)備。
從硬件模塊上來看,前端有SATA/SAS/PCIe PHY層,俗稱物理層,接收串行比特?cái)?shù)據(jù)流,轉(zhuǎn)化成數(shù)字信號給前端后續(xù)模塊處理。這些模塊處理NVMe/SATA/SAS命令,它接收并處理一條條命令和數(shù)據(jù)信息,涉及到數(shù)據(jù)搬移會使用到DMA。一般命令信息會排隊(duì)放到隊(duì)列中,數(shù)據(jù)會放到SRAM快速介質(zhì)中。如果涉及到加密和壓縮功能,前端會有相應(yīng)的硬件模塊做處理,軟件無法應(yīng)對壓縮和加密的快速的需求,會成為性能的瓶頸。
從協(xié)議角度,以一條SATA Write FPDMA命令為例,從主機(jī)端文件系統(tǒng)出發(fā)發(fā)出一條寫命令請求,到主板南橋AHCI寄存器級別的寫命令操作,忽略文件系統(tǒng)到AHCI路徑的操作細(xì)節(jié),從SSD前端總線上看會發(fā)出如下的寫交互操作:
Step 1: 主機(jī)在總線上發(fā)出Write FPDMA命令FIS(Frame Information Structure,幀信息結(jié)構(gòu),是SATA為了實(shí)現(xiàn)異步傳輸數(shù)據(jù)塊而使用的封包);
Step 2: SSD收到命令后,判斷自己內(nèi)部寫緩存(Write Buffer)是否有空間去接收新的數(shù)據(jù):如果有,則發(fā)出DMA Setup FIS到主機(jī)端,否則什么也不發(fā),主機(jī)端處于等待狀態(tài)。(這叫流控:數(shù)據(jù)流量控制);
Step 3: 主機(jī)端收到DMA Setup FIS后,發(fā)送不大于8KB數(shù)據(jù)的Data FIS給設(shè)備;
Step 4: 重復(fù)Step 2和Step 3直到數(shù)據(jù)全部發(fā)送完畢;
Step 5: 最后步驟設(shè)備(SSD)發(fā)送一個狀態(tài)Status FIS給主機(jī),表示從協(xié)議層面這條寫命令完成全部操作。當(dāng)然Status可以是一個good status或者一個bad/error status,表示這條Write FPDMA命令操作正?;蛘弋惓M瓿?。