相關(guān)申請(qǐng)的交叉引用
本專利申請(qǐng)要求于2016年3月21日提交的美國(guó)臨時(shí)專利申請(qǐng)62/310,832的權(quán)益,該專利申請(qǐng)以引用方式并入本文。
本文所述實(shí)施方案整體涉及數(shù)據(jù)存儲(chǔ),并且具體涉及用于管理邏輯到物理映射信息的存儲(chǔ)以控制引導(dǎo)時(shí)間和寫入放大的方法和系統(tǒng)。
背景技術(shù):
在各種存儲(chǔ)系統(tǒng)中,根據(jù)邏輯地址空間操作的存儲(chǔ)器控制器將數(shù)據(jù)存儲(chǔ)在根據(jù)物理地址空間操作的一個(gè)或多個(gè)非易失性存儲(chǔ)器設(shè)備中。存儲(chǔ)器控制器通常在易失性存儲(chǔ)器中保持邏輯到物理映射表用于在邏輯地址和物理地址之間轉(zhuǎn)換。為了保護(hù)轉(zhuǎn)換信息免于丟失,例如在電源關(guān)閉的情況下,存儲(chǔ)器控制器通常在非易失性存儲(chǔ)器設(shè)備中備份轉(zhuǎn)換表。
用于保存和恢復(fù)邏輯到物理轉(zhuǎn)換信息的方法在本領(lǐng)域中是已知的。例如,美國(guó)專利申請(qǐng)公布2009/0327589,其公開(kāi)內(nèi)容以引用方式并入本文,該專利申請(qǐng)描述了一種包括易失性存儲(chǔ)器和多個(gè)非易失性數(shù)據(jù)塊的閃存存儲(chǔ)設(shè)備中的表日志的方法。所述方法包括以下步驟:在存儲(chǔ)于易失性存儲(chǔ)器中的尋址表的多個(gè)非易失性數(shù)據(jù)塊中的一個(gè)或多個(gè)第一非易失性數(shù)據(jù)塊中創(chuàng)建第一副本,將事務(wù)日志數(shù)據(jù)寫入到多個(gè)非易失性數(shù)據(jù)塊中的一個(gè)或多個(gè)第二非易失性數(shù)據(jù)塊中,以及在多個(gè)非易失性數(shù)據(jù)塊中的一個(gè)或多個(gè)第二非易失性數(shù)據(jù)塊已被事務(wù)日志數(shù)據(jù)填充之后基于存儲(chǔ)于易失性存儲(chǔ)器中的尋址表的變化來(lái)更新尋址表的第一副本。
美國(guó)專利8,909,851的公開(kāi)內(nèi)容以引用方式并入本文,其描述了一種操作存儲(chǔ)控制系統(tǒng)的方法,該方法包括提供存儲(chǔ)器控制器;由存儲(chǔ)器控制器訪問(wèn)易失性存儲(chǔ)器表;將易失性存儲(chǔ)器表中的持續(xù)變化寫入非易失性半導(dǎo)體存儲(chǔ)器;以及在電源循環(huán)之后,通過(guò)從最近使用列表中利用邏輯到物理分區(qū)還原隨機(jī)存取存儲(chǔ)器來(lái)還原易失性存儲(chǔ)器表中的邏輯到物理表。
技術(shù)實(shí)現(xiàn)要素:
本文所述的一種實(shí)施方案提供一種包括接口和處理器的裝置。接口被配置為與非易失性存儲(chǔ)器進(jìn)行通信。處理器被配置為保持在邏輯地址和非易失性存儲(chǔ)器中相應(yīng)的物理地址之間映射的轉(zhuǎn)換表,將轉(zhuǎn)換表的基線版本以一個(gè)或多個(gè)體塊備份到非易失性存儲(chǔ)器,再將一個(gè)或多個(gè)增量更新備份到非易失性存儲(chǔ)器,該一個(gè)或多個(gè)增量更新指定由后續(xù)存儲(chǔ)操作所導(dǎo)致的相對(duì)于轉(zhuǎn)換表的基線版本的變化,確定在與基線版本一起從非易失性存儲(chǔ)器恢復(fù)并在處理器中重播的情況下滿足轉(zhuǎn)換表的目標(biāo)恢復(fù)時(shí)間的增量更新的最大數(shù)量,以及將所備份增量更新的數(shù)量設(shè)定為不超過(guò)最大數(shù)量。
在一些實(shí)施方案中,處理器被配置為在連續(xù)體塊的保存之間備份增量更新。在其它實(shí)施方案中,處理器被配置為假設(shè)整個(gè)基線版本已被加載的情況下,通過(guò)評(píng)估目標(biāo)恢復(fù)時(shí)間的用于加載和重播增量更新的剩余時(shí)間來(lái)確定最大數(shù)量。在另外的實(shí)施方案中,處理器被配置為基于體塊大小選擇在連續(xù)體塊之間允許的增量更新的差別數(shù)量,以便滿足目標(biāo)恢復(fù)時(shí)間并維持與處理器進(jìn)行通信的主機(jī)的工作負(fù)荷性能。
在一個(gè)實(shí)施方案中,處理器被配置為基于轉(zhuǎn)換表的分片程度來(lái)選擇差別數(shù)量。在另一個(gè)實(shí)施方案中,處理器被配置為通過(guò)計(jì)算由體塊所覆蓋邏輯地址的范圍和體塊大小之間的比率來(lái)估計(jì)分片程度。在另一個(gè)實(shí)施方案中,處理器被配置為從主機(jī)接收數(shù)據(jù)用以存儲(chǔ),所述主機(jī)的寫入活動(dòng)概況包括隨機(jī)活動(dòng)和順序活動(dòng)的混合,并且處理器被進(jìn)一步配置為基于寫入活動(dòng)概況選擇在體塊的連續(xù)存儲(chǔ)之間的增量更新的允許數(shù)量。
在一些實(shí)施方案中,處理器被配置為針對(duì)具有主要隨機(jī)活動(dòng)的第一混合來(lái)選擇第一允許數(shù)量并且針對(duì)具有主要順序活動(dòng)的第二混合來(lái)選擇第二允許數(shù)量,所述第一允許數(shù)量小于所述第二允許數(shù)量。在其它實(shí)施方案中,處理器被配置為基于對(duì)在引導(dǎo)期間重建轉(zhuǎn)換表是否需要轉(zhuǎn)換表的重組的預(yù)測(cè)來(lái)選擇在正常操作期間保存在體塊之間的增量更新的數(shù)量。在另外的實(shí)施方案中,處理器被配置為在引導(dǎo)操作期間或在正常操作期間,估計(jì)增量更新的重播時(shí)間,如果所估計(jì)的重播時(shí)間比預(yù)定義的期限短,則通過(guò)在正常操作期間僅保存增量更新來(lái)重新使用轉(zhuǎn)換表的新近基線版本。
根據(jù)本文所述實(shí)施方案,另外還提供了一種方法,該方法包括在將數(shù)據(jù)保存于非易失性存儲(chǔ)器中的存儲(chǔ)器控制器中,保持在邏輯地址和非易失性存儲(chǔ)器中相應(yīng)的物理地址之間映射的轉(zhuǎn)換表。將轉(zhuǎn)換表的基線版本以一個(gè)或多個(gè)體塊備份到非易失性存儲(chǔ)器中。還將一個(gè)或多個(gè)增量更新備份到非易失性存儲(chǔ)器,所述一個(gè)或多個(gè)增量更新指定由后續(xù)存儲(chǔ)操作所導(dǎo)致的相對(duì)于轉(zhuǎn)換表的基線版本的變化。確定所述增量更新的最大數(shù)量,使得在與所述基線版本一起從所述非易失性存儲(chǔ)器恢復(fù)并在所述存儲(chǔ)器控制器中重播時(shí)滿足所述轉(zhuǎn)換表的目標(biāo)恢復(fù)時(shí)間。將所備份增量更新的數(shù)量設(shè)定為不超過(guò)最大數(shù)量。
結(jié)合附圖,從下文中對(duì)本發(fā)明的實(shí)施方案的詳細(xì)描述將更完全地理解這些實(shí)施方案和其他實(shí)施方案,在附圖中:
附圖說(shuō)明
圖1是示意性地示出了根據(jù)本文所述實(shí)施方案的存儲(chǔ)器系統(tǒng)的框圖;
圖2是示意性地示出了根據(jù)本文所述實(shí)施方案的物理到邏輯轉(zhuǎn)換信息的周期性備份的圖示;
圖3是示意性地示出了根據(jù)本文所述實(shí)施方案的根據(jù)先前備份的轉(zhuǎn)換信息重建轉(zhuǎn)換表的圖示;
圖4是示意性地示出了根據(jù)本文所述實(shí)施方案的用于自適應(yīng)地控制增量更新數(shù)量的方法的流程圖;以及
圖5是示出了根據(jù)本文所述實(shí)施方案在引導(dǎo)時(shí)間期間增量更新的重播時(shí)間的圖。
具體實(shí)施方式
概述
在諸如固態(tài)驅(qū)動(dòng)器(ssd)之類的各種存儲(chǔ)系統(tǒng)中,控制器將針對(duì)主機(jī)的數(shù)據(jù)存儲(chǔ)在一個(gè)或多個(gè)非易失性存儲(chǔ)器設(shè)備中。通常,來(lái)自主機(jī)的命令指定邏輯地址空間中的邏輯地址,而存儲(chǔ)器設(shè)備根據(jù)物理地址空間中的物理地址進(jìn)行操作??刂破骼棉D(zhuǎn)換表在邏輯地址和物理地址之間進(jìn)行轉(zhuǎn)換,控制器通常將該轉(zhuǎn)換表保持在本地易失性存儲(chǔ)器中。在本公開(kāi)的語(yǔ)境中以及在權(quán)利要求中,將非易失性存儲(chǔ)器設(shè)備統(tǒng)稱為“非易失性存儲(chǔ)器”。
由于易失性存儲(chǔ)器中所存儲(chǔ)的信息受到保護(hù)而免受供電中斷的影響,因此控制器通常將轉(zhuǎn)換信息保存在非易失性存儲(chǔ)器中。原則上,控制器可針對(duì)每個(gè)表更新將整個(gè)轉(zhuǎn)換表寫入到非易失性存儲(chǔ)器。然而,轉(zhuǎn)換表大小通常為大約數(shù)百兆字節(jié),因此這種備份策略將消耗無(wú)法接受的可用系統(tǒng)帶寬量并使非易失性存儲(chǔ)器中的寫入放大(wa)效應(yīng)增大。
本文所述的實(shí)施方案提供了用于管理轉(zhuǎn)換信息備份和恢復(fù)的經(jīng)改善的方法和系統(tǒng)。在本發(fā)明所公開(kāi)的技術(shù)中,控制器將轉(zhuǎn)換表的基線版本并可能將一個(gè)或多個(gè)增量更新保存在非易失性存儲(chǔ)器中,該一個(gè)或多個(gè)增量更新指定由于后續(xù)存儲(chǔ)操作使表相對(duì)于基線版本造成的變化。
在本發(fā)明所公開(kāi)的實(shí)施方案中,控制器將轉(zhuǎn)換表以塊(本文中稱為“基線體塊”,或?yàn)楹?jiǎn)明起見(jiàn)簡(jiǎn)稱為“體塊”)的形式保存到非易失性存儲(chǔ)器中。典型的體塊大小可為約1兆字節(jié),但也可使用任何其他適當(dāng)體塊大小。
在連續(xù)體塊的存儲(chǔ)之間,控制器可施用相對(duì)于基線版本改變轉(zhuǎn)換表的存儲(chǔ)操作。此類操作包括寫入用戶數(shù)據(jù)以及對(duì)非易失性存儲(chǔ)器施用諸如垃圾收集之類的維護(hù)操作。在一些實(shí)施方案中,在相鄰體塊的存儲(chǔ)之間,控制器將對(duì)應(yīng)于對(duì)轉(zhuǎn)換表造成的變化的增量更新保存到非易失性存儲(chǔ)器。增量更新的大小通常遠(yuǎn)小于體塊大小,因此控制增量更新數(shù)量的備份方案是有利的,如下文將描述的。
在一些實(shí)施方案中,控制器通過(guò)首先從非易失性存儲(chǔ)器將基線體塊加載回本地易失性存儲(chǔ)器來(lái)在引導(dǎo)期間重建轉(zhuǎn)換表。然后,控制器“重播”增量更新并將它們應(yīng)用于基線版本之上。在基線體塊和增量更新的數(shù)量較大的情況下,引導(dǎo)時(shí)間通常將較長(zhǎng),反之亦然。
保存基線體塊越頻繁就使得增量更新越少,即重建時(shí)間越短,但還不期望地導(dǎo)致對(duì)于存儲(chǔ)和維護(hù)操作的增大的wa和減小的帶寬。在一些實(shí)施方案中,在正常操作期間,通過(guò)自適應(yīng)地調(diào)整在保存后續(xù)基線體塊之前所允許的增量更新的數(shù)量,控制器控制轉(zhuǎn)換表在引導(dǎo)期間的預(yù)期重建時(shí)間。在一些實(shí)施方案中,預(yù)先指定最大引導(dǎo)時(shí)間,并且控制器使增量更新的數(shù)量在引導(dǎo)重建時(shí)間的約束下最大化。
存儲(chǔ)系統(tǒng)中另一重要因素為轉(zhuǎn)換表的總體大小,其取決于主機(jī)的寫入活動(dòng)概況(隨機(jī)存取vs.順序存取概況)。如果活動(dòng)大部分為隨機(jī)的,則轉(zhuǎn)換表趨于片段的,從而較大。如果活動(dòng)大部分為順序的,則表將為緊湊的并且較小。
在一些實(shí)施方案中,為了遵從最大引導(dǎo)時(shí)間規(guī)格,控制器根據(jù)轉(zhuǎn)換表的當(dāng)前大小(在正常操作期間)調(diào)整在基線體塊的連續(xù)存儲(chǔ)之間所允許的增量更新的數(shù)量,如上所述,該轉(zhuǎn)換表的當(dāng)前大小取決于主機(jī)寫入活動(dòng)概況。因此,在主機(jī)活動(dòng)大部分為隨機(jī)的,從而導(dǎo)致較大表的情況下,基線體塊的加載時(shí)間增大,從而用于加載和重播增量更新的剩余時(shí)間變得更短。因此,控制器允許較小數(shù)量的增量更新被保存在體塊文件片之間。在這種情況下,控制器更頻繁地存儲(chǔ)基線體塊并允許其間更少的增量更新。在主機(jī)活動(dòng)大部分為順序的,從而導(dǎo)致較小表的情況下,可在指定引導(dǎo)時(shí)間內(nèi)加載并重播較大數(shù)量的增量更新。在這種情況下,控制器不那么頻繁地保存基線體塊并允許更多增量更新。
在本發(fā)明所公開(kāi)的技術(shù)中,自適應(yīng)地調(diào)整基線體塊和增量更新之間的比率、以及體塊大小,以便滿足恢復(fù)轉(zhuǎn)換表的引導(dǎo)時(shí)間約束,并同時(shí)減小wa并增大存儲(chǔ)吞吐量。
系統(tǒng)描述
圖1是示意性地示出了根據(jù)本文所述實(shí)施方案的多設(shè)備存儲(chǔ)器系統(tǒng)20的框圖。系統(tǒng)20從主機(jī)24接受用于存儲(chǔ)的數(shù)據(jù)并將其存儲(chǔ)在存儲(chǔ)器中,并且從存儲(chǔ)器中檢索數(shù)據(jù)并將其提供給主機(jī)。在本實(shí)施例中,系統(tǒng)20包括存儲(chǔ)用于主機(jī)計(jì)算機(jī)的數(shù)據(jù)的固態(tài)盤(ssd)。然而,在另選的實(shí)施方案中,系統(tǒng)20可用于任何其他適當(dāng)應(yīng)用中并可用于任何其他適當(dāng)主機(jī),諸如用于計(jì)算設(shè)備、蜂窩電話或其他通信終端、可移除的存儲(chǔ)器模塊、安全數(shù)據(jù)(sd)卡、多媒體卡(mmc)和嵌入式mmc(emmc)、數(shù)字相機(jī)、音樂(lè)和其他媒體播放器和/或數(shù)據(jù)存儲(chǔ)于其中并從其中檢索的任何其他系統(tǒng)或設(shè)備。
系統(tǒng)20包括多個(gè)存儲(chǔ)器設(shè)備28,每個(gè)存儲(chǔ)器設(shè)備包括多個(gè)存儲(chǔ)器單元。在本實(shí)施例中,盡管設(shè)備28包括非易失性nand閃存設(shè)備,但也可使用即使在未被供電的情況下也保持其存儲(chǔ)信息的任何其他適當(dāng)類型的非易失性存儲(chǔ)器。非易失性存儲(chǔ)器包括例如鐵電式、電阻式和磁阻式ram。
在一些實(shí)施方案中,設(shè)備28的存儲(chǔ)器單元包括保持物理參數(shù)(諸如電壓或電荷)的連續(xù)模擬值的模擬存儲(chǔ)器單元??墒褂萌魏芜m當(dāng)類型的模擬存儲(chǔ)器單元,諸如上文列出的類型。在本實(shí)施例中,每個(gè)存儲(chǔ)器設(shè)備28包括非易失性存儲(chǔ)器nand閃存單元。存儲(chǔ)在單元中的電荷水平和/或?qū)懭氲絾卧泻蛷膯卧凶x出的模擬電壓或電流在本文中統(tǒng)稱為模擬值或存儲(chǔ)值。
系統(tǒng)20通過(guò)對(duì)單元編程以采用相應(yīng)的存儲(chǔ)器狀態(tài)(也稱為編程級(jí))來(lái)在存儲(chǔ)器單元中存儲(chǔ)數(shù)據(jù)。編程級(jí)從可能級(jí)的有限集合中選擇,并且每個(gè)級(jí)對(duì)應(yīng)于某一標(biāo)稱存儲(chǔ)值。例如,能夠通過(guò)將四個(gè)可能的標(biāo)稱存儲(chǔ)值中的一個(gè)可能的標(biāo)稱存儲(chǔ)值寫入到單元中來(lái)對(duì)2位/單元mlc進(jìn)行編程以采用四種可能的編程級(jí)中的一種可能的編程級(jí)。
存儲(chǔ)器單元通常以行和列來(lái)布置。通常,給定存儲(chǔ)器設(shè)備包括多個(gè)擦除塊(也稱為存儲(chǔ)塊),即一起被擦除的存儲(chǔ)器單元的群組。通常無(wú)法就地對(duì)數(shù)據(jù)重新編程,因此在被編程以其他數(shù)據(jù)之前對(duì)存儲(chǔ)塊進(jìn)行擦除。通常將數(shù)據(jù)編程到存儲(chǔ)器單元的群組,并以被稱為數(shù)據(jù)頁(yè)(或者為簡(jiǎn)明起見(jiàn),簡(jiǎn)稱為頁(yè))的數(shù)據(jù)單位從該存儲(chǔ)器單元的群組中檢索。
每個(gè)存儲(chǔ)器設(shè)備28可包括封裝器件或未封裝半導(dǎo)體芯片或模片。典型的ssd可包括多個(gè)存儲(chǔ)器設(shè)備,每個(gè)存儲(chǔ)器設(shè)備具有例如32gb或128gb的存儲(chǔ)容量。然而,一般來(lái)講,系統(tǒng)20可包括任何期望類型和大小的任何適當(dāng)數(shù)量的存儲(chǔ)器設(shè)備。盡管圖1的系統(tǒng)配置包括多個(gè)存儲(chǔ)器設(shè)備,但本文所述的一些方法和系統(tǒng)也可用于僅具有單個(gè)存儲(chǔ)器設(shè)備的系統(tǒng)。
系統(tǒng)20包括存儲(chǔ)器控制器32,該存儲(chǔ)器控制器接受來(lái)自主機(jī)24的數(shù)據(jù)并將其存儲(chǔ)在存儲(chǔ)器設(shè)備28中,并且從存儲(chǔ)器設(shè)備中檢索數(shù)據(jù)并將其提供給主機(jī)。存儲(chǔ)器控制器32包括用于與主機(jī)24通信的主機(jī)接口36;用于與存儲(chǔ)器設(shè)備28通信的存儲(chǔ)器接口40;以及處理所存儲(chǔ)數(shù)據(jù)和所檢索數(shù)據(jù)的處理器44。在一些實(shí)施方案中,控制器32利用糾錯(cuò)碼(ecc)對(duì)存儲(chǔ)數(shù)據(jù)進(jìn)行編碼。在這些實(shí)施方案中,控制器32包括ecc單元48,該ecc單元在數(shù)據(jù)被存儲(chǔ)于設(shè)備28中之前對(duì)數(shù)據(jù)進(jìn)行編碼并且對(duì)從設(shè)備28中所檢索數(shù)據(jù)的ecc進(jìn)行解碼。處理器44例如可利用運(yùn)行在適當(dāng)?shù)闹醒胩幚韱卧?cpu)上的軟件、利用硬件(例如,狀態(tài)機(jī)或其他邏輯部件)、或利用軟件元件和硬件元件的組合來(lái)實(shí)現(xiàn)。
控制器32經(jīng)由總線46與存儲(chǔ)器設(shè)備28進(jìn)行通信??偩€46可包括任何適當(dāng)鏈路或總線,諸如并行總線或串行總線或基于分組的總線(如pcie)??偩€46可根據(jù)任何適當(dāng)標(biāo)準(zhǔn)或協(xié)議并以任何適當(dāng)速率來(lái)操作。
為了將存儲(chǔ)命令施加于給定存儲(chǔ)器設(shè)備,控制器經(jīng)由總線46將存儲(chǔ)命令發(fā)送給存儲(chǔ)器設(shè)備。存儲(chǔ)命令的類型包括例如頁(yè)寫入命令、頁(yè)讀取命令和塊擦除命令。在一些實(shí)施方案中,系統(tǒng)20支持并行地施加于多個(gè)存儲(chǔ)器設(shè)備的存儲(chǔ)命令。
在一些實(shí)施方案中,主機(jī)24運(yùn)行文件系統(tǒng)(fs–附圖中未示出),該文件系統(tǒng)將一個(gè)或多個(gè)文件存儲(chǔ)于ssd20中。fs利用邏輯地址方案將文件存儲(chǔ)于ssd中。在此類方案中,fs向每個(gè)文件分配一組一個(gè)或多個(gè)邏輯地址(也稱為邏輯塊地址–lba),并根據(jù)lba將文件數(shù)據(jù)發(fā)送給ssd20以供存儲(chǔ)。
存儲(chǔ)器控制器32的處理器44通常維持邏輯到物理地址轉(zhuǎn)換,該轉(zhuǎn)換使主機(jī)所指定的邏輯地址與閃存設(shè)備28中的相應(yīng)物理存儲(chǔ)位置(也稱為物理地址)相關(guān)聯(lián),并將數(shù)據(jù)存儲(chǔ)于適當(dāng)?shù)奈锢泶鎯?chǔ)位置。邏輯到物理地址轉(zhuǎn)換(也稱為虛擬到物理映射–v2p)可存儲(chǔ)于存儲(chǔ)器控制器的本地易失性存儲(chǔ)器(諸如dram50)中,存儲(chǔ)于閃存設(shè)備28中,或存儲(chǔ)于兩者中。
在本發(fā)明所公開(kāi)的一些實(shí)施方案中,存儲(chǔ)器控制器32使邏輯到物理轉(zhuǎn)換保持在dram50中的轉(zhuǎn)換表中。轉(zhuǎn)換表的大小通常為約數(shù)百兆字節(jié)。存儲(chǔ)器控制器32將轉(zhuǎn)換表保存于存儲(chǔ)器設(shè)備28中,使得在系統(tǒng)引導(dǎo)期間,例如在電源關(guān)閉之后,轉(zhuǎn)換表可被恢復(fù)。
存儲(chǔ)器控制器32,具體地處理器44,可以在硬件中實(shí)現(xiàn)。另選地,存儲(chǔ)器控制器可包括運(yùn)行合適軟件的微處理器,或硬件元件和軟件元件的組合。在一些實(shí)施例中,處理器44包括通用處理器,通用處理器在軟件中被編程以執(zhí)行本文所述的功能。軟件可以例如通過(guò)網(wǎng)絡(luò)以電子形式下載到處理器,或者另選地或除此之外,其可以在有形介質(zhì)諸如磁性、光學(xué)、或電子存儲(chǔ)器上被提供和/或存儲(chǔ)。
圖1的系統(tǒng)配置是純粹為了概念清晰的原因而示出的示例配置。也可以采用任何其他適當(dāng)?shù)拇鎯?chǔ)器系統(tǒng)配置。為了清楚起見(jiàn),已從附圖中省略了對(duì)于理解本發(fā)明的原理非必需的元件,諸如各種接口、尋址電路、計(jì)時(shí)和排序電路及調(diào)試電路。
在圖1中示出的示例性系統(tǒng)配置中,存儲(chǔ)器設(shè)備28和存儲(chǔ)器控制器32作為單獨(dú)的集成電路(ic)來(lái)實(shí)現(xiàn)。然而,在另選的實(shí)施例中,存儲(chǔ)器設(shè)備和存儲(chǔ)器控制器可集成于單個(gè)多芯片封裝(mcp)或片上系統(tǒng)(soc)中的單獨(dú)的半導(dǎo)體模片上,并且可由內(nèi)部總線互連。此外作為另外一種選擇,存儲(chǔ)器控制器電路的一些或全部可位于一個(gè)或多個(gè)存儲(chǔ)器設(shè)備所在的同一模片上。此外另選地,存儲(chǔ)器控制器32的一些或全部功能可在軟件中實(shí)施并由處理器或主機(jī)系統(tǒng)的其他元件或由任何其他類型的存儲(chǔ)器控制器執(zhí)行。在一些實(shí)施方案中,主機(jī)24和存儲(chǔ)器控制器32可在同一模片上制造,或在同一設(shè)備封裝中的單獨(dú)模片上制造。
轉(zhuǎn)換表備份和重建
考慮dram50中由存儲(chǔ)器控制器32管理的邏輯到物理轉(zhuǎn)換表。在典型的具體實(shí)施中,轉(zhuǎn)換表中的條目將邏輯地址范圍映射到相應(yīng)的物理地址范圍。在支持轉(zhuǎn)換表的重建中,例如在于電源關(guān)閉之后的啟動(dòng)期間,存儲(chǔ)器控制器將經(jīng)更新轉(zhuǎn)換信息保存在非易失性存儲(chǔ)設(shè)備28中。
控制器可進(jìn)行優(yōu)雅或非優(yōu)雅備份。在優(yōu)雅備份中,控制器將存儲(chǔ)于dram中的轉(zhuǎn)換表的相同版本保存到非易失性存儲(chǔ)器。在這種情況下,控制器通過(guò)從非易失性存儲(chǔ)器中加載所保存的表來(lái)重建轉(zhuǎn)換表。
在非優(yōu)雅備份中,控制器將轉(zhuǎn)換表的基線版本連同一個(gè)或多個(gè)增量更新保存在非易失性存儲(chǔ)器中,該一個(gè)或多個(gè)增量更新指定由于后續(xù)存儲(chǔ)操作使轉(zhuǎn)換表相對(duì)于基線版本造成的變化。為了重建轉(zhuǎn)換表,控制器將基線版本從非易失性存儲(chǔ)器加載到dram,進(jìn)一步加載所保存的增量更新,并且將增量更新應(yīng)用于基線版本之上。
在本發(fā)明所公開(kāi)的實(shí)施方案中,控制器通過(guò)將表劃分成本文中稱為“體塊”的多個(gè)塊來(lái)保存轉(zhuǎn)換表的基線版本。控制器發(fā)送包括基線版本的體塊用以以所選擇速率存儲(chǔ)于非易失性存儲(chǔ)器中。后續(xù)存儲(chǔ)操作可導(dǎo)致dram中轉(zhuǎn)換表相對(duì)于基線版本變化。此類存儲(chǔ)操作包括用戶操作,諸如寫入或刪除用戶數(shù)據(jù)。還影響轉(zhuǎn)換表內(nèi)容的存儲(chǔ)操作包括對(duì)存儲(chǔ)器設(shè)備28的維護(hù)操作,諸如垃圾收集。
控制器可將給定轉(zhuǎn)換表保存在體塊和增量更新的各種組合中。例如,以較高速率來(lái)保存體塊就使增量更新的數(shù)量減小,反之亦然。然而,頻繁體塊寫入使存儲(chǔ)器設(shè)備28中的寫入放大(wa)效應(yīng)增大,并且使ssd吞吐量減小,這是因?yàn)楸4骟w塊消耗原本將保持對(duì)用戶和維護(hù)存儲(chǔ)操作可用的帶寬。
圖2是示意性地示出了根據(jù)本文所述實(shí)施方案的物理到邏輯轉(zhuǎn)換信息的周期性備份的圖示。在圖2中,白色框表示基線體塊,彩色框表示增量更新。標(biāo)記有“x”的白色框表示可用于用戶存儲(chǔ)操作和維護(hù)操作的周期。
在圖2中,轉(zhuǎn)換表的備份循環(huán)包括存儲(chǔ)表的基線版本,并可能存儲(chǔ)與基線版本一起可用于恢復(fù)轉(zhuǎn)換表的相關(guān)增量更新?;€版本存儲(chǔ)在表示為bi的多個(gè)體塊中。在連續(xù)的體塊之間,控制器可能應(yīng)用用戶存儲(chǔ)操作和維護(hù)操作,并保存由這些操作對(duì)轉(zhuǎn)換表造成的增量更新。如上所述,在給定基線版本的情況下,保存基線體塊的速率確定恢復(fù)所需的增量更新的數(shù)量。
考慮保存包括nb基線體塊和nu增量更新的轉(zhuǎn)換信息。令tb表示單個(gè)體塊從非易失性存儲(chǔ)器到dram的加載時(shí)間,并且tu表示增量更新的加載和重播時(shí)間。總體重建時(shí)間trec由以下公式給出:
公式1:
trec=tb·nb+tu·nu
在典型的具體實(shí)施中,tb和tu分別為約幾毫秒和幾微秒,例如tb=5毫秒,tu=3微秒。在具有512千兆字節(jié)的存儲(chǔ)容量和512兆字節(jié)的dram的一示例性ssd中,轉(zhuǎn)換表的基線版本可需要dram中的400兆字節(jié),即400個(gè)1兆字節(jié)的體塊。如果在本實(shí)施例中,非優(yōu)雅重建的時(shí)間限制在10秒,則增量更新的總數(shù)量nu限制在約260萬(wàn)。
如公式1中可見(jiàn),在給定基線體塊的數(shù)量nb的情況下,增量更新的總數(shù)量nu確定總的恢復(fù)時(shí)間。因此,降低存儲(chǔ)基線體塊的速率使增量更新的數(shù)量nu增大,從而在正常ssd操作期間改善存儲(chǔ)器設(shè)備中的wa并使吞吐量增大。然而,大的nu可使得trec大于表示為ttarget的預(yù)先確定的最大允許值。因此,希望在不超過(guò)ttarget的情況下,使nu最大化。增量更新的最大允許數(shù)量nmax滿足:
公式2:
tb·nb+tu·nmax≤ttarget
圖3是示意性地示出了根據(jù)本文所述實(shí)施方案的根據(jù)先前備份的轉(zhuǎn)換信息重建轉(zhuǎn)換表的圖示。在圖3的實(shí)施例中,控制器加載體塊和與該體塊相關(guān)的增量更新。然后控制器在基線體塊之上重播增量更新,以重建體塊的經(jīng)更新版本。
在另選的實(shí)施方案中,也可使用其他適當(dāng)重建方法。例如,在一個(gè)實(shí)施方案中,控制器首先加載所有基線體塊,然后加載并重播增量更新。在另一個(gè)實(shí)施方案中,控制器加載屬于已加載基線體塊中任一基線體塊的增量更新,并相應(yīng)地重播這些增量更新。在另外的實(shí)施方案中,也可使用加載和重播的任何其他適當(dāng)次序。
自適應(yīng)地控制增量更新的數(shù)量
圖4是示意性地示出了根據(jù)本文所述實(shí)施方案的用于自適應(yīng)地控制增量更新數(shù)量的方法的流程圖。在正常操作期間,該方法可例如由控制器32(例如,利用處理器44)來(lái)執(zhí)行。
該方法始于在備份循環(huán)起始步驟100,控制器32將本地存儲(chǔ)于dram50中的轉(zhuǎn)換表的第一體塊寫入到非易失性存儲(chǔ)器。在預(yù)測(cè)步驟104,控制器通過(guò)計(jì)算以下公式來(lái)評(píng)估可用增量更新的數(shù)量:
公式3:
navailable=(ttarget-nb·tb)/tu
在公式3中,ttarget表示可用于非優(yōu)雅恢復(fù)的總體時(shí)間,nb·tb為nb個(gè)基線體塊的加載時(shí)間,(ttarget-nb·tb)為用于加載和重播增量更新的剩余時(shí)間,并且tu為單個(gè)增量更新的(預(yù)期或平均)加載和重播時(shí)間。需注意,基線體塊的數(shù)量nb取決于轉(zhuǎn)換表的大小,其可在備份循環(huán)期間變化。
在更新備份步驟108,控制器選擇增量更新的數(shù)量m,其中m在0到navailable的范圍內(nèi)。控制器可利用任何適當(dāng)方法來(lái)選擇m。在一示例性實(shí)施方案中,控制器基于存儲(chǔ)工作負(fù)荷來(lái)選擇m,使得較高工作負(fù)荷水平意味著選擇較小數(shù)量m,反之亦然。在一些實(shí)施方案中,控制器基于體塊大小來(lái)選擇m,而不違背所指定的最大引導(dǎo)時(shí)間,同時(shí)也維持主機(jī)工作負(fù)荷性能。例如,對(duì)于給定體塊大小,例如1兆字節(jié),體塊中包含的轉(zhuǎn)換信息所覆蓋的邏輯地址(lba)的范圍衡量針對(duì)該體塊的分片程度。分片程度越高,所覆蓋lba范圍越低。在一個(gè)實(shí)施方案中,控制器基于由體塊所覆蓋的lba范圍和體塊大小之間的比率來(lái)選擇m,該比率用作分片程度的度量。
當(dāng)在步驟108所選擇的數(shù)量m非零的情況下,控制器執(zhí)行用戶和/或維護(hù)存儲(chǔ)操作并相應(yīng)地更新dram50中的轉(zhuǎn)換表。對(duì)于相對(duì)于基線版本改變轉(zhuǎn)換表的每個(gè)操作,控制器將相應(yīng)的增量更新寫入到非易失性存儲(chǔ)器??刂破骼^續(xù)該過(guò)程直到將m個(gè)增量更新發(fā)送到非易失性存儲(chǔ)器。進(jìn)一步地,在步驟108,控制器通過(guò)減去m值來(lái)更新可用增量更新的數(shù)量navailable。
在循環(huán)管理步驟116,控制器檢查最后的基線體塊是否已被寫入到非易失性存儲(chǔ)器,如果是,前進(jìn)至循環(huán)終止步驟120,在該步驟中,在navailable>0的情況下,控制器將數(shù)量為navailable的剩余增量更新寫入到非易失性存儲(chǔ)器。
如果在步驟116,一個(gè)或多個(gè)基線體塊還要被保存,則控制器從基線表中選擇后續(xù)基線體塊,并在體塊寫入步驟120,將所選擇體塊寫入到非易失性存儲(chǔ)器。然后控制器循環(huán)回步驟104以更新可用增量更新的數(shù)量。
在圖4的方法中,控制器已知邏輯到物理映射表的總體大小,或者換句話講,基線體塊的數(shù)量nb。在另一個(gè)實(shí)施方案中,代替利用表大小或除此之外,控制器還基于主機(jī)的寫入活動(dòng)概況(隨機(jī)vs.順序地址訪問(wèn))來(lái)調(diào)整連續(xù)體塊之間增量更新的數(shù)量。
在主機(jī)活動(dòng)大部分為隨機(jī)的情況下,則轉(zhuǎn)換表趨于片段化,從而較大。在主機(jī)活動(dòng)大部分為順序的情況下,則轉(zhuǎn)換表趨于緊湊而較小。因此,在一些實(shí)施方案中,為了遵從最大引導(dǎo)時(shí)間規(guī)格,控制器根據(jù)主機(jī)寫入活動(dòng)概況來(lái)(在正常操作期間)調(diào)整在基線體塊的連續(xù)存儲(chǔ)之間所允許的增量更新的數(shù)量。
在活動(dòng)大部分為隨機(jī)的情況下,表很大,并且在指定引導(dǎo)時(shí)間內(nèi)僅可加載并重播很小數(shù)量的增量更新。在這種情況下,控制器更頻繁地存儲(chǔ)基線體塊并允許更少的增量更新。
在活動(dòng)大部分為順序的情況下,表較小,并且在指定引導(dǎo)時(shí)間內(nèi)可加載并重播較大數(shù)量的增量更新。在這種情況下,控制器不那么頻繁地存儲(chǔ)基線體塊并允許更多增量更新。
另外的變型形式和實(shí)施方案
圖5是示出了根據(jù)本文所述實(shí)施方案在引導(dǎo)時(shí)間期間增量更新的重播時(shí)間的圖。如圖所示,增量更新的重播時(shí)間隨dram中轉(zhuǎn)換表的重建進(jìn)行而增加。這例如可在轉(zhuǎn)換表高度分片的情況下發(fā)生,并且為了減小dram中的表大小,控制器隨著重建進(jìn)行而執(zhí)行一個(gè)或多個(gè)重組操作。
在變型形式的實(shí)施方案中,控制器預(yù)測(cè)在引導(dǎo)期間重建轉(zhuǎn)換表是否需要重組,如果是,則減小在正常操作期間保存于體塊之間的增量更新的數(shù)量??刂破黝A(yù)測(cè)在引導(dǎo)期間、在正常操作期間或在該兩者期間對(duì)重組的需要。在需要強(qiáng)化重組的極端情況下,控制器在正常操作期間僅保存基線體塊而不保存增量更新。
在另一個(gè)變型形式的實(shí)施方案中,控制器可決定重新利用轉(zhuǎn)換表的新近基線版本并在正常操作期間僅保存增量更新。在示例性實(shí)施方案中,如果在新近引導(dǎo)操作期間,增量更新的重播時(shí)間比預(yù)定義期限(例如,100毫秒)短,則控制器保持基線版本,即不保存任何基線體塊,并且僅將增量更新保存在非易失性存儲(chǔ)器中。通過(guò)避免將經(jīng)更新的基線體塊保存到非易失性存儲(chǔ)器設(shè)備中,非易失性存儲(chǔ)器設(shè)備中的wa效應(yīng)顯著改善。
以舉例的方式給出上文公開(kāi)的實(shí)施方案,也可使用其他適當(dāng)?shù)膶?shí)施方案。例如,盡管在所述實(shí)施方案中,我們主要假設(shè)固定的體塊大小,但在另選的實(shí)施方案中,可將轉(zhuǎn)換表的基線版本分成非固定大小的多個(gè)體塊。
應(yīng)當(dāng)理解,上文所描述的實(shí)施方案以實(shí)施例的方式引用,并且以下權(quán)利要求書(shū)不限于上文已特別示出或描述的內(nèi)容。相反地,本發(fā)明的范圍包括上文所描述的各種特征的組合和子組合兩者,以及本領(lǐng)域的技術(shù)人員在閱讀前述描述時(shí)將想到的并且在現(xiàn)有技術(shù)中未公開(kāi)的所述各種特征的變型和修改。在本專利申請(qǐng)中以引用方式并入的文獻(xiàn)被認(rèn)為是本申請(qǐng)不可分割的一部分,但如果任何術(shù)語(yǔ)在這些并入的文獻(xiàn)中被定義成與本說(shuō)明書(shū)中明確地或隱含地作出的定義相沖突,應(yīng)僅考慮本說(shuō)明書(shū)中的定義。