蔡曉晰,周明政,丁鋼波,楊杰
(1.中電海康集團52 研究所,杭州311121;2.中電海康集團研究院,杭州311121)
主流非易失存儲器目前主要有兩種結構:NOR 和NAND。相比NOR Flash,NAND Flash 具有更高的存儲密度,更低的成本,是目前非易失存儲器的主流存儲介質。但無論是NAND Flash 還是NOR Flash,其存儲介質的讀、擦寫速度分別在微秒級和毫秒級,無法與納秒級的主機端處理器(HOST CPU)直接通信。
非易失存儲系統中包含DRAM 和NAND Flash 兩種存儲介質,DRAM 掉電丟失數據;而NAND Flash 需要一次寫入整頁數據,并伴隨較長時間的編程潛伏期(tProg),無法做到隨時隨地改寫小數據,并且NAND Flash 擦寫次數有限,用來統計全壽命邏輯地址的讀寫次數,會急劇降低NAND Flash 壽命。因此傳統的非易失存儲系統方案無法做到邏輯地址全壽命統計和數據緩存,無法在系統方案層面對隨機讀寫響應做優化。
因此,如何提高固態存儲器件的隨機訪問性能,成為一個亟需解決的問題。
圖1 為當前主流非易失存儲系統架構讀方案示意圖。
以一個常用的非易失存儲器芯片為例,該SOC 芯片分為以下幾個主要的部分:CPU 模塊(ARM)、片上存儲模塊(SRAM)、無線傳輸模塊(藍牙、近場通信、射頻等),外設子模塊及模擬模塊等。

圖1 當前主流系統方案讀架構圖
傳統的非易失存儲系統器上電后,在響應隨機讀I/O(讀操作命令)時,最長路徑需要把多級邏輯地址(邏輯地址)映射表從NAND Flash 中讀取出來,再根據邏輯地址映射表獲取正確的數據,理論上需要:
T=(n+1)*tRead
時間才能響應一次隨機讀,其中n 指邏輯地址映射表的映射層級,tR 是指NAND Flash 的讀取數據的潛伏期,一般為60us。這個時間是導致無法調高隨機讀響應的原因。
圖2 為當前主流非易失存儲系統架構寫方案示意圖。
傳統的非易失存儲系統,在響應隨機寫I/O(寫操作命令)時。最長路徑需要直接將數據下刷,然后修改多級邏輯地址映射表,當多次寫入同一邏輯地址時,會導致同一個邏輯地址被多次寫入,邏輯地址映射表被多次改表,此過程不僅需要多個tProg 的時間做響應,也會消耗過多的NAND Flash 壽命。一次完成的可靠寫流程,除了完成數據編程,還需要下刷所有表項,理論上需要時間
T=(n+1)*tProg
時間才能響應一次隨機寫,其中n 指邏輯地址映射表的映射層級,tR 是指NAND Flash 的讀取數據的潛伏期,一般為200us。

