沈慶,楊楚瑋,侯慶慶
(中國電子科技集團(tuán)公司第五十八研究所,江蘇無錫 214035)
在信息電子通信系統(tǒng)所涉及的大多數(shù)場(chǎng)景下,數(shù)據(jù)存儲(chǔ)及傳輸都不可或缺。在存儲(chǔ)硬盤領(lǐng)域,固態(tài)硬盤(SSD)作為目前的主流存儲(chǔ)設(shè)備滿足了多種場(chǎng)景下的使用需求,同時(shí)還具有便攜、功耗低及易擴(kuò)展等特點(diǎn)[1-3]。串行ATA(SATA)協(xié)議憑借接口適應(yīng)性強(qiáng)、速度快、抗干擾等特點(diǎn)得以廣泛應(yīng)用。在存儲(chǔ)架構(gòu)方面,文獻(xiàn)[4-5]提出采用磁盤陣列的方式進(jìn)行存儲(chǔ),并且定制了高速存儲(chǔ)系統(tǒng)的接口模塊,提高了存儲(chǔ)速度,但采用的SATA2 協(xié)議傳輸速率有限且存儲(chǔ)方式不具備糾錯(cuò)能力;文獻(xiàn)[6]提出采用SATA 芯片實(shí)現(xiàn)數(shù)據(jù)的高帶寬數(shù)據(jù)傳輸,但未采用通用處理器架構(gòu),因此不易于擴(kuò)展與移植;文獻(xiàn)[7]提出采用多控制器來操作多片NAND Flash 的架構(gòu),其問題在于控制器之間同步性較差。在直接存儲(chǔ)器訪問(DMA)傳輸設(shè)計(jì)方面,文獻(xiàn)[8]提出采用基于SATA 的直接存儲(chǔ)系統(tǒng)設(shè)計(jì),DMA 的設(shè)計(jì)主要集中在SATA 端,設(shè)備端缺少對(duì)DMA 傳輸?shù)奶幚?,采用ARM+FPGA 的結(jié)構(gòu)和AXI 總線處理DMA 傳輸請(qǐng)求,功耗較高且傳輸性能不理想。本文利用多通道并行策略和Flash 陣列管理技術(shù)設(shè)計(jì)了一種SSD 控制器,在SATA 接口及控制器中采用高速DMA 傳輸策略,提高了數(shù)據(jù)傳輸速度。
控制器采用的雙CPU 核結(jié)構(gòu)均為Cortex-M3 內(nèi)核(32 位)架構(gòu)。主機(jī)處理單元(HMU)模塊負(fù)責(zé)SSD與系統(tǒng)主機(jī)之間的通信及板級(jí)外設(shè)控制功能;算法管理單元(AMU)模塊負(fù)責(zé)閃存轉(zhuǎn)換層(FTL)算法管理,主要包含F(xiàn)TL 算法的實(shí)現(xiàn),并且對(duì)Flash 存儲(chǔ)陣列進(jìn)行管理與地址轉(zhuǎn)換;數(shù)據(jù)傳輸單元(DTU)模塊負(fù)責(zé)與Flash 進(jìn)行數(shù)據(jù)傳輸。HMU 與AMU 固件代碼的硬件載體為NAND Flash,SPI Flash 作為代碼備份區(qū)域。SSD 控制器整體架構(gòu)如圖1 所示。
圖1 SSD 控制器整體架構(gòu)
Flash 陣列管理的目的是通過優(yōu)化Flash 數(shù)據(jù)陣列結(jié)構(gòu)來提高數(shù)據(jù)并行性,從而提高SSD 的讀寫性能[9-10]。Flash 多通道并行陣列存儲(chǔ)結(jié)構(gòu)如圖2 所示,F(xiàn)lash 陣列采用并行總線方式,閃存陣列共用控制信號(hào)Control與片選信號(hào)CS。由CS 來拉低同一行所有Flash;剩余信號(hào)線分別控制各個(gè)所屬Flash,包括讀寫使能信號(hào)、命令/地址鎖存信號(hào)等,在圖中統(tǒng)一用Control 線表示。每次CS 有效,將選中所有Flash 進(jìn)行操作,每次傳輸?shù)臄?shù)據(jù)都能被均分到Flash 陣列的每一個(gè)Flash 中,實(shí)現(xiàn)大數(shù)據(jù)量的讀寫操作。
圖2 Flash 多通道并行陣列存儲(chǔ)結(jié)構(gòu)
如圖1 所示,DTU 被劃分為4 個(gè)通道,分別與Flash 陣列進(jìn)行數(shù)據(jù)交互。每個(gè)通道最多可容納8 片F(xiàn)lash,因此容量最多可擴(kuò)展到32 片F(xiàn)lash,由于通道間相互獨(dú)立且只有一個(gè)CPU 控制,大量的數(shù)據(jù)傳輸或讀寫操作會(huì)嚴(yán)重消耗CPU 資源,影響通道間的讀寫性能。本文添加了DMA 的設(shè)計(jì),DMA 配合控制器完成數(shù)據(jù)的讀寫,CPU 僅負(fù)責(zé)數(shù)據(jù)的地址與命令的讀寫,這大大減少了CPU 的資源占用,所以從整體上看,通道間是并行操作的。同時(shí),所提供的Flash 陣列管理可以靈活調(diào)整存儲(chǔ)顆粒數(shù)量以及更改存儲(chǔ)顆粒類型,具有一定的易擴(kuò)展性和易升級(jí)性。
本文設(shè)計(jì)的高速DMA 模塊存在于SATA 接口、HMU、AMU、DTU 等模塊,用于對(duì)主機(jī)和設(shè)備端的數(shù)據(jù)請(qǐng)求與數(shù)據(jù)傳輸工作。DMA 的應(yīng)用不僅大幅提高了數(shù)據(jù)傳輸?shù)乃俣龋覝p少了對(duì)CPU 資源的占用,提升了交互命令的處理速度。
SATA 接口結(jié)構(gòu)原理如圖3 所示。Port DMA 的作用包括:處理軟件分發(fā)的命令,傳輸相應(yīng)的幀信息結(jié)構(gòu)(FIS)到傳輸層;接收從傳輸層接收到的FIS,并將FIS 發(fā)送給CPU;在傳輸層FIFO 和系統(tǒng)內(nèi)存之間傳輸數(shù)據(jù);支持收發(fā)時(shí)鐘的電源管理。SATA 接口協(xié)議中,跟DMA 傳輸緊密相關(guān)的層級(jí)包括命令層、傳輸層、鏈路層。
圖3 SATA 接口結(jié)構(gòu)原理
SATA SSD 控制器中DMA 設(shè)計(jì)包括SATA DMA、HMU DMA0/1、AMU DMA、DTU DMA、DTU讀/寫DMA 共7 個(gè)DMA 加速引擎,如圖4 所示。
圖4 SATA SSD 控制器內(nèi)部DMA 分布
4.2.1 HMU DMA 模塊
HMU 單元中包含HMU DMA0/1,其中HMU DMA0 用于和SATA DMA 模塊進(jìn)行交互,HMU DMA1 用于和AMU DMA 進(jìn)行交互,如圖5 所示。
圖5 HMU DMA 連接關(guān)系
HMU 單元與SATA DMA 的傳輸指SATA 接口的FIFO 和HMU 單元的FIFO 之間經(jīng)過SATA DMA和HMU DMA0 的傳輸。主機(jī)讀數(shù)據(jù)操作:數(shù)據(jù)從HMU 的FIFO 先經(jīng)過HMU DMA0,然后經(jīng)過SATA DMA,最終到達(dá)SATA Rx FIFO。主機(jī)寫數(shù)據(jù)操作:數(shù)據(jù)從SATA Tx FIFO 先經(jīng)過SATA DMA,然后經(jīng)過HMU DMA0,最終到達(dá)HMU 的FIFO。其中HMU 包括兩種類型的FIFO:一種是單端口FIFO,由4 個(gè)單端口FIFO 組成,在同一時(shí)刻只能進(jìn)行讀操作或?qū)懖僮?;另一種是雙端口FIFO,在同一時(shí)刻可以同時(shí)讀寫。
4.2.2 AMU DMA 模塊
AMU 單元與HMU 單元的DMA 傳輸指AMU DMA 將HMU DMA1 的數(shù)據(jù)送至AMU FIFO 陣列管理模塊,AMU 與HMU 的連接關(guān)系如圖6 所示。
圖6 AMU 與HMU 的連接關(guān)系
AMU 單元與DTU 單元的DMA 傳輸指AMU 接收到HMU 或者SATA 傳輸數(shù)據(jù)指令時(shí),通過控制總線發(fā)送傳輸指令到DTU,DTU 根據(jù)指令配置DTU DMA,AMU FIFO 和DTU FIFO 進(jìn)行數(shù)據(jù)交互。AMU單元本身無DMA 和DTU 交互。
4.2.3 DTU DMA 模塊
當(dāng)AMU 與DTU 進(jìn)行數(shù)據(jù)交互時(shí),通過控制總線發(fā)送傳輸指令到DTU,DTU 根據(jù)具體指令被動(dòng)配置DTU DMA,AMU FIFO 和DTU FIFO 進(jìn)行數(shù)據(jù)交互。DTU 與AMU 的數(shù)據(jù)傳輸采用Local FIFO,Local FIFO 由4 個(gè)FIFO segment 組成,每個(gè)segment 可以實(shí)現(xiàn)以下操作:①和AMU FIFO 傳輸數(shù)據(jù);②和Flash 的DMA 模塊傳輸數(shù)據(jù);③和其他3 個(gè)FIFO segment 傳輸數(shù)據(jù);④被CPU 訪問。在同一時(shí)刻,一個(gè)FIFO segment 實(shí)現(xiàn)上面其中一種操作,與此同時(shí),其他FIFO segment 可以實(shí)現(xiàn)其他操作。DTU 與AMU 的連接關(guān)系如圖7 所示。
圖7 DTU 與AMU 的連接關(guān)系
采用本文提出的SSD 控制器設(shè)計(jì)方案,選擇長(zhǎng)江存儲(chǔ)某NAND Flash 顆粒,為方便控制器的嵌入式應(yīng)用與性能測(cè)試,控制器與若干顆粒組成的存儲(chǔ)陣列進(jìn)行通信,完成一系列讀寫測(cè)試。
DMA 讀寫功能測(cè)試結(jié)果如圖8 所示,采用Bus Hound 向SSD 發(fā)出DMA 讀寫命令,將數(shù)據(jù)寫入存儲(chǔ)陣列,隨后將數(shù)據(jù)讀出并進(jìn)行校驗(yàn),多次測(cè)試均未發(fā)現(xiàn)數(shù)據(jù)校驗(yàn)錯(cuò)誤,表明陣列控制器可以穩(wěn)定地完成讀寫操作。
圖8 DMA 讀寫功能測(cè)試結(jié)果
四通道讀寫測(cè)試:DTU 通道數(shù)量設(shè)置為4,使用ATTO Disk Benchmark 軟件,傳輸?shù)奈募笮?6~8 192 kB,總長(zhǎng)度為512 MB,直接I/O 訪問讀寫測(cè)試結(jié)果如圖9(a)所示。兩通道讀寫測(cè)試:DTU 通道數(shù)量設(shè) 置為2,使用相同的軟件設(shè)置,其測(cè)試結(jié)果如圖9(b)所示。
圖9 不同通道讀寫速率測(cè)試結(jié)果
由圖9 可以看出,當(dāng)傳輸文件從4 kB 一直到8 192 kB 變化時(shí),對(duì)于不同大小的文件,讀寫性能均很穩(wěn)定。兩通道讀取速率達(dá)119 MB/s,寫入速率達(dá)78MB/s;四通道讀取速率達(dá)238 MB/s,寫入速率達(dá)152 MB/s。四通道的讀寫性能約為兩通道的兩倍,符合設(shè)計(jì)預(yù)期,同時(shí)也說明DMA 在傳輸數(shù)據(jù)時(shí),適應(yīng)了不同通道間的速率差異,符合硬盤在不同通道間的讀寫性能表現(xiàn)。
為驗(yàn)證本文設(shè)計(jì)的DMA 數(shù)據(jù)傳輸性能優(yōu)化效果,在同一硬件環(huán)境下,將SSD 控制器中DMA 模塊失能,切換為字節(jié)訪問模式,其測(cè)試結(jié)果如圖10 所示。
圖10 單字節(jié)訪問讀寫速率測(cè)試結(jié)果
由圖10 可以看出,單字節(jié)訪問模式下,兩通道讀取和寫入速率可達(dá)20 MB/s 和14 MB/s;四通道讀取和寫入速率可達(dá)50 MB/s 和28 MB/s。經(jīng)實(shí)驗(yàn)測(cè)試,DMA 模式與單字節(jié)訪問相比,讀寫速率均有較大的提升。本文提出的高速DMA 傳輸設(shè)計(jì)技術(shù)有效地提高了SSD 數(shù)據(jù)傳輸效率,大幅提高了SSD 的讀寫速率。
為了測(cè)試控制器的環(huán)境適應(yīng)能力,對(duì)其進(jìn)行高低溫實(shí)驗(yàn)測(cè)試,驗(yàn)證其在-55~125 ℃環(huán)境中的工作性能。將測(cè)試電路(四通道模式下)放入溫箱,SSD 讀寫性能如圖11 所示。
圖11 -55~125 ℃下SSD 讀寫性能
使用burn in test 工具在高低溫環(huán)境下對(duì)其進(jìn)行長(zhǎng)時(shí)間(72 h)讀寫對(duì)比測(cè)試,多次測(cè)試結(jié)果均未出現(xiàn)誤碼,由此可知,本控制器可以適應(yīng)較復(fù)雜的工業(yè)溫度環(huán)境,且讀寫速率較穩(wěn)定。
本文闡述了一種支持高速DMA 傳輸技術(shù)的SSD控制器設(shè)計(jì)與實(shí)現(xiàn)方法,多次功能及性能測(cè)試結(jié)果表明,所設(shè)計(jì)的SSD 控制器可以滿足不同環(huán)境溫度下大容量、高速率的數(shù)據(jù)傳輸及存儲(chǔ)需求,同時(shí),所提供的Flash 陣列管理使存儲(chǔ)顆粒具有一定的擴(kuò)展性和升級(jí)性。
本設(shè)計(jì)在SATA 控制器中存在多個(gè)DMA 控制模塊,增加了固件配置和調(diào)度DMA 模塊的成本,未來計(jì)劃結(jié)合硬件模塊設(shè)計(jì)和固件設(shè)計(jì)等多方需求,整合DMA 資源,降低固件對(duì)DMA 的配置和調(diào)度成本,從而更加高效地使用高速DMA 技術(shù),實(shí)現(xiàn)SDD 讀寫速度和使用壽命的進(jìn)一步提高。