本申請享有以日本專利申請2015-242997號(申請日:2015年12月14日)為基礎申請的優先權。本申請通過參照該基礎申請而包含基礎申請的全部內容。
技術領域
本發明的實施方式涉及一種控制非易失性存儲器的技術。
背景技術:
近年來,具備非易失性存儲器的存儲器系統廣泛地普及。
作為此類存儲器系統之一,眾所周知有基于NAND(Not AND,與非)閃存技術的固態驅動器(SSD,Solid State Drives)。
SSD因其低耗電、高性能等特征,而被用作各種計算機的主存儲器。
但,由主機寫入SSD的數據有時存在數據局部性,即,其部分數據被頻繁重寫,而剩余部分不會被頻繁重寫。
這種數據局部性會增加SSD的寫入放大倍數,有時會影響SSD的性能及壽命。
技術實現要素:
本發明的實施方式提供一種能夠抑制因數據局部性引起的寫入放大倍數增加的存儲器系統及控制方法。
實施方式的存儲器系統具備非易失性存儲器和控制器,所述控制器構成為,電連接于所述非易失性存儲器,執行所述非易失性存儲器的無用存儲單元收集動作。所述控制器管理無用存儲單元收集次數,所述無用存儲單元收集次數表示針對所述多個塊內包含主機寫入的數據的每個塊,通過所述無用存儲單元收集動作而復制該塊內的數據的次數。所述控制器選擇與相同無用存儲單元收集次數關聯的多個第1塊,作為所述無用存儲單元收集動作的對象塊。所述控制器將所述多個第1塊內的有效數據復制到復制目標空閑塊。所述控制器將在所述多個第1塊的無用存儲單元收集次數加上1后的值,設定 為所述復制目標空閑塊的無用存儲單元收集次數。
附圖說明
圖1是說明實施方式的存儲器系統的構成例的框圖。
圖2是所述實施方式的存儲器系統執行的無用存儲單元收集次數管理動作和無用存儲單元收集動作的說明圖。
圖3是所述實施方式的存儲器系統中使用的無用存儲單元收集(GC)次數管理列表的例的說明圖。
圖4是所述實施方式的存儲器系統基于無用存儲單元收集次數管理列表而執行的無用存儲單元收集對象塊選擇動作的說明圖。
圖5是所述實施方式的存儲器系統執行的無用存儲單元收集動作的說明圖。
圖6是寫入所述實施方式的存儲器系統的多種數據的例的說明圖。
圖7是無用存儲單元收集次數和多種數據間的數據量比例的關系的例的說明圖。
圖8是說明所述實施方式的存儲器系統執行的無用存儲單元收集動作的次序的流程圖。
圖9是所述實施方式的存儲器系統執行的包含將具有不同無用存儲單元收集次數的2個塊組的有效數據合并的處理的無用存儲單元收集動作的說明圖。
圖10是說明所述實施方式的存儲器系統執行的包含將具有不同無用存儲單元收集次數的2個塊組的有效數據合并的處理的無用存儲單元收集動作的次序的流程圖。
圖11是只對特定的無用存儲單元收集次數以上的塊組允許合并處理的動作的說明圖。
圖12是說明包含只對特定的無用存儲單元收集次數以上的塊組允許合并處理的動作的無用存儲單元收集動作的次序的流程圖。
圖13是所述實施方式的存儲器系統執行的對主機的數據寫入用依次分配空閑塊的動作的說明圖。
圖14是所述實施方式的存儲器系統使用的塊使用順序管理列表的例的說明圖。
圖15是請求向相同LBA(Logic Block Address,邏輯塊地址)寫入時所述實施方式的存儲器系統執行的累計數據寫入量算出動作的說明圖。
圖16是所述實施方式的存儲器系統執行的累計數據寫入量響應處理的處理序列的說明圖。
圖17是說明所述實施方式的存儲器系統執行的累計數據寫入量響應處理的次序的 流程圖。
圖18是所述實施方式的存儲器系統執行的累計數據寫入量響應處理的其他處理序列的說明圖。
圖19是說明所述實施方式的存儲器系統執行的累計數據寫入量響應處理的其他次序的流程圖。
圖20是所述實施方式的存儲器系統使用的查找表的例的說明圖。
圖21是說明請求向相同LBA寫入時所述實施方式的存儲器系統執行的時間經過響應處理的次序的流程圖。
圖22是說明基于從所述實施方式的存儲器系統接收的累計數據寫入量/時間經過信息而由主機執行的處理的次序的例的流程圖。
圖23是說明主機的構成例的框圖。
圖24是表示包含所述實施方式的存儲器系統和主機的計算機的構成例的圖。
具體實施方式
以下,參照附圖來說明實施方式。
首先,參照圖1來說明包含一實施方式的存儲器系統的信息處理系統1的構成。
該存儲器系統是半導體存儲裝置,構成為向非易失性存儲器寫入數據,并從非易失性存儲器讀取數據。該存儲器系統例如作為基于NAND閃存技術的固態驅動器(SSD)3而實現。
信息處理系統1包含主機(主機裝置)2和SSD3。主機2是比如服務器、個人計算機這樣的信息處理裝置。
SSD3能夠被用作作為主機2發揮功能的信息處理裝置的主存儲器。SSD3可以內置于信息處理裝置,也可以通過纜線或者網絡連接于信息處理裝置。
作為用來將主機2和SSD3相互連接的接口,可使用SCSI(Small Computer System Interface,小型計算機系統接口)、Serial Attached SCSI(SAS,串行連接SCSI)、ATA(Advanced Technology Attachment,高級技術附件)、Serial ATA(SATA)、PCI Express(PCIe)、Ethernet(注冊商標)、Fibre channel(光纖信道)等。
SSD3具備控制器4、非易失性存儲器(NAND存儲器)5、及DRAM(Dynamic Random Access Memory,動態隨機存取存儲器)6。NAND存儲器5并無限定,可以包含多個NAND閃存存儲芯片。
NAND存儲器5包含多個NAND塊(塊)B0~Bm-1。塊B0~Bm-1作為擦除單位發 揮功能。塊也被稱為“物理塊”或者“擦除塊”。
塊B0~Bm-1包含多個頁(物理頁)。即,塊B0~Bm-1的每一個包含頁P0~Pn-1。NAND存儲器5中,數據的讀取及數據的寫入是以頁單位執行。數據的擦除是以塊單位執行。
控制器4經由如Toggle、ONFI之類的NAND接口13,電連接于作為非易失性存儲器的NAND存儲器5。控制器4能作為構成為執行NAND存儲器5的數據管理和NAND存儲器5的塊管理的閃存轉換層(FTL)發揮功能。
數據管理包含(1)表示邏輯塊地址(LBA)和物理地址之間的對應關系的映射信息的管理、(2)用來隱藏頁單位的讀取/寫入和塊單位的擦除動作的處理等。LBA和物理地址之間的映射的管理是使用作為邏輯物理地址轉換表發揮功能的查找表(LUT)33而執行。查找表(LUT)33以規定的管理大小單位管理LBA和物理地址之間的映射。來自主機2的寫入命令大多數是請求4K字節的數據寫入。因此,查找表(LUT)33也可以用例如4K字節單位管理LBA和物理地址之間的映射。對應于某個LBA的物理地址表示寫入該LBA的數據的NAND存儲器5內的物理存儲位置。物理地址包含物理塊地址和物理頁地址。物理頁地址對所有頁分配,且物理塊地址對所有塊分配。
向頁的數據寫入在1個擦除循環中只能進行一次。
因此,控制器4將向相同LBA的寫入(覆寫)映射到NAND存儲器5上的其他頁。即,控制器4向所述其他頁寫入數據。然后,控制器4更新查找表(LUT)33,將該LBA關聯于所述其他頁,并將原來的頁(即曾關聯該LBA的舊數據)無效化。
塊管理包含不良塊的管理、損耗平均、和無用存儲單元收集動作等。損耗平均是用來使各物理塊的編程/擦除次數平準化的動作。
無用存儲單元收集動作是用來作出NAND存儲器5內的空閑空間的動作。該無用存儲單元收集動作為了增加NAND存儲器5的空閑塊的個數,將混雜有效數據和無效數據的若干塊內的所有有效數據復制到其他塊(復制目標空閑塊)。然后,無用存儲單元收集動作更新查找表(LUT)33,將復制的有效數據的LBA分別映射到正確的物理地址。通過將有效數據復制到其他塊,只剩下無效數據的塊作為空閑塊而開放。由此,該塊在擦除后能夠再次利用。
主機2向SSD3送出寫入命令。該寫入命令包含寫入數據(即須寫入的數據)的邏輯地址(起始邏輯地址)和傳輸長度。本實施方式中,是使用LBA作為邏輯地址,在其他實施方式中也可以使用目標ID(identification,標識)作為邏輯地址。LBA是通過向邏輯扇區(邏輯塊)賦予的序列號來表現。序列號從零開始。邏輯扇區的大小為例如512字節。
SSD3的控制器4將由寫入命令內的起始邏輯地址和傳輸長度指定的寫入數據,寫入至NAND存儲器5內的塊的頁。而且,控制器4通過更新查找表(LUT)33,將與寫入數據對應的LBA映射到表示該數據寫入的物理存儲位置的物理地址。
更詳細來說,控制器4將NAND存儲器5內的一個空閑塊分配給主機2的數據寫入用。該分配塊是須寫入主機2的數據的寫入對象塊,也被稱為“寫入目標塊”或者“輸入塊”等。控制器4一邊更新查找表(LUT)33,一邊將從主機2接收的寫入數據依次寫入至寫入對象塊(寫入目標塊)的可用頁。當寫入目標塊無可用頁時,控制器4分配新的空閑塊作為寫入目標塊。
接著,說明控制器4的構成。
控制器4包含主機接口11、CPU(Central Processing Unit,中央處理器)12、NAND接口13、DRAM接口14、SRAM(Static Random Access Memory,靜態隨機存取存儲器)15等。所述CPU12、NAND接口13、DRAM接口14、SRAM15是經由總線10而相互連接。
主機接口11從主機2接收各種命令(寫入命令、讀取命令、取消映射(UNMAP)命令等)。
寫入命令是請求向SSD3寫入由該寫入命令指定的數據。寫入命令包含須寫入的最初的邏輯塊的LBA(起始LBA)、和傳輸長度(邏輯塊數量)。讀取命令是請求從SSD3讀取由該讀取命令指定的數據。讀取命令包含須讀取的最初的邏輯塊的LBA(起始LBA)、和傳輸長度(邏輯塊數量)。
CPU12是以控制主機接口11、NAND接口13、DRAM接口14、SRAM15的方式構成的處理器。CPU12除了執行所述的FTL(Flash Translation Layer,閃存轉換層)的處理外,還執行用來處理主機2的各種命令的命令處理等。
例如,當控制器4從主機2接收到寫入命令時,在CPU12的控制下,控制器4執行以下寫入動作,將由寫入命令指定的寫入數據寫入至NAND存儲器5。
即,控制器4將寫入數據寫入至當前寫入目標塊的物理存儲位置(可用頁),然后更新查找表(LUT)33,對寫入命令所含的LBA(起始LBA)映射該物理存儲位置的物理地址。
所述FTL處理及命令處理可以通過CPU12執行的固件來控制。該固件使CPU12作為無用存儲單元收集(GC)次數管理部21、無用存儲單元收集(GC)動作控制部22、及更新頻率信息響應部23發揮功能。
由主機2寫入SSD3的數據中,有時存在數據局部性,即,其部分數據頻繁被重寫,而剩余部分不會頻繁被重寫。這種情況下,例如通過選擇無效數據量多的上位若干塊作 為GC對象塊的通常的GC算法而執行GC動作時,隨著GC動作多次反復執行,而同一塊內容以混雜更新頻率高的數據和更新頻率低的數據。更新頻率高的數據和更新頻率低的數據混雜成為SSD3的寫入放大倍數增加的主要原因。
原因是,在更新頻率高的數據(Hot(熱)數據)和更新頻率低的數據(Cold(冷)數據)混雜的塊內,因Hot數據的更新而塊內的部分區域快速地無效化,另一方面,該塊內的剩余區域(Cold數據)則長期維持有效狀態。
若塊內寫滿Hot數據,則該塊內的所有數據有很大可能性因為這些數據的更新(重寫)而相對快速地無效化。因此,該塊不用執行無用存儲單元收集動作,只能通過擦除該塊才能再次利用。
另一方面,若塊內寫滿CoId數據,則該塊內的所有數據長期維持有效狀態。因此,該塊由很大可能在很長期間內不會成為無用存儲單元收集動作的對象。
寫入放大倍數(WA)是以如下方式定義。
WA=“寫入SSD的數據的總量”/“從主機寫入SSD的數據的總量”
“寫入SSD的數據的總量”相當于從主機寫入SSD的數據的總量和通過無用存儲單元收集動作等而內部寫入SSD的數據的總量的和。
寫入放大倍數(WA)的增加會引起SSD3內的各個塊的重寫次數(編程/擦除次數)的增加。即,寫入放大倍數(WA)越大,塊的編程/擦除次數便越快地達到其編程/擦除次數的上限值。結果,引起SSD3的耐久性及壽命的劣化。
本實施方式中,為了能夠分離更新頻率高的數據和更新頻率低的數據,而具有“考慮塊內的數據的GC次數的GC功能”、和“基于LBA的更新頻率通知功能”。
無用存儲單元收集(GC)次數管理部21及無用存儲單元收集(GC)動作控制部22執行“考慮塊內的數據的GC次數的GC功能”。“考慮塊內的數據的GC次數的GC功能”執行能夠抑制因數據局部性引起的SSD3的寫入放大倍數增加的改善后的無用存儲單元收集(GC)動作。
無用存儲單元收集(GC)次數管理部21對包含由主機2寫入的數據的每個塊,管理無用存儲單元收集(GC)次數。某個塊的GC次數表示該塊內的數據通過無用存儲單元收集(GC)動作而被復制的次數。即,某個塊的GC次數表示該塊內的數據過去作為有效數據被復制了多少次。
對于剛由主機2寫入數據后的塊、即此數據一次也沒有因GC而收集(復制)的塊,將該塊的GC次數設定為零。
若選擇GC次數為零的若干塊作為GC的對象塊(復制源塊),將這些塊的有效數據 復制到復制目標空閑塊,則GC次數管理部21將該復制目標空閑塊的GC次數設定為1。原因是復制目標空閑塊內的數據是作為有效數據而從GC對象塊(復制源塊)經過1次復制的數據。
通過將有效數據復制到復制目標空閑塊而只剩無效數據的各塊(復制源塊)變成空閑塊。空閑塊不包含數據,因此無須管理該空閑塊的GC次數。
若選擇GC次數為1的若干塊(復制源塊)作為無用存儲單元收集(GC)的對象塊,將這些塊的有效數據復制到復制目標空閑塊,則GC次數管理部21將該復制目標的空閑塊的GC次數設定為2。原因是該復制目標空閑塊內的數據是過去作為有效數據而被復制了2次的數據。
這樣,與某個塊關聯的GC次數的值表示該塊內的數據通過過去的GC動作而被復制了多少次、即過去對該塊內的數據執行了多少次GC動作。
GC動作控制部22執行改良后的GC動作,即,選擇與相同GC次數關聯的若干塊作為無用存儲單元收集(GC)動作的對象塊,只將這些與相同GC次數關聯的塊的有效數據復制到相同復制目標塊。
例如,GC動作控制部22從與相同GC次數關聯的塊組(即具有相同GC次數的塊的集合)中選擇若干塊作為GC用對象塊。GC動作控制部22將被選擇為該GC對象塊的這些塊內的有效數據復制到復制目標空閑塊。然后,由GC次數管理部21,將在被選擇為GC對象塊的這些塊的GC次數加上1后的值,設定為該復制目標空閑塊的GC次數。
“基于LBA的更新頻率通知功能”是如下功能:向主機2通知各個寫入命令所含的向各個LBA的寫入頻率,由此效率良好地輔助主機2分離Hot數據/Cold數據。
“基于LBA的更新頻率通知功能”由更新頻率信息響應部23執行。
更新頻率信息響應部23在從主機2接收到包含LBA的寫入命令時,將與向該LBA的前次寫入至向該LBA的本次寫入為止的時間經過相關的值、或者向該LBA的前次寫入至向該LBA的本次寫入為止的累計數據寫入量,作為對該寫入命令的響應而通知給主機2。由此,能夠向主機2通知用戶數據的實際更新頻率(重寫頻率),因此,主機2能夠將用戶數據分類成更新頻率互不相同的多種數據、例如頻繁更新類型的數據(Hot數據)、低更新頻率類型的數據(Cold數據)、具有Hot數據和CoId數據的中間的更新頻率的類型的數據(Warm(溫)數據)。結果,例如主機2能夠視需要執行用來將這些不同類型的數據分散給不同的SSD的處理等。
接著,說明控制器4內的其他組件。
NAND接口13是構成為在CPU12的控制下控制NAND存儲器5的NAND控制器。
DRAM接口14是構成為在CPU12的控制下控制DRAM6的DRAM控制器。
DRAM6的部分存儲區域可以被用作寫入緩沖器(WB)31,用于臨時存儲須寫入NAND存儲器5的數據。此外,DRAM6的存儲區域也可以被用作GC緩沖器32,用于臨時存儲無用存儲單元收集(GC)動作中被移動的數據。此外,DRAM6的存儲區域也可以用于存儲所述查找表33。
而且,DRAM6的存儲區域還可以被用作GC次數管理列表34、及塊使用順序管理列表35。
GC次數管理列表34是用于針對包含由主機2寫入的數據的每個塊保持GC次數的列表。GC次數管理列表34還可以是表示各塊的塊ID(例如物理塊地址)和這些塊內的數據的GC次數之間的對應關系的表。
或者,GC次數管理列表34還可以由用于按GC次數(例如GC次數=0~GC次數=n)管理各個塊的多個GC次數列表構成。于此,n是須管理的GC次數的上限值。例如,GC次數=0的GC次數列表保持與0次的GC次數關聯的各個塊的塊ID(例如物理塊地址)的列表。GC次數=1的GC次數列表保持與1次的GC次數關聯的各個塊的塊ID(例如物理塊地址)的列表。
塊使用順序管理列表35保持對分配給寫入目標塊用的各個塊賦予的分配編號(序列號)。即,控制器4對分配為寫入對象塊的各個塊賦予表示其分配順序的編號(分配編號)。編號可以是從1開始的序列號。例如,對最先分配給寫入目標塊用的塊賦予分配編號=1,對第二個分配給寫入目標塊用的塊賦予分配編號=2,對第三個分配給寫入目標塊用的塊賦予分配編號=3。由此,能夠管理表示哪個塊以何種順序分配為寫入目標塊的塊使用履歷。作為分配編號,能夠使用每當分配新的空閑塊給寫入目標塊用時遞增的計數器的值。
SSD3還可以保持其他各種管理信息。此類管理信息的例子可以包含保持與各個物理地址對應的有效/無效旗標的頁管理表。各有效/無效旗標表示對應的物理地址(物理頁)有效還是無效。所謂物理頁有效是指此物理頁內的數據為有效數據。所謂物理頁無效是指此物理頁內的數據是因更新(重寫)而無效化的數據。
接著,說明主機2的構成。
主機2是執行各種程序的信息處理裝置。信息處理裝置執行的程序包含應用軟件層41、操作系統(OS)42、文件系統43。
眾所周知,操作系統(OS)42一般來說是軟件,構成為執行以下控制:管理主機2全體,控制主機2內的硬件,讓應用程序能夠使用硬件及SSD3。
文件系統43的作用是執行文件操作(創建、保存、更新、刪除等)用的控制。例如,文件系統43可以使用ZFS(Zettabyte File System,zetta字節文件系統)、Btrfs、XFS、ext4、NTFS(New Technology File System,新技術文件系統)等。或者,文件系統43還可以使用文件目標系統(例如Ceph Object Storage Daemon)、Key Value Store system(例如Rocks DB)。
各種應用軟件線程在應用軟件層41上運行。作為應用軟件線程的例子,由用戶端軟件、數據庫軟件、虛擬機等。
當應用軟件層41需要向SSD3送出比如讀取命令或者寫入命令這樣的請求時,應用軟件層41會向OS42送出其請求。OS42將此請求送出至文件系統43。文件系統43將此請求轉碼成命令(讀取命令、寫入命令等)。文件系統43將命令送出至SSD3。當收到來自SSD3的回應時,文件系統43將此回應送出至OS42。OS42將此回應送出至應用軟件層41。
接著,參照圖2~圖12,詳細說明“考慮塊內的數據的GC次數的GC功能”。
圖2表示SSD3執行的GC次數管理動作和GC動作。
SSD3的控制器4將某個空閑塊分配為主機2的數據(寫入數據)寫入用的塊(寫入目標塊),將從主機2接收的寫入數據依次寫入至該寫入目標塊內的可用頁。當前寫入目標塊的所有頁寫滿數據時,控制器4將當前寫入目標塊管理為活動塊(包含數據的塊)。然后,控制器4分配另一空閑塊作為新的寫入目標塊。這樣,SSD3中,從主機2接收的數據(寫入數據)按照接收順序而依次從當前寫入目標塊的最初頁寫入至最后頁。
圖2的塊B11~B17是主機2剛寫入數據后的塊、即此塊內的數據一次也沒有因無用存儲單元收集(GC)動作而被復制的塊。這些塊B11~B17對應的GC次數為0。
隨著時間經過,塊B11~B17的各個內的數據的一部分因重寫而可能變得無效化。由此,塊B11~B17的各個內有時混雜有效數據和無效數據。
當空閑塊數量低至閾值個數以下時,控制器4開始GC動作,從混雜有效數據和無效數據的若干塊中作出空閑塊。
控制器4首先選擇混雜有效數據和無效數據的若干塊作為GC對象塊。選擇該GC對象塊時,控制器4像所述那樣選擇與相同GC次數關聯的塊組作為GC對象塊。該塊組可以是例如無效數據量最多的塊所屬的塊組、即具有與無效數據量最多的塊的GC次數相同的GC次數的塊的集合。這種情況下,控制器4可以最先從包含主機2寫入的數據的塊選擇無效數據量最多的塊。接著,控制器4可以選擇無效數據量最多的塊、以及與和該無效數據量最多的塊的GC次數相同的GC次數關聯的一個以上的塊,作為無用 存儲單元收集(GC)動作的對象塊。
控制器4將選擇的若干GC對象塊(與相同GC次數關聯的若干塊)內的有效數據復制到復制目標空閑塊,將在這些GC對象塊的GC次數加上1后的值設定為復制目標空閑塊的GC次數。由此,將在GC對象塊的GC次數加上1后的值繼承給復制目標空閑塊,從而能夠用復制目標空閑塊的GC次數準確地表現此復制目標空閑塊內的數據過去因GC動作而被復制了多少次。
例如,若選擇與相同GC次數關聯的2個塊B11、B12作為GC對象塊,并將這些塊B11、B12的有效數據復制到復制目標空閑塊B21,則該復制目標空閑塊B21的GC次數設定為在塊B11、B12的GC次數(這里為0)加上1后的值(這里為1)。
同樣地,若選擇與相同GC次數關聯的3個塊B13、B14、B15作為GC對象塊,并將這些塊B13、B14、B15的有效數據復制到復制目標空閑塊B22,則該復制目標空閑塊B22的GC次數設定為在塊B13、B14、B15的GC次數(這里為0)加上1后的值(這里為1)。
同樣地,若選擇與相同GC次數關聯的2個塊B16、B17作為GC對象塊,并將這些塊B16、B17的有效數據復制到復制目標空閑塊B23,則該復制目標空閑塊B23的GC次數設定為在塊B16、B17的GC次數(這里為0)加上1后的值(這里為1)。
隨著時間經過,塊B21、B22、B23的各個內的數據的一部分有可能因重寫而無效化。由此,塊B21、B22、B23的各個內有時會混雜有效數據和無效數據。
若選擇與相同GC次數關聯的2個塊B21、B22作為GC對象塊,并將這些塊B21、B22的有效數據復制到復制目標空閑塊B31,則該復制目標空閑塊B31的GC次數設定為在塊B21、B22的GC次數(這里為1)加上1后的值(這里為2)。
這樣,在本實施方式中,對每個塊管理的GC次數表示此塊內的數據因過去的GC動作而被復制的次數。為了準確地管理該GC次數,將在GC對象塊的GC次數加上1后的值繼承給復制目標空閑塊內的數據。
圖3表示GC次數管理列表34的例。
當須管理的GC次數的上限值n為例如10時,GC次數管理列表34可以由分別與GC次數=0~GC次數=10對應的11個GC次數列表構成。
GC次數=0的GC次數列表表示與GC次數=0關聯的各個塊的塊ID(例如物理塊地址)的列表。GC次數=1的GC次數列表表示與GC次數=1關聯的各個塊的塊ID(例如物理塊地址)的列表。同樣地,GC次數=10的GC次數列表表示與GC次數=10關聯的各個塊的塊ID(例如物理塊地址)的列表。各GC次數列表并無限定,也可以只包含混 雜有效數據和無效數據的塊。
圖4表示由控制器4執行的GC對象塊選擇動作。
在選擇GC對象塊的處理中,控制器4的無用存儲單元收集動作控制部22首先可以從與不同GC次數分別關聯的多個塊組(多個GC次數列表)中選擇GC對象的塊組。圖4中,例示的情況為,選擇GC次數=5的塊組(塊B2、塊B5、塊B11、塊B21)作為GC對象的塊組,并從該GC次數=5的塊組中選擇若干GC對象塊。
在選擇GC對象塊的處理中,例如可以首先選擇符合規定條件的塊作為最初的GC候補。符合規定條件的塊可以是活動塊(包含主機2寫入的數據的塊)中無效數據量最多的塊。在其他實施方式中,符合規定條件的塊可以是活動塊中最舊的塊。以下,假設情況為選擇無效數據量最多的塊作為最初的GC候補。
若無效數據量最多的塊為塊B5,則控制器4特定出包含塊B5的GC次數列表(這里為GC次數=5的GC次數列表),選擇由該GC次數=5的GC次數列表表示的塊組(塊B2、塊B5、塊B11、塊B21)作為GC對象的塊組,并從該GC對象的塊組中選擇若干GC對象塊。例如,可以從這些塊B2、塊B5、塊B11、塊B21中選擇無效數據量從多到少的上位若干塊作為GC對象塊。這種情況下,例如可以從塊B5、塊B2、塊B11、塊B21中選擇無效數據量最多的上位一個以上的塊作為GC對象塊。
圖5表示控制器4執行的GC動作。
控制器4管理包含所有空閑塊的空閑塊池(空閑塊列表)60。控制器4從這些空閑塊中選擇一個空閑塊。控制器4將選擇的空閑塊分配為復制目標空閑塊B1000。控制器4將所有有效數據從具有相同GC次數的GC對象塊(這里為塊B2、B5、B11)復制到復制目標空閑塊B1000。然后,控制器4更新查找表33,將有效數據的各LBA分別映射至復制目標空閑塊B1000的物理地址。
復制目標空閑塊B1000的GC次數設定為塊B2、B5、B11的GC次數(=5)+1。將塊B1000追加至GC次數=6的GC次數列表。塊B2、B5、B11變成不含有效數據的空閑塊。從GC次數=5的GC次數列表中丟棄變成空閑塊的塊B2、B5、B11。
圖6表示寫入SSD3的多種數據的例。
圖6中,假設情況為向SSD3寫入更新頻率互不相同的3種數據(數據A、數據B、數據C)。SSD3的數據存儲區域(LBA空間)包含與LBA組A、B、C對應的3個空間。
寫入LBA組A的數據A為更新頻率低的數據,且數據A的量在數據A、B、C中最多。即,LBA組A具有最大的LBA范圍。
寫入LBA組C的數據C是更新頻率高的數據,且數據C的量在數據A、B、C中 最少。即,LBA組C具有最小的LBA范圍。
寫入LBA組B的數據B是具有數據A與數據C的中間的更新頻率的數據,且數據B的量處于數據A的量與數據C的量的中間。
數據A的量相對于SSD3的總用戶容量的比例可為例如50%。數據B的量相對于SSD3的總用戶容量的比例可為例如30%。數據C的量相對于SSD3的總用戶容量的比例可為例如20%。
數據A的更新頻率即向LBA組A的寫入的頻率可為例如20%。數據B的更新頻率即向LBA組B的寫入的頻率可為例如30%。數據C的更新頻率即向LBA組C的寫入的頻率可為例如50%。
這種情況下,例如當SSD3寫滿數據A、數據B、數據C后,以2次寫入命令中1次的比例,從主機2向SSD3發布請求向數據C(LBA組C)寫入的寫入命令,且以5次寫入命令中1次的比例,從主機2向SSD3發布請求向數據A(LBA組A)寫入的寫入命令。例如,數據C以2次寫入命令中1次的比例(50%)這樣的高頻率進行更新。
當寫入SSD3的數據具有如圖6那樣的數據局部性時,如圖6下部所示,各寫入目標塊內混雜數據A、數據B、數據C。
一個寫入目標塊內,數據C的量相對于塊容量的比例為50%,數據B的量對于塊容量的比例為30%,數據A的量對于塊容量的比例為20%。
如上所述,數據C的量比數據A、數據B少,且數據C的更新頻率高于數據A、數據B,因此各塊內的數據C大部分有很大概率快速無效化。另一方面,數據A及數據B,尤其是數據A有很大概率長期維持有效狀態。
因數據C的更新(重寫)而無效數據量增加的各個塊均成為GC對象塊,將有效數據從這些塊中復制到復制目標空閑塊。各GC對象塊中,有很大概率是大部分數據C無效化且大部分數據A、數據B維持為有效數據。因此,復制目標塊中,數據A的量和數據B的量相比GC對象塊而增加,相應地數據C的量相比GC對象塊而減少。
本實施方式中,是將相同GC次數的若干塊內的有效數據復制到復制目標空閑塊,因此GC次數少的塊內的有效數據和GC次數多的塊內的有效數據,不會因GC動作而被復制到相同復制目標空閑塊。因此,塊的GC次數越多,越能增加數據A的量相對于此塊的容量的比例,由此能夠將數據A(Cold數據)和數據C(熱數據)分離。
圖7表示GC次數和各塊內的數據A、B、C間的數據量的比例的關系的例。
GC次數=0的各塊中,數據C的量相對于塊的容量的比例為50%,數據B的量相對于塊的容量的比例為30%,數據A的量相對于塊的容量的比例為20%。
數據C的量相對于相對于塊的容量的比例在1~2次的GC動作后迅速降低。隨著GC次數增加,數據B的量相對于塊的容量的比例也逐漸降低。
如上所述,本實施方式中,GC次數少的塊內的有效數據和GC次數多的塊內的有效數據不會被復制到相同復制目標空閑塊,因此包含數據的各個塊能夠分類為:(1)基本上只包含數據A的組(例如GC次數7~10左右);(2)包含數據A和數據B且基本上不含數據C的組(例如GC次數3~6左右);(3)包含數據A、數據B和數據C的組(例如GC次數0~2左右)。
換句話說,本實施方式中,對于相同GC次數的塊,能夠使這些塊所含的數據A、B、C的量的比例相同。
由此,將相同GC次數的若干塊內的有效數據復制到相同復制目標空閑塊的本實施方式的改良后的GC動作,即便在寫入SSD3的數據具有高數據局部性的情況下,也能夠形成基本上只包含數據A的塊的組、包含數據A和數據B且基本上不含數據C的塊的組、包含數據A、數據B和數據C的塊的組,由此能夠逐漸將Hot數據和Cold數據分離。結果,能夠抑制SSD3的寫入放大倍數增加。
圖8的流程圖表示由控制器4執行的GC動作的次序。
控制器4檢查剩余空閑塊數量(步驟S11),并判定剩余空閑塊數量是否為閾值th1以下(步驟S12)。該檢查也可以定期執行。例如,可以在須將新空閑塊分配為寫入目標塊時檢查剩余空閑塊數量。
若剩余空閑塊數量為閾值th1以下(步驟S12的是),控制器4首先從所有活動塊選擇最初的GC候補。最初的GC候補可以是最大無效數據量的塊。這種情況下,從所有活動塊選擇最大無效數據量的塊作為最初的GC候補(步驟S13)。控制器4參照GC次數管理列表34,選擇與和最初的GC候補(這里例如為最大無效數據量的塊)的GC次數相同的GC次數關聯的塊組(第1塊組),然后從該第1塊組中選擇若干GC對象塊(步驟S14)。在步驟S14中,選擇由包含最初的GC候補(例如最大無效數據量的塊)的GC次數列表所示的塊組(第1塊組),然后從第1塊組中選擇若干GC對象塊。這種情況下,也可以選擇最初的GC候補(例如最大無效數據量的塊)、和該GC次數列表所含的其他1個以上的塊作為GC對象塊。
控制器4將這些被選擇的GC對象塊內的所有有效數據復制到復制目標空閑塊(步驟S15)。在步驟S15中,從這些被選擇的GC對象塊內的各個有效頁中讀取有效數據,并將讀取的有效數據分別寫入復制目標空閑塊的各個可用頁。在步驟S15中,控制器4進一步更新查找表(LUT)33,將復制的有效數據的LBA關聯于復制目標空閑塊的物理地址, 并更新頁管理表,使各GC對象塊內的原來的頁(即該LBA關聯的舊數據)無效化。這種情況下,控制器4可以先通過參照查找表(LUT)33,取得存儲復制的有效數據的原來的頁的物理地址,然后更新頁管理表,將與該物理地址對應的有效/無效旗標設定為表示無效的值。
之后,控制器4將這些被選擇的GC對象塊的GC次數+1、即在第1塊組的GC次數加上1后的值,設定為復制目標空閑塊的GC次數(步驟S16)。
圖9表示包含將具有不同GC次數的2個塊組的有效數據合并的處理的GC動作。
例如,當與和最大無效數據量的塊的GC次數相同的GC次數關聯的塊組(GC對象塊組)所含的有效數據的量少于閾值時,控制器4執行將具有不同GC次數的2個塊組的有效數據合并的處理。這種情況下,控制器4也可以選擇具有與GC對象塊組的GC次數盡可能接近的GC次數的另一個塊組。
例如,假設當前最大無效數據量的塊為塊B300,塊B300的GC次數為10的情況。這種情況下,控制器4檢查GC次數=10的GC次數管理列表所含的塊組的總有效數據量。例如,當GC次數=10的GC次數管理列表所含的塊只有塊B300時,或者GC次數=10的GC次數管理列表包含2~3個塊但這些塊內的有效數據量非常少時,控制器4選擇須與GC次數=10的塊組一起執行GC動作的塊組。
這種情況下,控制器4也可以從GC次數比最大無效數據量的塊B300的GC次數少1次以上的所有塊組(這里為GC次數9的塊組、GC次數8的塊組、GC次數7的塊組、…GC次數0的塊組)中,選擇具有最大無用存儲單元收集次數的塊組。
控制器4首先參照GC次數=9的GC次數管理列表,判定是否存在GC次數=9的塊。若不存在GC次數=9的塊,控制器4便參照GC次數=8的GC次數管理列表,判定是否存在GC次數=8的塊。
若不存在GC次數=9的塊,但存在GC次數=8的塊,控制器4便選擇GC次數=8的塊組(例如塊B41、B42、B43)。然后,控制器4將塊B300的有效數據和GC次數=8的塊組的有效數據復制到復制目標空閑塊。這種情況下,并非必須利用塊B41、B42、B43的所有有效數據,只要利用塊B41、B42、B43內的至少一個塊內的有效數據便可。
圖10的流程圖表示包含將具有不同GC次數的2個塊組的有效數據合并的處理的GC動作的次序。
控制器4檢查剩余空閑塊數量(步驟S21),并判定剩余空閑塊數量是否為閾值th1以下(步驟S22)。如上所述,該檢查可以定期執行。
若剩余空閑塊數量為閾值th1以下(步驟S22的是),控制器4先從所有活動塊中選 擇最初的GC候補。最初的GC候補也可以是最大無效數據量的塊。這種情況下,從所有活動塊中選擇最大無效數據量的塊作為最初的GC候補(步驟S23)。控制器4參照GC次數管理列表34,選擇與和最初的GC候補(這里例如為最大無效數據量的塊)的GC次數相同的GC次數關聯的塊組(第1塊組),并判定該塊組(第1塊組)的有效數據的總量是否為閾值th2以下(步驟S24)。
閾值th2的值可以是固定值,也可以是能夠視需要變更的值。閾值th2的值越大則越容易允許所述合并處理的執行。
例如,閾值th2可以預先設定為表示SSD3內的一個塊的容量的值。由此,只有在只對與和最初的GC候補的GC次數相同的GC次數關聯的塊組執行GC動作時,才允許執行合并處理。或者,閾值th2也可以設定成SSD3內的1個塊的容量的整數倍、例如2倍的值。
若該第1塊組的有效數據的總量并非閾值th2以下(步驟S24的否),控制器4便從該第1塊組選擇若干GC對象塊(步驟S25)。在步驟S25中,從由包含最初的GC候補(例如最大無效數據量的塊)的GC次數列表所示的第1塊組中,選擇這些GC對象塊。這種情況下,也可以選擇最初的GC候補(例如最大無效數據量的塊)、和該GC次數列表所含的其他塊作為GC對象塊。
在步驟S25中,控制器4將這些被選擇的GC對象塊內的所有有效數據復制到復制目標空閑塊。在步驟S25中,控制器4進一步更新查找表(LUT)33,將復制的有效數據的LBA關聯于復制目標空閑塊的物理地址,并使各GC對象塊內的原來的頁無效化。
之后,控制器4將這些被選擇的GC對象塊的GC=次數+1、即在第1塊組的GC次數加上1后的值,設定為復制目標空閑塊的GC次數(步驟S26)。
另一方面,若第1塊組的有效數據的總量為閾值th2以下(步驟S24的是),控制器4便從與比該第1塊組的GC次數少1次以上的GC次數關聯的所有塊組中,選擇與最大GC次數關聯的塊組(第2塊組)(步驟S27)。
控制器4將第1塊組的有效數據和第2塊組的有效數據復制到復制目標空閑塊(步驟S28)。在步驟S28中,控制器4進一步更新查找表(LUT)33,將復制的有效數據的LBA關聯于復制目標空閑塊的物理地址,并使各GC對象塊內的原來的頁無效化。
控制器4將第2塊組的GC次數+1設定為復制目標空閑塊的GC次數,或者將第1塊組的GC次數+1設定為復制目標空閑塊的GC次數(步驟S29)。或者,也可以在第2塊組內的GC對象塊數量比第1塊組內的GC對象塊數量多時,將第2塊組的GC次數+1設定為復制目標空閑塊的GC次數,在第1塊組內的GC對象塊數量比第2塊組內 的GC對象塊數量多時,將第1塊組的GC次數+1設定為復制目標空閑塊的GC次數。
圖11表示只對特定的GC次數以上的塊組允許合并處理的動作。
GC次數多的塊內所含的有效數據有很大可能是更新頻率低的數據(數據A)。但,數據A也會以20%的比例被重寫,所以對于GC次數多的塊、例如GC次數=10的塊,有其無效數據量變多的情況。GC次數多的塊內的有效數據是至今為止一次也未被更新(重寫)的數據、即長期維持有效狀態的數據。因此,該有效數據今后也不會被更新的概率高。
另一方面,GC次數少的塊中,有很大可能包含數據B或者數據C。此類塊中,即便不立即執行此塊的GC動作,隨著時管理經過,塊內的所有數據也有可能無效化。
因此,允許合并處理的塊組只有具有合并允許閾值th3以上的GC次數的塊組,由此能夠防止產生無用復制,從而能夠提高GC的效率。
圖11中例示了將合并允許閾值th3設定為GC次數=8的情況。
這種情況下,若與和最初的GC候補的GC次數相同的GC次數關聯的塊組(第1塊組)的GC次數為8以上,則允許第1塊組和其他塊組的合并處理。
例如,允許GC次數=10的塊組和其他塊組的合并處理、及GC次數=9的塊組和其他塊組的合并處理。另一方面,例如禁止GC次數=7的塊組和其他塊組的合并處理。
圖12的流程圖表示包含只對特定的GC次數以上的塊組允許合并處理的動作的GC動作的次序。
該圖12的流程圖所示的GC動作中,除了圖10說明的處理以外,還追加了步驟S30~S33的處理。以下,主要說明步驟S30~S33的處理。
若第1塊組的有效數據的總量為閾值th2以下(步驟S24的是),控制器4的處理進入步驟S30。在步驟S30中,控制器4判定第1塊組的GC次數是否為合并允許閾值th3以上。
若第1塊組的GC次數為合并允許閾值th3以上(步驟S30的是),控制器4執行圖10說明的步驟S27~S29的合并處理。
另一方面,若第1塊組的GC次數(最初的GC候補的塊的GC次數)少于合并允許閾值th3(步驟S30的否),控制器4禁止步驟S27~S29的合并處理的執行,取而代之的執行步驟S31~S33的處理。
在步驟S31中,控制器4選擇與第1塊組不同的其他塊組作為GC對象塊組。例如,控制器4可以選擇最初的GC候補的塊的無效數據量第二多的塊作為新GC候補,并選擇包含該新GC候補的GC次數列表所示的塊組作為GC對象塊組。
接著,控制器4將選擇的GC對象塊組的有效數據復制到復制目標空閑塊(步驟S32), 并將復制目標空閑塊的GC次數設定為在GC對象塊組的GC次數加上1后的值(步驟S33)。
當最初的GC候補的塊關聯于比合并允許閾值th3少的GC次數時,該最初的GC候補的塊很有可能包含頻繁被更新的數據。因此,控制器4可以不對最初的GC候補的塊執行GC,而是等到該塊的有效數據全部無效化為止。
接著,參照圖13~圖22,詳細說明“基于LBA的更新頻率通知功能”。
圖13表示將空閑塊依次分配給主機2的數據寫入用的動作。
控制器4將空閑塊列表60所示的空閑塊之一分配為寫入目標塊62。這種情況下,控制器4更新塊使用順序管理列表35,并將作為寫入目標塊62最先分配的塊的分配編號(序列號)設定為1。如圖14所示,塊使用順序管理列表35保持與各塊地址對應的分配編號(序列號)。這些分配編號表示分配為寫入目標塊62的塊的順序關系。即,控制器4對作為寫入對象塊分配而各個塊賦予表示其分配順序的分配編號,并使用塊使用順序管理列表35管理這些分配編號。
控制器4將從主機2接收的寫入數據寫入到寫入緩沖器31。之后,控制器4一邊更新查找表(LUT)33,一邊將寫入緩沖器31內的寫入數據從寫入目標塊62的起始頁依次寫入到最終頁。
若寫入目標塊62無可用頁,則控制器4將寫入目標塊62移動到活動塊列表61,分配空閑塊列表60的空閑塊作為新的寫入目標塊62。這種情況下,控制器4更新塊使用順序管理列表35,并將作為該新的寫入目標塊62分配的該塊的分配編號(序列號)設定為2。
若活動塊列表61內的所有塊的所有數據均因更新而無效化,將該塊移動到空閑塊列表60。
若空閑塊列表60內的空閑塊數量降低至閾值th1以下,便執行作出空閑塊的所述GC動作。
圖15表示請求向相同LBA寫入時執行的累計數據寫入量算出動作。
控制器4從主機2接收到包含某個LBA的寫入命令時,將向該LBA的前次寫入起的累計數據寫入量,作為對該寫入命令的響應而通知給主機2。累計數據寫入量表示從與接收到的寫入命令的LBA相同的LBA的前次寫入起,到寫入命令的向LBA的本次寫入為止的期間,主機2向NAND存儲器5寫入的數據的總量。
累計數據寫入量例如能夠利用以下值而算出。
(1)各塊的容量
(2)塊內所含的頁數
(3)通過向相同LBA的前次寫入而被寫入數據的NAND存儲器5內的第1物理存儲位置(舊物理地址)
(4)通過本次寫入而須被寫入數據的NAND存儲器5內的第2物理存儲位置(新物理地址)
(5)從包含第1物理存儲位置(舊物理地址)的塊的分配起,到包含第2物理存儲位置(新物理地址)的塊的分配為止的期間,用于主機2的數據寫入而分配的塊數量
(1)~(4)的值是SSD3內的通常的管理信息,并非為了算出累計數據寫入量而專門準備。例如,控制器4通過參照查找表(LUT)33,能夠容易地取得對接收到的寫入命令內的LBA映射的物理地址作為第1物理存儲位置。
(5)的“塊數量”能夠根據例如對包含第1物理存儲位置的塊賦予的分配編號、和對包含第2物理存儲位置的塊賦予的分配編號而容易地算出。
分配編號(序列號)是由圖14的塊使用順序管理列表35管理。這些分配編號(序列號)的管理單位為塊單位,因此用來保持這些分配編號的必要容量可為少量。因此,累計數據寫入量基本上無須使用專門的算出用管理信息,能夠低成本地取得。
圖15中,表示接收到包含LBA10的寫入命令時執行的累計數據寫入量算出動作。
這里,假設情況為通過向LBA10的前次寫入而數據已被寫入到塊B51的頁Px,且通過向LBA10的本次寫入而數據須被寫入到當前寫入目標塊B62的頁Py。可知若塊B51的分配編號為10,塊B51的分配編號為13,在塊51與塊B62之間分配了2個寫入目標塊(例如塊B52、B61)。
累計數據寫入量是通過d1+d2+d2+d3而賦予。
這里,d1表示頁Px后續的塊B51內的頁數、或者與這些頁數對應的容量。d2表示一個塊內的頁數、或者一個塊的容量。d3表示頁Py前的塊B62內的頁數、或者與該頁數對應的容量。
從包含LBA10的前次寫入命令的接收到包含LBA10的本次寫入命令的接收為止的期間,從主機2接收的寫入命令數量越多,則累計數據寫入量越增加。因此,所述累計數據寫入量能夠表現出由LBA10指定的數據的更新頻率、即向LBA10的寫入頻率。
當接收寫入命令時,控制器4也可以按以下次序取得(算出)累計數據寫入量。
首先,控制器4參照查找表(LUT)33,取得對寫入命令所含的LBA(這里為LBA10)映射的舊物理地址(這里為PA1)。然后,控制器4參照塊使用順序管理列表35,取得由舊物理地址指定的塊的分配編號(這里為10)、由新物理地址(這里為PA2)指定的塊的分 配編號(這里為13)。控制器4根據塊內所含的頁數和舊物理地址(PA1)求出d1,并根據塊內所含的頁數和新物理地址(PA2)求出d3。并且,控制器4根據分配編號(13)和分配編號(10)之間的差量,求出由舊物理地址指定的塊的分配起到由新物理地址指定的塊的分配為止的期間,作為寫入目標塊而分配的塊的總數(這里為2)。由此,能夠取得(算出)累計數據寫入量(=d1+d2+d2+d3)。
圖16表示累計數據寫入量響應處理的處理序列。
這里,假設情況為將該處理序列應用于分割寫入命令和寫入數據的NCQ(Native Command Queing,全速命令隊列)系統。
主機2將包含表示某個LBA(=LBAx)的起始LBA的寫入命令送出至SSD3。響應該寫入命令的接收,SSD3的控制器4算出從向LBAx的前次寫入到向LBAx的本次寫入為止的累計數據寫入量(步驟S41),并將包含算出的累計數據寫入量的命令允許響應發送給主機2。命令允許響應是表示對接收的寫入命令的響應(寫入命令的執行允許)的允許響應。通過從SSD3向主機2發送允許響應,而開始由該寫入命令指定的寫入數據的傳送。允許響應可以包含對須允許執行的寫入命令進行識別的值。累計數據寫入量例如可用字節表示,也可以用邏輯塊(邏輯扇區)的數量來表示。
響應命令允許響應的接收,主機2將寫入數據送出至SSD3。SSD3的控制器4將寫入數據寫入到寫入緩沖器31,將寫入緩沖器31的寫入數據寫入到寫入目標塊(步驟S42),并將命令結束的響應(回應)發送給主機2。另外,也可以在將寫入數據寫入到寫入緩沖器31的時點將命令結束的回應發送給主機2。
主機2能夠基于從SSD3接收的命令允許響應所含的累計數據寫入量,把握LBAx的數據的實際更新頻率(向LBAx的寫入頻率)。
若LBAx的數據的實際更新頻率與主機2預期的LBAx的數據的更新頻率不同,例如若LBAx的數據的實際更新頻率高于主機2預期的LBAx的數據的更新頻率,主機2可以視需要向SSD3送出用來終止送出的寫入命令的終止命令。這種情況下,不執行由寫入命令指定的數據的寫入。
圖17的流程圖表示控制器4執行的累計數據寫入量響應處理的次序。
控制器4從主機2接收包含LBAx作為起始LBA的寫入命令(步驟S51)。控制器4基于對LBAx映射的舊物理地址、須對LBAx映射的新物理地址、對包含由舊物理地址指定的物理存儲位置的塊賦予的分配編號、對包含由新物理地址指定的物理存儲位置的塊(當前寫入目標塊)賦予的分配編號等,算出向LBAx的前次寫入到向LBAx的本次寫入為止的累計數據寫入量(步驟S52)。控制器4將包含累計數據寫入量的允許響應返回 給主機2(步驟S53)。
控制器4判定與該寫入命令對應的寫入數據或者用來終止該寫入命令的終止命令的哪一個是從主機2接收的(步驟S54)。
若接收的是寫入數據,控制器4進入步驟S55。在步驟S55中,控制器4將該寫入數據寫入到寫入緩沖器31,將寫入緩沖器31內的寫入數據寫入到當前寫入目標塊,并更新查找表(LUT)33對LBAx映射新物理地址,然后更新頁管理表使舊物理地址(舊數據)無效化。
之后,控制器4將命令結束的回應返回給主機2(步驟S56)。
另外,如上所述,也可以在將寫入數據寫入到寫入緩沖器31的時點將命令結束的回應發送給主機2。
另一方面,若接收的是終止命令,控制器4丟棄該寫入命令(步驟S57)。
圖18表示累計數據寫入量響應處理的其他處理序列。
主機2將包含某個LBA(=LBAx)作為起始LBA的寫入命令送出至SSD3。響應該寫入命令的接收,SSD3的控制器4將命令允許響應發送給主機2。響應命令允許響應的接收,主機2將寫入數據送出至SSD3。寫入數據被寫入到寫入緩沖器31。SSD3的控制器4算出累計數據寫入量(步驟S58)。算出累計數據寫入量的處理也可以響應寫入命令的接收而開始。
之后,控制器4執行向寫入目標塊的寫入數據的寫入(步驟S59),并將包含算出的累計數據寫入量的命令結束的回應發送給主機2。
另外,如上所述,也可以在將寫入數據寫入到寫入緩沖器31的時點,將包含累計數據寫入量的命令結束的回應發送給主機2。
圖19的流程圖表示累計數據寫入量響應處理的其他次序。
控制器4從主機2接收包含LBAx作為起始LBA的寫入命令(步驟S61)。控制器4將允許響應返回給主機2(步驟S62)。控制器4從主機2接收寫入數據(步驟S63)。寫入數據被寫入到寫入緩沖器31。
控制器4基于對LBAx映射的舊物理地址、須對LBAx映射的新物理地址、對包含由舊物理地址指定的物理存儲位置的塊賦予的分配編號、對包含由新物理地址指定的物理存儲位置的塊(當前寫入目標塊)賦予的分配編號等,算出向LBAx的前次寫入到向LBAx的本次寫入為止的累計數據寫入量(步驟S64)。控制器4進入步驟S65。
在步驟S65中,控制器4將寫入緩沖器31內的寫入數據寫入到當前寫入目標塊,更新查找表(LUT)33并對LBAx映射新物理地址,然后更新頁管理表使舊物理地址(舊數 據)無效化。
之后,控制器4將包含累計數據寫入量的命令結束的回應返回給主機2(步驟S66)。
另外,如上所述,也可以在將寫入數據寫入到寫入緩沖器31的時點,將命令結束的回應發送給主機2。
接著,參照圖20~圖23,說明代替通知累計數據寫入量,而將向相同LBA的前次寫入起的時間經過值通知給主機2的處理。
該時間經過值是與向相同LBA的前次寫入起的時間經過相關的信息,時間經過值的例子可以是向相同LBA的前次寫入的時刻,也可以是向相同LBA的前次寫入的時刻和向該相同LBA的本次寫入的時刻之間的時間間隔。
圖20表示以例如4K字節這樣的規定管理單位,管理LBA、物理地址、和前回寫入時刻的對應關系而構成的查找表(LUT)33的例子。
查找表(LUT)33中對應每個LBA而包含物理地址存儲區域33A和時刻存儲區域33B。各時刻存儲區域33B用于保持表示向對應的LBA的寫入發生時刻的值、即表示寫入對應的LBA的數據的時刻的值。各時刻存儲區域33B內保持的時刻例如可以是時分秒。
接收到包含某個LBA的寫入命令時,控制器4將在與該LBA對應的物理地址區域33A登記物理地址,并在與該LBA對應的時刻區域33B登記由寫入命令指定的數據(寫入數據)的寫入時刻。物理地址表示由寫入命令指定的數據被寫入的物理存儲位置的物理地址。寫入時刻可以是接收到寫入命令的時刻,也可以是將由寫入命令指定的數據寫入到寫入緩沖器31的時刻,還可以是將由寫入命令指定的數據寫入到NAND存儲器5的寫入目標塊的時刻。
圖21的流程圖表示控制器4執行的時間經過響應處理的次序。
這里,假設情況為將包含時間經過值的命令允許響應發送給主機2。
控制器4從主機2接收包含LBAx作為起始LBA的寫入命令(步驟S71)。控制器4參照查找表(LUT)33,取得向LBAx的前次寫入的時刻、即通過包含LBAx的前次寫入命令而數據被寫入的時刻(步驟S72)。控制器4將包含表示向LBAx的前次寫入的時刻的時間經過值的允許響應返回給主機2(步驟S73)。如上所述,時間經過值可以是向LBAx的前次寫入的時刻和LBAx的本次寫入的時刻之間的時間間隔、即從當前時刻(向LBAx的本次寫入的時刻)減去向LBAx的前次寫入的時刻后的值。
控制器4判定與該寫入命令對應的寫入數據或者用于終止該寫入命令的終止命令的哪一個是從主機2接收的(步驟S74)。
若接收的是寫入數據,控制器4進入步驟S75。在步驟S75中,控制器4將該寫入數據寫入到寫入緩沖器31,將寫入緩沖器31內的寫入數據寫入到當前寫入目標塊,并更新查找表(LUT)33對LBAx映射新物理地址和新寫入時刻,然后更新頁管理表使舊物理地址(舊數據)無效化。
之后,控制器4將命令結束的回應返回給主機2(步驟S76)。
另外,如上所述,也可以在將寫入數據寫入到寫入緩沖器31的時點,將命令結束的回應發送給主機2。
另一方面,若接收的是終止命令,控制器4丟棄該寫入命令(步驟S77)。
在圖21的流程圖中,說明了將包含時間經過值的命令允許響應發送給主機2的情況,但也可以將包含時間經過值的命令結束的回應發送給主機2。包含時間經過值的命令結束的回應的發送能夠按與圖18、圖19相同的次序執行。
圖22的流程圖表示主機2基于從SSD3通知的累計數據寫入量/時間經過值而執行的處理的次序。
主機2也可以基于從SSD3通知的累計數據寫入量/時間經過值,將數據分類成更新頻率不同的多種數據組。例如,主機2的文件系統43包含數據管理部,該數據管理部將數據分類成多種數據組,將數據分類成頻繁更新的數據組(Hot數據)和不會頻繁更新的數據組(Cold數據)。若寫入SSD3的數據的更新頻率為某個閾值以上,則數據管理部能夠將該數據識別為Hot數據。
數據管理部為了使同一SSD內的各個LBA范圍的更新頻率盡可能一致為相同范圍的頻率,也可以將識別為Hot數據的數據從SSD3移動到其他存儲裝置。
或者,若SSD3以具有高耐久性的昂貴SSD形式實現,也可以將Hot數據保留在SSD3內,將Cold數據從SSD3移動到其他存儲裝置。具有高耐久性的昂貴SSD的例子包含對每個存儲單元存儲1比特信息的SLC(Single-Level Cell,單階存儲單元)-SSD。
表示SSD的耐久性的指標之一為DWPD(Drive Write Per Day,驅動器每日寫入量)。例如,DWPD=10對于具有1T字節的總容量的SSD意味著:能夠連續5年每天執行10T字節(=10×1T字節)的數據寫入。
以下,說明用于前者的處理的次序的例子。
主機2將包含LBAx的寫入命令發送給SSD3(步驟S81),并從SSD3接收包含累計數據寫入量或者時間經過值的響應(允許響應、命令結束回應)(步驟S82)。
主機2基于累計數據寫入量或者時間經過值,判定LBAx的數據的更新頻率(向LBAx的寫入的頻率)是否為規定的上限頻率(閾值th4)以上(步驟S83)。例如,可以在從 SSD3通知累計數據寫入量時,主機2判定累計數據寫入量是否為閾值th4所示的閾值數據量以上。也可以在從SSD3通知時間經過值(向相同LBA的前次寫入的時刻)時,主機2通過從當前時刻減去前次寫入的時刻而算出時間間隔,并判定該時間間隔是否為閾值th4所示的閾值時間間隔以上。或者,主機2還可以將累計數據寫入量或者時間經過值換算成表示多少次寫入訪問中產生1次向LBAx的寫入的比例的比例[百分比],并判定該時間間隔是否為閾值th4所示的閾值時間間隔以上。
若LBAx的數據的更新頻率(向LBAx的寫入的頻率)為閾值th4以上(步驟S83的是),主機2將LBAx的數據分類成高更新頻率數據組(Hot數據)(步驟S84),并將LBAx的數據從SSD3移動到其他存儲裝置(步驟S85)。
在步驟S84中,若包含累計數據寫入量或者時間經過值的回應是對寫入命令的允許響應,則主機2也可以執行終止寫入命令的處理。
圖23表示作為主機2發揮功能的信息處理裝置的硬件構成例。
該信息處理裝置是作為服務器計算機或者個人計算機而實現。該信息處理裝置包含處理器(CPU)101、主存儲器102、BIOS-ROM(Basic Input Output System-Read Only Memory,基本輸入輸出系統-只讀存儲器)103、網絡控制器105、周邊接口控制器106、控制器107、及嵌入式控制器(EC,Embedded Controller)108等。
處理器101是以控制該信息處理裝置的各組件的動作的方式構成的CPU。該處理器101執行從多個SSD3的任一個加載到主存儲器102的各種程序。主存儲器102包括像DRAM這樣的隨機存取存儲器。處理器101執行的程序包含所述應用軟件層41、OS42及文件系統43。
此外,處理器101還執行存儲在作為非易失性存儲器的BIOS-ROM103的基本輸入輸出系統(BIOS)。BIOS是用于控制硬件的系統程序。
網絡控制器105是有線LAN(Local Area Network,局域網絡)控制器、無線LAN控制器之類的通信裝置。周邊接口控制器106以執行與USB(Universal Serial Bus,通用串行總線)裝置這樣的周邊裝置的通信的方式構成。
控制器107以執行與分別連接于多個連接器107A的裝置的通信的方式構成。本實施方式中,多個SSD3分別連接于多個連接器107A。控制器107是SAS expander、PCIe Switch、PCIe expander、閃存陣列控制器、或者RAID(Redundant Arrays of Independent Disks,獨立冗余磁盤陣列)控制器等。
EC108作為構成為執行信息處理裝置的電力管理的系統控制器發揮功能。EC108根據用戶對電源開關的操作而接通或斷開信息處理裝置。EC108是作為單芯片微控制器這 樣的處理電路而實現。EC108也可以內置對鍵盤(KB)等輸入裝置進行控制的鍵盤控制器。
圖22說明的處理是在文件系統43的控制下由處理器101執行。
圖24表示包含多個SSD3和主機2的信息處理裝置的構成例。
該信息處理裝置具備能夠收納在支架上的薄箱形的殼體201。多個SSD3可以配置在殼體201內。這種情況下,各SSD3可拆卸地插入殼體201的前表面201A所設的插槽內。
系統板(主板)202配置在殼體201內。在系統板(主板)202上,安裝著包含CPU101、存儲器102、網絡控制器105、控制器107在內的各種電子零件。這些電子零件作為主機2發揮功能。
如以上說明所示,根據本實施方式的“考慮塊內的數據的GC次數的GC功能”,對包含主機2寫入的數據的每個塊,管理表示該塊內的數據因無用存儲單元收集(GC)動作而被復制的次數的GC次數,且選擇與相同GC次數關聯的多個塊(第1塊)作為無用存儲單元收集(GC)動作的對象塊。然后,將這些第1塊內的有效數據復制到復制目標空閑塊,將在這些第1塊的GC次數加上1后的值設定為復制目標空閑塊的GC次數。因此,能夠防止更新頻率高的數據和更新頻率低的數據因GC動作而一起被復制到同一塊。由此,因塊的GC次數越多則更新頻率低的數據的量相對于塊的容量的比例越增加,因此能夠將更新頻率低的數據與更新頻率高的數據分離。這意味著能夠抑制混雜更新頻率不同的多種數據的塊數量的增加。由此,即便當寫入SSD3的數據具有高數據局部性時,也能夠抑制更新頻率高的數據和更新頻率低的數據混雜的塊數量的增加,從而能夠抑制SSD3的寫入放大倍數的增加。
另外,本實施方式中,作為非易失性存儲器例示了NAND存儲器。但,本實施方式的功能也能夠適用于例如MRAM(Magnetoresistive Random Access Memory,磁阻式隨機存取存儲器)、PRAM(Phase change Random Access Memory,相位變換隨機存取存儲器)、ReRAM(Resistive Random Access Memory,電阻式隨機存取存儲器)、或FeRAM(Ferroelectric Random Access Memory,鐵電隨機存取存儲器)等其他各種非易失性存儲器。
雖對本發明的若干實施方式進行了說明,但這些實施方式是作為例子提示的,并不意圖限定發明的范圍。這些新穎的實施方式能夠以其他各種形態實施,且在不脫離發明主旨的范圍內,能夠進行各種省略、置換、變更。這些實施方式或其變化包含于發明的 范圍及主旨,且包含于申請專利范圍所記載的發明及其均等范圍內。