圖2 當前主流系統方案寫架構圖
由上文分析,可以看到,無論是讀是寫,隨機性能受到NAND Flash 本身的讀寫潛伏期影響,這由NAND Flash 本身性質決定,當前主流非易失存儲系統,為了加快隨機性能,往往采用減少映射表層級,加大DRAM緩存等傳統方法。由于DRAM 斷電無法保存數據,以及功耗成本等因素影響,無法采用太大容量的DRAM,因此對隨機性能的提升有限。
在眾多非易失性存儲技術當中,自選扭矩轉移磁性存儲器STT-MRAM(Spin-Transfer Torque Magnetic RAM)因為其面積小,非易失性,較高的讀取速度,接近于無限的擦寫次數,高溫下長時間的數據保持能力以及抗強磁場輻射,較低的泄漏功耗和兼容CMOS 技術正成為一種當今最有前景的高速緩存技術。具備掉電不易失的特性,是作為和NAND Flash 組合存儲的天生優良介質[1]。
當前,眾多半導體設計大廠都將MRAM 芯片作為下一代非易失性存儲介質的研發重點,除了臺積電、三星和東芝一直在持續推進STT-MRAM 的研發之外,美國的EVERSPIN 公司已經發布了256Mb 的量產測試芯片,在嵌入式MRAM 領域,格羅方格半導體公司已經在22nm FD-SOI 工藝平臺上率先推出了eMRAM 的選項,且良率可達到90%以上,可以供各芯片設計公司選用[2],我國也已經開展了MRAM 的前沿技術研究,領銜的單位有中電海康和上海磁宇等。期待不久的將來,具備完全自主知識產權的磁存儲器件,將會廣泛地應用在信息存儲設備中。
使用嵌入式STT-MRAM 應用在非易失性存儲系統架構設計中,充分利用其掉電不易失數據的特性,和低延時的讀寫響應,對存儲器中存儲地址進行全壽命統計和數據緩存,通過系統調度達到提高非易失性存儲系統隨機性能的目的
在STT-MRAM 中存儲NAND Flash 的所有邏輯地址的讀寫次數。
非易失存儲系統控制器取STT-MRAM 固定劃分后的一區域作為計數區,并利用該計數區記錄NAND Flash的所有邏輯地址的讀寫次數。由于STT-MRAM 的I/O的低延時高帶寬,整個記錄耗時為ns 級別,可以忽略。
根據邏輯地址的讀寫次數選取部分邏輯地址作為高命中邏輯地址,取NAND Flash 中與高命中邏輯地址對應的數據作為高命中邏輯地址數據,將高命中邏輯地址數據存儲在STT-MRAM 的緩沖區中。
綜合考慮對固態存儲器件的隨機訪問性能的優化效果和系統的處理壓力,選取部分邏輯地址作為高命中邏輯地址。一般而言,選取方式為:根據邏輯地址的讀寫次數對所有邏輯地址進行從高到低的排序,取排序靠前的一部分邏輯地址作為高命中邏輯地址。
當然,排序算法可采用例如冒泡法、二叉樹法等成熟的算法,這里不再贅述。而所選取的高命中邏輯地址的量可以是占所有邏輯地址的1%~10%。
非易失存儲系統控制器取STT-MRAM 固定劃分后的另一區域作為緩沖區,將與高命中邏輯地址對應的高命中邏輯地址數據存放在該緩沖區中。
在收到讀操作命令時,更新STT-MRAM 中讀操作命令請求的目的邏輯地址的讀寫次數,若目的邏輯地址為高命中邏輯地址,則將緩沖區中與目的邏輯地址對應的高命中邏輯地址數據返回;否則進行常規讀操作。
在常規技術中,收到讀操作命令時,會立即根據讀操作命令請求的目的邏輯地址和NAND Flash 中存儲的邏輯地址映射表,得到對應的物理地址,根據所述物理地址找到對應的數據塊,對數據塊進行讀操作。
而該過程所需的時間較長,從而明顯限制固態存儲器件的隨機讀響應。

圖3 加入MRAM后讀方案
如圖3 所示,本實施例在收到讀操作命令時,先判斷是否命中高命令邏輯地址,若命中,則直接將STTMRAM 緩沖區中的對應數據返回,簡化了高命中邏輯地址的響應路徑,從而提高系統隨機訪問性能;若未命中,再進行常規的讀操作。
由于在響應讀操作命令時,會更新相應邏輯地址的讀寫次數,為了保證STT-MRAM 緩沖區中存儲的一直為最新的高命中邏輯地址數據,故在每次響應讀操作命令后,會進行一次高命中邏輯地址的檢查與更新。
具體地,高命中邏輯地址的檢查與更新,包括:
取高命中邏輯地址中的最小讀寫次數作為閾值;
若目的邏輯地址不是高命中邏輯地址且讀寫次數大于閾值,則將NAND Flash 中與目的邏輯地址對應的數據存入STT-MRAM 的緩沖區中;
同時將最小讀寫次數的高命中邏輯地址對應的數據從緩沖區中取出并寫入NAND Flash 的空數據塊中,記錄對應的物理地址,建立物理地址與最小讀寫次數的高命中邏輯地址的新的地址映射關系,更新NAND Flash 中存儲的邏輯地址映射表。
簡而言之,高命中邏輯地址的檢查與更新的過程即為STT-MRAM 的緩沖區中的數據替換過程,將大于閾值的邏輯地址作為新的高命中邏輯地址中的一員,并將對應數據寫入緩沖區中,將原來的被超過的高命中邏輯地址退還為普通邏輯地址,并將對應數據從緩沖區中取出。
在高命中邏輯地址的檢查與更新完成后,對緩沖區中的高命中邏輯地址數據對應的高命中邏輯地址根據讀寫次數進行重新排序,并將新排序中最小的讀寫次數作為新的閾值。
在收到寫操作命令時,更新STT-MRAM 中寫操作命令請求的目的邏輯地址的讀寫次數,若目的邏輯地址為高命中邏輯地址,則將緩沖區中與目的邏輯地址對應的高命中邏輯地址數據進行改寫;否則進行常規寫操作。
如圖4 所示,本實施例在收到寫操作命令時,先判斷是否命中高命令邏輯地址,若命中,則直接改寫STT-MRAM 緩沖區中的對應數據,簡化了高命中邏輯地址的響應路徑,從而提高系統隨機訪問性能,且減少了對NAND Flash 的擦寫操作次數,從而有效延長NAND Flash 的壽命;若未命中,再進行常規的寫操作。

圖4 加入MRAM后寫方案
由于在響應寫操作命令時,會更新相應邏輯地址的讀寫次數,同理為了保證STT-MRAM 緩沖區中存儲的一直為最新的高命中邏輯地址數據,故在每次響應寫操作命令后,會進行一次高命中邏輯地址的檢查與更新。
具體地,高命中邏輯地址的檢查與更新,包括:
取高命中邏輯地址中的最小讀寫次數作為閾值;
若目的邏輯地址不是高命中邏輯地址且讀寫次數大于閾值,則將NAND Flash 中與目的邏輯地址對應的數據存入STT-MRAM 的緩沖區中;
同時將最小讀寫次數的高命中邏輯地址對應的數據從緩沖區中取出并寫入NAND Flash 的空數據塊中,記錄對應的物理地址,建立物理地址與最小讀寫次數的高命中邏輯地址的新的地址映射關系,更新NAND Flash 中存儲的邏輯地址映射表。
在高命中邏輯地址的檢查與更新完成后,對緩沖區中的高命中邏輯地址數據對應的高命中邏輯地址根據讀寫次數進行重新排序,并將新排序中最小的讀寫次數作為新的閾值。
由于在對讀寫操作的響應以及高命中邏輯地址的檢查與更新過程中,會產生無效的邏輯地址,從而影響系統的存儲。為保證系統具有足夠的空白數據塊,系統會自發性或被動型的進行GC 流程(內存回收流程)。

圖5 通過內存回收下刷數據方案
具體地,如圖5 所示,內存回收流程,包括:
取一個新的數據塊作為目的Block;
將STT-MRAM 的緩沖區中的高命中邏輯地址數據寫入目的Block 中(即圖5 中的流程1),設置NAND Flash 中與高命中邏輯地址對應的數據為無效數據(即圖5 中的流程2);
將NAND Flash 中的有效數據搬運至目的Block中(即圖5 中的流程3)。
內存回收流程中,被搬運的數據所在的數據塊為源Block。且一次內存回收流程,源Block 可以是一塊,也可以是多塊。
常規技術中,內存回收流程僅為將源Block 中的有效數據搬運至目的Block 中。而本實施例中為了避免在內存回收流程后需重新進行高命中邏輯地址的選取,在內存回收流程時,先將STT-MRAM 的緩沖區中的所有高命中邏輯地址數據統一整理到同一目的Block 中,然后將源Block 中除高命中邏輯地址數據以外的有效數據搬運到目的Block 的剩余部分,以便于系統啟動時就可將高命中邏輯地址數據寫入STT-MRAM的緩沖區中,減少啟動響應時間。
在數據搬運完成后,擦除源Block 中的所有數據,得到空白的數據塊備用。
本文提出的基于STT-MRAM 的固態存儲器件隨機訪問性能提升方法,利用STT-MRAM 的高速讀寫性能和掉電非易失性能,采用STT-MRAM 作為固態存儲器件控制器內的高命中邏輯地址數據緩存。當發生內存回收(GC)時,利用STT-MRAM 中的邏輯地址讀寫次數數據,將高命中邏輯地址數據放入同一個Block(NAND Flash 的數據塊)中,以便上電啟動時就可將高命中邏輯地址數據放入STT-MRAM 中緩沖,增強系統的隨機訪問性能。