用于ssd上的寫時復制的系統(tǒng)和方法
【專利摘要】用于SSD上的寫時復制的系統(tǒng)和方法。公開用于SSD中改進的寫時復制功能的技術。在一些實施例中,可將所述技術實現(xiàn)為用于在SSD中提供改進的寫時復制功能的方法,包括在裝置的存儲器中提供間接數(shù)據(jù)結構。間接數(shù)據(jù)結構可包括用于克隆數(shù)據(jù)的主條目以及用于克隆數(shù)據(jù)的克隆條目,主條目具有對一個或多個索引的引用,克隆條目具有以下至少一個:對主索引的引用、對次索引的引用和指示數(shù)據(jù)結構結尾的值。所述技術可包括利用計算機處理器使用一個或多個引用遍歷克隆數(shù)據(jù)的一個或多個副本。
【專利說明】
用于SSD上的寫時復制的系統(tǒng)和方法
技術領域
[0001 ]本發(fā)明涉及在SSD中提供改進的寫時復制功能的系統(tǒng)和方法。
【背景技術】
[0002]高速非易失性存儲器(NVMe)規(guī)范是用于訪問通過高速外圍組件互連(PCIe)總線連接的固態(tài)裝置(SSD)和其他目標裝置的規(guī)范。NVMe SSD PCIe主機接口限定命名空間的概念,命名空間類似于由SAS RAID(獨立磁盤冗余陣列)適配器支持的邏輯卷。SSD中的寫時復制功能可以利用命名空間來實現(xiàn)。命名空間通常被實施為在SSD的間接系統(tǒng)中跟蹤的全局邏輯塊地址(LBA)空間之上的抽象。
[0003]LBA元數(shù)據(jù)僅指示一個主機LBA,并且它不包括引用計數(shù)。在元數(shù)據(jù)中包括或添加引用計數(shù)會引起附加寫入,用新的元數(shù)據(jù)重寫數(shù)據(jù),這是一個差的方案。如果在LBA元數(shù)據(jù)中沒有這種引用計數(shù),就沒有確定附加克隆副本是否存在的機制(如該附加LBA指向相同的數(shù)據(jù))。因此,管理SSD上數(shù)據(jù)的多個克隆副本關于垃圾收集面臨特別挑戰(zhàn)。例如,當主機在復制操作之后修改“源” LBA時,它會產(chǎn)生垃圾收集問題。源副本實際上可以是進行復制操作將數(shù)據(jù)復寫到一個或多個附加主機LBA之前寫入的“主”副本。在修改該主LBA時,無復制察覺垃圾收集算法可以在下一次機會釋放物理數(shù)據(jù),因為不存在有效修改數(shù)據(jù)的元數(shù)據(jù)從而指示更多的主機LBA指向該數(shù)據(jù)的方法。
【發(fā)明內(nèi)容】
[0004]公開用于SSD中改進的寫時復制功能的技術。在一些實施例中,可將所述技術實現(xiàn)為用于在SSD中提供改進的寫時復制功能的方法,包括在PCIe裝置的存儲器中提供間接數(shù)據(jù)結構。間接數(shù)據(jù)結構可包括用于克隆數(shù)據(jù)的原始副本或源副本的主條目以及用于克隆數(shù)據(jù)的克隆條目,主條目具有對主索引的引用以及對次索引的引用,克隆條目具有對主索引的引用以及對次索引的引用。所述技術可包括利用計算機處理器,使用一個或多個引用遍歷克隆數(shù)據(jù)的一個或多個副本。
[0005]根據(jù)本示例性實施例的附加方案,主機裝置可包括以下至少其中一個:企業(yè)服務器、數(shù)據(jù)庫服務器、工作站和計算機。
[0006]根據(jù)本示例性實施例的附加方案,間接數(shù)據(jù)結構可包括多個物理地址。
[0007]根據(jù)本示例性實施例的進一步方案,所述間接數(shù)據(jù)結構可以是環(huán)形鏈表的一部分,其中用于所述克隆數(shù)據(jù)的所述主條目包括對于主索引的引用以及對于次索引的引用。
[0008]根據(jù)本示例性實施例的其他方案,所述間接數(shù)據(jù)結構可以是環(huán)形鏈表的一部分,其中用于所述克隆數(shù)據(jù)的所述克隆條目包括對于所述主索引的引用以及對于所述次索引的引用。
[0009]根據(jù)本示例性實施例的附加方案,所述間接數(shù)據(jù)結構可以是單個結尾的鏈表的一部分,其中,索引中的條目提供該索引是主索引的指示。
[0010]根據(jù)本示例性實施例的進一步方案,所述引用可包括用于邏輯塊尋址的平面間接表中的條目。
[0011]根據(jù)本示例性實施例的其他方案,所述引用可包括用于邏輯塊尋址的樹形數(shù)據(jù)結構中的條目。
[0012]根據(jù)本示例性實施例的附加方案,所述改進的寫時復制功能可包括改進的命名空間復制功能。
[0013]根據(jù)本示例性實施例的進一步方案,所述技術可包括設置用于一個或多個壓縮邏輯塊的指示符,以指示所述一個或多個壓縮邏輯塊被克隆。
[0014]根據(jù)本示例性實施例的其他方案,所述主條目的主索引可指向所述主條目。
[0015]根據(jù)本示例性實施例的附加方案,所述克隆條目的主索引可指向所述主條目。
[0016]根據(jù)本示例性實施例的進一步方案,數(shù)據(jù)結構中最后的克隆條目的次索引可指向所述主條目。
[0017]根據(jù)本示例性實施例的其他方案,所述技術可包括:確定所述克隆數(shù)據(jù)的克隆條目是唯一克隆條目,其中所述確定包括:確定所述克隆條目的次索引與所述克隆條目的主索引匹配;確定所述主條目的次索引指向所述克隆條目;通過將所述克隆條目的所述次索引設置為指示壓縮邏輯塊的間接條目以及將所述主索引條目設置為指示壓縮邏輯塊的間接條目來解克隆所述克隆數(shù)據(jù)的克隆條目;以及通過將所述主條目的所述次索引設置為指示原始主條目的第一壓縮邏輯塊的第一間接條目以及將所述主條目的主索引設置為指示所述原始主條目的第二壓縮邏輯塊的第二間接條目來解克隆所述克隆數(shù)據(jù)的主條目。
[0018]根據(jù)本示例性實施例的附加方案,所述技術可包括:確定所述克隆數(shù)據(jù)的克隆條目是多個克隆條目的其中一個,其中所述確定包括確定以下至少其中一個:所述克隆條目的次索引與所述克隆條目的主索引不匹配;以及所述主條目的次索引不指向所述克隆條目;以及通過將前一條目的次索引設置為指向通過所述克隆條目的次索引指示的條目來解克隆所述克隆數(shù)據(jù)的克隆條目。
[0019]根據(jù)本示例性實施例的進一步方案,所述技術可包括:在垃圾收集處理期間復查條目;確定所述條目包含克隆指示符;以及基于確定所述條目包含所述克隆指示符,確定所述垃圾收集處理中的條目是不要被刪除的有效條目。
[0020]在其他實施例中,可將所述技術實現(xiàn)為一種計算機程序產(chǎn)品,包括在計算機上可執(zhí)行的一系列指令。所述計算機程序產(chǎn)品可進行用于在SSD中提供改進的寫時復制功能的處理。所述計算機程序可實施以下步驟:在裝置的存儲器中提供間接數(shù)據(jù)結構,所述間接數(shù)據(jù)結構包括:用于克隆數(shù)據(jù)的主條目,所述主條目具有對一個或多個索引的引用;用于所述克隆數(shù)據(jù)的克隆條目,所述克隆條目具有以下至少一個:對主索引的引用、對次索引的引用和指示數(shù)據(jù)結構結尾的值;以及利用計算機處理器,使用一個或多個所述引用遍歷克隆數(shù)據(jù)的一個或多個副本。
[0021]在其他實施例中,可將所述技術實現(xiàn)為一種用于在SSD中提供改進的寫時復制功能的系統(tǒng)。所述系統(tǒng)可包括:第一裝置,其中所述第一裝置包括在存儲器中存儲的被存儲指令。所述指令可包括:在所述第一裝置的存儲器中提供間接數(shù)據(jù)結構的指令,所述間接數(shù)據(jù)結構包括:用于克隆數(shù)據(jù)的主條目,所述主條目具有對一個或多個索引的引用;用于所述克隆數(shù)據(jù)的克隆條目,所述克隆條目具有以下至少一個:對主索引的引用、對次索引的引用和指示數(shù)據(jù)結構結尾的值;以及利用計算機處理器,使用一個或多個所述引用遍歷克隆數(shù)據(jù)的一個或多個副本。
[0022]根據(jù)本示例性實施例的附加方案,所述間接數(shù)據(jù)結構可包括多個物理地址。
[0023]根據(jù)本示例性實施例的進一步方案,所述間接數(shù)據(jù)結構可以是環(huán)形鏈表的一部分,其中用于所述克隆數(shù)據(jù)的所述主條目包括對于主索引的引用以及對于次索引的引用。
[0024]根據(jù)本示例性實施例的其他方案,所述間接數(shù)據(jù)結構可以是環(huán)形鏈表的一部分,其中用于所述克隆數(shù)據(jù)的所述克隆條目包括對于所述主索引的引用以及對于所述次索引的引用。
[0025]根據(jù)本示例性實施例的附加方案,所述間接數(shù)據(jù)結構可以是單個結尾的鏈表的一部分,其中,索引中的條目提供該索引是主索引的指示。
[0026]根據(jù)本示例性實施例的進一步方案,所述引用可包括用于邏輯塊尋址的平面間接表中的條目。
[0027]根據(jù)本示例性實施例的其他方案,所述第一裝置可包括高速外圍組件互連(PCIe)
目.ο
[0028]根據(jù)本示例性實施例的附加方案,所述技術可進一步包括將用于一個或多個壓縮邏輯塊的指示符設置為指示所述一個或多個壓縮邏輯塊被克隆的指令。
[0029]根據(jù)本示例性實施例的進一步方案,所述主條目的所述主索引以及所述克隆條目的所述主索引指向所述主條目,且所述數(shù)據(jù)結構中最后的克隆條目的次索引指向所述主條目。
[0030]根據(jù)本示例性實施例的附加方案,目標裝置(例如,PCIe裝置)可包括以下至少其中一個:圖形處理單元、音頻/視頻采集卡、硬盤、主機總線適配器、以及高速非易失性存儲器(NVMe)控制器。根據(jù)某些實施例,目標裝置可以是NVMe兼容裝置。
[0031]下面參照附圖所示的示例性實施例更詳細地描述本公開。雖然下面參照示例性實施例描述了本公開,但是應當理解,本公開并不限于此。得益于本文教導的本領域技術人員應當認識到落入本文所述本公開范圍、并且本公開關于其有顯著效用的附加實施方式、修改、實施例以及其他用途。
【附圖說明】
[0032]為了幫助更完整地理解本公開,下面對附圖進行引用,在附圖中用相似的標記引用相似的元件。這些附圖不應視為限制本公開,而只是要成為示例。其中
[0033]圖1示出示例性方框圖,描述根據(jù)本公開實施例,與主機裝置通信的多個PCIe裝置。
[0034]圖2描述根據(jù)本公開實施例,表示解克隆壓縮邏輯塊的數(shù)據(jù)結構。
[0035]圖3描述根據(jù)本公開實施例,表示主間接數(shù)據(jù)結構條目和克隆間接數(shù)據(jù)結構條目的表格。
[0036]圖4描述根據(jù)本公開實施例,用于SSD中改進的寫時復制功能的示例性模塊。
[0037]圖5描述根據(jù)本公開實施例,示出SSD中改進的寫時復制功能的流程圖。
[0038]圖6A描述根據(jù)本公開實施例,主C組塊數(shù)據(jù)結構條目格式的數(shù)據(jù)結構。
[0039]圖6B描述根據(jù)本公開實施例,克隆C組塊數(shù)據(jù)結構條目格式的數(shù)據(jù)結構。
【具體實施方式】
[0040]本公開涉及改進的寫時復制功能。在一些實施例中,該寫時復制功能可包括命名空間副本。NVMe SSD PCIe主機接口限定命名空間的概念,命名空間類似于由SAS RAID(獨立磁盤冗余陣列)適配器支持的邏輯卷。命名空間可以專用于虛擬機(VM)。在SSD中,命名空間可以在邏輯上相互分離,且能夠可靠地擦除和重新利用,而不會影響其它命名空間。
[0041 ]命名空間標識符可連同該命名空間中的LBA—起,包括在主機發(fā)出的介質(zhì)存取命令中。SSD可以利用數(shù)據(jù)結構(如表查找、樹、哈希映射、位圖等),將命名空間與LBA的組合轉化為SSD內(nèi)部使用的全局LBA。根據(jù)一些實施例,對LBA的引用可以參照該全局LBA。
[0042]本公開的實施例描述用于實現(xiàn)有效“命名空間副本”功能的系統(tǒng)和方法,該功能避免在SSD上復寫數(shù)據(jù)。這樣減少了在SSD中引發(fā)的寫入放大,在提供更高性能的同時延長SSD的壽命。
[0043]命名空間副本是“寫時復制”功能的一種形式。在復制功能中,產(chǎn)生指向介質(zhì)上單個副本的指針。在寫入時產(chǎn)生和更新介質(zhì)上的新副本。命名空間副本功能需要在SSD上“寫時復制”的有效實施方式??蓪⒈竟_的實施例應用于命名空間副本。此外,對于SSD,可將本公開的實施例應用于其他“寫時復制”實施方式。例如,可將“快照”副本用于產(chǎn)生命名空間的時間點圖像,并且可將本實施例的實施方式用于跟蹤快照副本。
[0044]本公開的實施例提供包括指向相同物理位置的多個條目的SSD間接系統(tǒng)(如平面LBA表格)或方法。在多個引用存在時,這種實施方式可以實現(xiàn)有效的垃圾收集。跟蹤多個引用或處理多個指針(例如,指向NAND閃存數(shù)據(jù))可以改進垃圾收集??梢岳冒ㄓ糜跀?shù)據(jù)的主LBA的非易失性存儲裝置(例如,NAND閃存、NOR閃存等等)上的元數(shù)據(jù)來進行垃圾收集。通過在間接數(shù)據(jù)結構(如表、樹、哈希映射、位圖等)中查找這些LBA,以查看數(shù)據(jù)結構是否仍然指向該物理位置,垃圾收集算法可以確定哪個主扇區(qū)仍然有效。如果不是,則算法釋放該塊。
[0045]本文所述一個或多個實施例利用單個標志以及跟蹤一個或多個復寫主LBA的替代間接條目格式,提供復寫間接條目的有效表示。一個或多個實施例可以利用用于跟蹤指向相同物理地址的多個邏輯塊地址的平面間接查找數(shù)據(jù)結構。可以利用哈希映射、樹或者用于跟蹤復寫LBA的基于組分系統(tǒng)來實現(xiàn)其他實施例。
[0046]下面更詳細地討論SSD技術中的改進寫時復制功能。
[0047]下面參照附圖,圖1是描述根據(jù)本公開實施例,與主機裝置通信的PCIe裝置的示例性方框圖??梢栽谥T如主機系統(tǒng)102、主機CPU 104以及PCI專用根復合體(express rootcomplex) 106這樣的一個或多個計算技術中實現(xiàn)寫時復制功能改進。PCI專用切換器108可以經(jīng)由PCI專用根復合體106,把諸如目標110、116和122這樣的多個目標(例如,像基于NVMe的目標這樣的PCIe裝置)通信耦合到主機系統(tǒng)102。
[0048]目標110可包含NVMe控制器112和非易失性存儲裝置114。目標116可包含NVMe控制器118和非易失性存儲裝置120。目標122可包含NVMe控制器124和非易失性存儲裝置126。
[0049]系統(tǒng)存儲器128可包含基于存儲器的資源,主機系統(tǒng)102可經(jīng)由存儲器接口訪問這些資源(例如,雙數(shù)據(jù)速率三同步動態(tài)隨機存取存儲器(DDR3SDRAM))。系統(tǒng)存儲器128可采用任何合適的形式,例如但不限于固態(tài)存儲器(例如,閃存、或固態(tài)裝置(SSD))、光存儲器、以及磁存儲器。系統(tǒng)存儲器128可以是易失性存儲器或者非易失性存儲器。系統(tǒng)存儲器128可包括一個或多個數(shù)據(jù)結構。
[0050]根據(jù)一些實施例,可將除了PCIe之外的接口標準用于一個或多個部分,包括但不限于串行高級技術附件(SATA)、高級技術附件(ATA)、小型計算機系統(tǒng)接口(SCSI)、PCI擴展(PC1-X)、光纖通道、串行連接SCSI(SAS)、安全數(shù)字(SD)、嵌入式多媒體卡(EMMC)和通用閃存(UFS) 0
[0051]主機系統(tǒng)102可采用任何合適的形式,例如但不限于企業(yè)服務器、數(shù)據(jù)庫主機、工作站、個人計算機、移動電話、游戲機、個人數(shù)字助理(PDA)、電子郵件/文本通訊裝置、數(shù)碼相機、數(shù)字媒體(例如,MP3)播放器、GPS導航裝置以及電視系統(tǒng)。
[0052]主機系統(tǒng)102和目標裝置可包括附加組件,為了簡化附圖,在圖1中未示出。此外,在一些實施例中,并非所示的全部組件都出現(xiàn)。例如,可以按照任何合適的方式來實現(xiàn)各種控制器、塊和接口。例如,控制器可采用一個或多個微處理器或處理器和計算機可讀介質(zhì)、邏輯門、切換器、專用集成電路(ASIC)、可編程邏輯控制器以及嵌入式微控制器的形式,計算機可讀介質(zhì)存儲可通過(微)處理器執(zhí)行的計算機可讀程序代碼(例如,軟件或固件)。
[0053]參照圖2,示出根據(jù)本公開實施例,表示解克隆的壓縮邏輯塊的數(shù)據(jù)結構。本實施例中示出8個4千字節(jié)的壓縮邏輯塊。這些解克隆的壓縮邏輯塊(PLB)可將邏輯塊地址(LBA)映射到物理地址。如圖所示,可將LBA 0-7映射到物理地址塊O,將LBA 7_15映射到物理地址塊I,將LBA 16-23映射到物理地址塊2,將LBA 24-31映射到物理地址塊3,將LBA 32-39映射到物理地址塊4,將LBA 40-47映射到物理地址塊5,將LBA 48-55映射到物理地址塊6,將LBA56-63映射到物理地址塊7。
[0054]圖3描述根據(jù)本公開實施例,表示主間接數(shù)據(jù)結構條目和克隆間接數(shù)據(jù)結構條目的表格。如參照圖3所述,在以下實施例中,可以在平面間接系統(tǒng)中實現(xiàn)寫時復制改進。PLB可以是查找數(shù)據(jù)結構(例如,平面間接查找表)中的“壓縮邏輯塊”。可將克隆操作中涉及的8個連續(xù)的8-PLB-對準的PLB的集合稱為“C組塊”。對于一C組塊,其在介質(zhì)上的數(shù)據(jù)用適用于該C組塊(即原始副本)的PLB標記,則該C組塊稱為“主C組塊”??蓪組塊中用于全部PLB的間接數(shù)據(jù)結構條目聚集在一起形成單個“C條目”??蓪?shù)據(jù)駐留在介質(zhì)上的C組塊所對應的C條目稱為主C條目??蓪⒚枋鲎鳛橹鱈BA范圍的副本的LBA范圍的C條目稱為克隆C條目。一個或多個SSD可以限定PLB,以跟蹤4KB的客戶數(shù)據(jù)加元數(shù)據(jù)(例如,8 X 512B扇區(qū))。在以下實施例中,PLB可以只是表格中的一個條目??蓪㈤g接數(shù)據(jù)結構條目擴展(例如,擴展一個比特),以便于寫時復制。額外比特可以是“克隆跟蹤”比特,可將“克隆跟蹤”比特設置為I,以指示或者有其他PLB因此該PLB充當主副本的,或者這是具有作為其主副本的一些其他PLB的克隆。具有克隆跟蹤比特集合的間接數(shù)據(jù)結構條目的其余比特可以包含NAND存儲器地址(例如,就像沒有比特集合的條目那樣),也可以不包含。用于“克隆跟蹤=1”的替代數(shù)據(jù)結構以較之典型PLB條目更粗的粒度被跟蹤,且包括產(chǎn)生克隆條目的鏈表的字段以及指向主條目的指針。利用單個C條目來描述相比于解克隆間接條目更大的LBA組塊(例如,2X),可以獲得用于這些附加字段的空間。這個權衡是合理的,因為克隆數(shù)據(jù)趨向于涉及大的分割或文件集合而非個別主機LBA。
[0055]個別主機LBA的物理地址被分配為使得對于某些LBA要求附加查找。這樣可以為在每個主條目和克隆條目中包括主指針和克隆指針騰出地方。但是用于取得物理地址的DRAM存取的數(shù)量并未顯著增加。如圖3所示,主C條目可包含映射到全部物理地址8-15的LBAJS是只包含與物理地址8-11、14和15的實際映射(可以從克隆C條目獲得與物理地址12、13的映射)。如圖3的克隆C條目所示,可將映射提供給與物理地址8-13相對應的LBA。未在主C條目(物理地址12和13)中映射的兩個物理塊提供用于主索引和次索引的空間。未在克隆C條目(物理地址14和15)中映射的兩個物理塊提供用于主索引和次索引的空間。主C條目中的主索引總是指向自己??寺條目中的主索引總是指向主C條目。主C條目的次索引指向鏈條中的第一克隆C條目。如果有一個以上克隆C條目,則克隆C條目的次索引指向次克隆C條目。如果只有一個克隆C條目或者它是最后一個克隆C條目,則次索引可以指回主C索引(或者,它可以指向指示列表結尾的特殊值,例如空指針)。這樣可以允許主C條目以及一個或多個克隆C條目的遍歷。
[0056]在具有平面間接數(shù)據(jù)結構的實施例中,PLB(物理位置塊)表示在單個查找表中包含物理NAND存儲器地址的個別條目。典型PLB粒度為單個數(shù)據(jù)結構條目貢獻4KB(例如,8*512B扇區(qū))。作為示例,考慮8個PLB的克隆組塊尺寸一一對于克隆范圍的完全隨機單個扇區(qū)存取所要求的DRAM存取的平均數(shù)量是1.25。如果克隆組塊尺寸更大,在更小粒度克隆邊界與“解克隆” PLB組塊所要求的更多NAND存取之間有一個權衡,那么這個數(shù)量可以更低。
[0057]如果主機讀取PLB查找指向克隆條目,則SSD需要(I)物理地址和(2)在寫入數(shù)據(jù)時使用的LBA。在主條目與克隆條目之間分配物理地址,可以選擇性地用重復數(shù)據(jù)填充所有可用的PLB條目,以降低目標LBA要求第二DRAM讀取的可能性。對于#2,可以基于每個克隆條目中的主指針來計算主LBA—一這樣不要求故意的附加DRAM存取,并且可把主指針從原始的PLB查找取到緩存(連同次克隆指示符)。
[0058]在一些實施例中,為了使附加信息適合現(xiàn)有間接數(shù)據(jù)結構,可以只以是PLB尺寸的某些倍數(shù)的粒度來跟蹤克隆。在一些實施例中,為了實現(xiàn)與給定LBA相對應的C組塊的索引的有效計算,可將粒度選擇為PLB尺寸乘以2的冪。作為示例,該乘數(shù)可以是8,但是可以使用更大的克隆粒度。克隆可以涉及一次克隆大范圍的LBA(例如,整個命名空間),因此對于使用更大粒度的懲罰可以最小。
[0059]在一些實施例中,間接數(shù)據(jù)結構可將表示相同數(shù)據(jù)的一個或多個C組塊的環(huán)形鏈表嵌入其中。在其他實施例中,可以使用鏈表的其他形式(例如,單個結尾的鏈表)。在用于該C組塊列表的間接條目中,可將描述C組塊的數(shù)據(jù)的物理地址展開。
[0060]對一C組塊,其數(shù)據(jù)在物理上駐留在介質(zhì)中,用適用于該C組塊(即原始副本W(wǎng)^PLB來標記,可稱為“主C組塊”。當前指代相同數(shù)據(jù)、沒有在介質(zhì)中存儲副本的其他C組塊可稱為“克隆C組塊”。
[0061]可將C組塊中用于全部PLB的間接數(shù)據(jù)結構條目聚集在一起形成單個“C條目”。對于主C組塊,C條目可以采用圖6A所示的格式。如圖所示,主C組塊可包含物理地址0-3(范圍中前面4個物理地址),后面是物理地址6和7。在克隆C條目中可以映射這兩個錯過的物理地址,并且可以使用兩個額外位置(slot)來提供主索引和次索引。如圖所示,可將“克隆跟蹤”指示符設置為I。這樣可以指示應當忽略C條目的垃圾收集處理。
[0062]對于克隆C組塊,C條目可以采用圖6B所示的格式。如圖所示,可以映射物理地址0-5,并且可以錯過物理地址6和7。在主C條目中可以映射錯過的兩個物理地址,并且可以使用兩個額外位置來提供主索引和次索引。如圖所示,可將“克隆跟蹤”指示符設置為I。這樣可以指示應當忽略C條目的垃圾收集處理。
[0063]在一個或多個實施例中,NAND地址i可以是用于主C組塊的第i個PLB的NAND地址(i=0表示第一個PLB)。主索引可以是主C條目的間接數(shù)據(jù)結構索引(因為它消耗8個PLB條目的空間,所以除以8)。次索引可以是用于指向相同數(shù)據(jù)的次克隆C條目的間接數(shù)據(jù)結構索引(因為它消耗8個PLB條目的空間,所以除以8)。如果沒有更多的克隆C條目要表示,那么次索引指回主C條目。在一些實施例中,該次索引可以指向指示列表結束的值(例如,空指針)。
[0064]在一些實施例中,可以利用一個或多個測試來確定C組塊是否為主條目。例如,當且僅當C條目的主索引指向C條目自己時C組塊是主條目。
[0065]主C條目與克隆C條目之間經(jīng)由主索引和次索引的關系可以允許有效地進行一個或多個以下操作。
[0066]為了克隆8個連續(xù)的8-PLB-對準的PLB的集合,可以使用一個或多個方法。例如,在一個或多個實施例中,克隆PLB的集合可包括:
[0067]1.在產(chǎn)生主C條目和克隆C條目時,讀取用于原始副本的PLB的8個NAND地址;
[0068]2.產(chǎn)生主C條目代替8個原始PLB的間接條目。次索引可以指向新的克隆C條目;以及
[0069]3.產(chǎn)生克隆C條目代替現(xiàn)在要充當克隆的8個PLB的間接條目。次索引可以指向新的主C條目。
[0070]為了將C組塊克隆為新的C組塊,可以使用一個或多個方法。例如,在一個或多個實施例中,將C組塊克隆為新的C組塊可包括:
[0071 ] 1.如果源C組塊是主條目,則跟隨源C條目的次索引來找到克隆C條目并將其復制到新C條目的位置。如果源C組塊不是主條目,則將源C條目復制到新C條目的位置。
[0072]2.用主C條目的當前次索引將新C條目的次索引更新;
[0073]3.將主C條目的次索引更新,以指向新的C條目。
[0074]為了在間接條目具有克隆跟蹤比特集合的PLB上讀取查找,可以使用一個或多個方法。例如,在一個或多個實施例中,在具有間接比特集合的PLB上進行讀取查找可包括:
[0075]1.觀看包含該PLB的間接條目的C條目。確定該C條目是不是主C條目?;谠摯_定,進一步確定用于期望的主PLB的NAND地址是否存儲在該C條目中。
[0076]2.如果NAND地址存儲在第一C條目讀取中,就可以返回NAND地址以及主索引。可將主索引用于確定用什么PLB數(shù)來標記數(shù)據(jù),不需要進行任何附加的間接查找。
[0077]3.如果NAND地址不是存儲在第一C條目讀取中并且第一C條目讀取是主C條目,就可以跟隨次索引來找到包含所需NAND地址的克隆C條目。可以返回該NAND地址以及主索引。
[0078]4.如果NAND地址不是存儲在第一C條目讀取中并且是克隆C條目,就可以跟隨主索引來找到包含所需NAND地址的主C條目??梢苑祷卦揘AND地址以及主索引。
[0079]為了“解克隆”克隆C組塊,可以使用一個或多個技術。例如,在一些實施例中,技術可包括:
[0080]1.確定是否只有一個克隆。例如,如果目標的C條目的次索引與其主索引匹配并且主C條目的次索引指向目標C條目,那么只有一個克隆。對于主條目和克隆條目兩者讀取C條目并且通過用于這些PLB的“正?!遍g接條目將主C條目覆寫(overwrite)。
[0081]2.如果目標C條目的次索引與其主索引不匹配或者主C條目的次索引不指向目標C條目,那么還有其他克隆。從其環(huán)形列表中去除該C條目。
[0082]3.在任一情況下,讀取用于主C組塊的數(shù)據(jù)并將其復制為克隆C組塊,用指示新副本的NAND地址的正常間接條目將克隆C條目覆寫。
[0083]為了“解克隆”主C組塊,可以使用一個或多個技術。例如,在一些實施例中,技術可包括:
[0084]1.讀取主C條目和第一克隆C條目;以及
[0085]2.從用于主C組塊的存儲介質(zhì)讀取數(shù)據(jù),并通過將其寫入新的存儲介質(zhì)位置以及將主機LBA元數(shù)據(jù)與對應的克隆C組塊相關聯(lián),將其復制到第一克隆C組塊的PLB;
[0086]3.如果第一克隆是唯一的克隆(S卩,它的次索引指回主條目),那么對于我們剛才產(chǎn)生的副本,用指向NAND地址的正常間接條目將第一克隆C條目覆寫。用指向原始主C組塊的正常間接條目將主C條目覆寫;
[0087]4.如果第一克隆不是唯一克隆,那么從其環(huán)形鏈表中去除主條目。對于我們剛才產(chǎn)生的副本,用新的主C條目將第一克隆C條目覆寫。這樣可以促使舊主C條目的第一克隆C條目變?yōu)橛糜谧约阂约笆S嗟目寺條目的新的主C條目。
[0088]當具有克隆跟蹤比特集合的目標PLB所要求的間接更新,該技術可以在原子量級包括:
[0089]1.解克隆PLB的C組塊;以及
[0090]2.正常進行間接更新。
[0091]可以實施垃圾收集,使得垃圾收集算法對于在間接系統(tǒng)中用克隆跟蹤比特標記其PLB的任何物理數(shù)據(jù)都不丟棄數(shù)據(jù)。也就是說,垃圾收集算法可以考慮用克隆跟蹤比特標記的所有PLB都成為要求重定位而不是擦除的“有效”數(shù)據(jù)。
[0092]在一個或多個實施例中,可將小型計數(shù)bloom過濾器存儲在SRAM中,以跟蹤系統(tǒng)中出現(xiàn)的C組塊。在寫入時,如果bloom過濾器指示沒有PLB成為C組塊一部分的可能性,就可以安全地進行間接系統(tǒng)的更新,不需要首先讀取當前的數(shù)據(jù)結構條目。因為克隆趨向于成為大的序列范圍,所以用于bloom過濾器的哈希函數(shù)大致像:f (C-Entry Index) =C-EntryIndex/Filter Size而不是隨機函數(shù)。
[0093]圖4描述根據(jù)本公開實施例,用于SSD中改進的寫時復制功能的示例性模塊。如圖4所示,寫時復制模塊410可包含間接產(chǎn)生模塊412、間接管理模塊414以及錯誤處理模塊416。
[0094]間接產(chǎn)生模塊412可以產(chǎn)生用于跟蹤寫時復制副本的一個或多個數(shù)據(jù)結構。PLB可以只是表格中的一個條目。可將間接數(shù)據(jù)結構條目擴展(例如,擴展一個比特),以幫助寫時復制。額外比特可以是“克隆跟蹤”比特,可將“克隆跟蹤”比特設置為I,以指示或者有該PLB因此充當主副本的其他PLB,或者這是具有作為其主副本的一些其他PLB的克隆。具有克隆跟蹤比特集合的間接數(shù)據(jù)結構條目的剩余比特可以包含NAND地址(例如,就像沒有比特集的條目那樣),也可以不包含。用于“克隆跟蹤=I”的替代數(shù)據(jù)結構包括產(chǎn)生克隆條目的鏈表的字段以及指向主條目的指針。利用單個條目來描述相比于解克隆間接條目更大的LBA組塊(例如2X),獲得用于這些附加字段的空間。
[0095]間接管理模塊414可以利用間接數(shù)據(jù)結構進行一個或多個操作。間接管理模塊414可以幫助數(shù)據(jù)克隆、讀取克隆數(shù)據(jù)、解克隆數(shù)據(jù)以及利用參照圖3所述的一個或多個方法幫助安全有效的垃圾收集。
[0096]錯誤處理模塊416可以捕獲、記錄、報告和/或處理與管理克隆數(shù)據(jù)相關聯(lián)的一個或多個錯誤。
[0097]圖5描述根據(jù)本公開實施例,示出SSD中改進的寫時復制功能的流程圖。但是處理500只是示例。例如通過增加、改變、去除或重置步驟,可以改變處理500。在步驟502,處理開始。
[0098]在步驟504,可以建立主C條目。對一C組塊,其數(shù)據(jù)物理駐留在介質(zhì)中,用適合該C組塊(即原始副本)的PLB來標記,被稱之為“主C組塊”。當前指代相同數(shù)據(jù)、沒有在介質(zhì)中存儲副本的其他C組塊可稱為“克隆C組塊”。
[0099]可將C組塊中用于全部PLB的間接數(shù)據(jù)結構條目聚集在一起形成單個“C條目”。對于主C組塊,C條目可以采用圖6A所示的格式。
[0100]在步驟506,可以建立克隆C條目。對于克隆C組塊,該C條目可以采用圖6B所示的格式。
[0101]在一個或多個實施例中,NAND地址i可以是用于主C組塊的第i個PLB的NAND地址(i=0表示第一PLB)。
[0102]在步驟508,可以分配指示主索引的塊。主索引可以是主C條目的間接數(shù)據(jù)結構索弓丨(因為它消耗8個PLB條目的空間,所以除以8)。主C條目和克隆C條目兩者的主索引都可以指向主C條目。
[0103]在步驟510,可以分配指示次索引的塊。次索引可以是用于指向相同數(shù)據(jù)的次克隆C條目的間接數(shù)據(jù)結構索引(因為它消耗8個PLB條目的空間,所以除以8)。如果沒有更多的克隆C條目要表示,那么次索引指回主C條目。
[0104]在一些實施例中,可以利用一個或多個測試來確定C組塊是否為主條目。例如,當且僅當C條目的主索引指向C條目自身時,該C組塊可以是主條目。
[0105]在步驟512,方法500結束。
[0106]其它實施例也在本發(fā)明的范圍和精神內(nèi)。例如,可以用軟件、硬件、固件、硬接線或者它們的任意組合來實現(xiàn)上述功能。根據(jù)如上所述的本公開,根據(jù)指令操作的一個或多個計算機處理器可以在SSD中實現(xiàn)與改進寫時復制功能相關聯(lián)的功能。如果是這樣,那么在本公開的范圍內(nèi),可將這些指令存儲在一個或多個非短暫性處理器可讀存儲介質(zhì)上(例如,磁盤或其他存儲介質(zhì))。此外,可將實現(xiàn)功能的模塊在物理上定位在各個位置,包括被分配為使得在不同的物理位置實現(xiàn)功能的不同部分。
[0107]本公開的范圍不限于本文所述具體實施例。實際上,根據(jù)前面的描述和附圖,除了本文所述的實施例之外,本公開的其他各種實施例和修改對于本領域技術人員而言顯而易見。因此,這些其他實施例和修改皆落入本公開范圍之內(nèi)。此外,雖然本文在為了特定目的的特定環(huán)境中的特定實施方式的背景下描述了本公開,但是本領域技術人員應當認識到,其用途不限于此,并且可以在為了任意數(shù)量目的的任意數(shù)量環(huán)境中有利地實現(xiàn)本公開。因此,應當考慮本文所述本公開的全部范圍和精神來解釋下面提出的權利要求。
【主權項】
1.一種用于在SSD中提供改進的寫時復制功能的方法,包括: 在裝置的存儲器中提供間接數(shù)據(jù)結構,該間接數(shù)據(jù)結構包括: 用于克隆數(shù)據(jù)的主條目,所述主條目具有對一個或多個索引的引用; 用于所述克隆數(shù)據(jù)的克隆條目,所述克隆條目具有以下至少一個:對主索引的引用、對次索引的引用和指示數(shù)據(jù)結構結尾的值;以及 利用計算機處理器,使用一個或多個所述引用遍歷所述克隆數(shù)據(jù)的一個或多個副本。2.權利要求1的方法,其中所述間接數(shù)據(jù)結構包括多個物理地址。3.權利要求1的方法,其中所述間接數(shù)據(jù)結構是環(huán)形鏈表的一部分,其中用于克隆數(shù)據(jù)的所述主條目包括對于主索引的引用以及對于次索引的引用。4.權利要求1的方法,其中所述間接數(shù)據(jù)結構是環(huán)形鏈表的一部分,其中用于克隆數(shù)據(jù)的所述克隆條目包括對于所述主索引的引用以及對于所述次索引的引用。5.權利要求1的方法,其中所述間接數(shù)據(jù)結構是單個結尾的鏈表的一部分,其中,索引中的條目提供該索引是主索引的指示。6.權利要求1的方法,其中所述引用包括用于邏輯塊尋址的平面間接表中的條目。7.權利要求1的方法,其中所述引用包括用于邏輯塊尋址的樹形數(shù)據(jù)結構中的條目。8.權利要求1的方法,其中所述改進的寫時復制功能包括改進的命名空間復制功能。9.權利要求1的方法,進一步包括設置用于一個或多個壓縮邏輯塊的指示符,以指示所述一個或多個壓縮邏輯塊被克隆。10.權利要求1的方法,其中所述主條目的主索引指向所述主條目。11.權利要求3的方法,其中所述克隆條目的主索引指向所述主條目。12.權利要求4的方法,其中數(shù)據(jù)結構中最后的克隆條目的次索引指向所述主條目。13.權利要求4的方法,進一步包括: 確定所述克隆數(shù)據(jù)的克隆條目是唯一克隆條目,其中所述確定包括: 確定所述克隆條目的次索引與所述克隆條目的主索引匹配; 確定所述主條目的次索引指向所述克隆條目; 通過把所述克隆條目的次索引設置為指示壓縮邏輯塊的間接條目以及把所述主索引條目設置為指示壓縮邏輯塊的間接條目來解克隆所述克隆數(shù)據(jù)的克隆條目;以及 通過把所述主條目的次索引設置為指示原始主條目的第一壓縮邏輯塊的第一間接條目以及把所述主條目的主索引設置為指示所述原始主條目的第二壓縮邏輯塊的第二間接條目來解克隆所述克隆數(shù)據(jù)的主條目。14.權利要求4的方法,進一步包括: 確定所述克隆數(shù)據(jù)的克隆條目是多個克隆條目之一,其中所述確定包括確定以下至少其中一個: 所述克隆條目的次索引與所述克隆條目的主索引不匹配;以及 所述主條目的次索引不指向所述克隆條目;以及 通過把前一條目的次索引設置為指向由所述克隆條目的次索引指示的條目來解克隆所述克隆數(shù)據(jù)的克隆條目。15.權利要求1的方法,進一步包括: 在垃圾收集處理期間復查條目; 確定所述條目包含克隆指示符;以及 基于確定所述條目包含所述克隆指示符,確定所述垃圾收集處理中的條目是不要被刪除的有效條目。16.—種計算機程序產(chǎn)品,包括在計算機上可執(zhí)行的一系列指令,所述計算機程序產(chǎn)品進行用于在SSD中提供改進的寫時復制功能的處理;所述計算機程序?qū)崿F(xiàn)以下步驟: 在裝置的存儲器中提供間接數(shù)據(jù)結構,所述間接數(shù)據(jù)結構包括: 用于克隆數(shù)據(jù)的主條目,所述主條目具有對一個或多個索引的引用; 用于所述克隆數(shù)據(jù)的克隆條目,所述克隆條目具有以下至少一個:對主索引的引用、對次索引的引用和指示數(shù)據(jù)結構結尾的值;以及 利用計算機處理器,使用一個或多個所述引用遍歷所述克隆數(shù)據(jù)的一個或多個副本。17.—種用于在SSD中提供改進的寫時復制功能的系統(tǒng),所述系統(tǒng)包括: 第一裝置; 其中所述第一裝置包括在存儲器中存儲的被存儲指令,所述指令包括: 在所述第一裝置的存儲器中提供間接數(shù)據(jù)結構的指令,所述間接數(shù)據(jù)結構包括: 用于克隆數(shù)據(jù)的主條目,所述主條目具有對一個或多個索引的引用; 用于所述克隆數(shù)據(jù)的克隆條目,所述克隆條目具有以下至少一個:對主索引的引用、對次索引的引用和指示數(shù)據(jù)結構結尾的值;以及 利用計算機處理器,使用一個或多個所述引用遍歷所述克隆數(shù)據(jù)的一個或多個副本。18.權利要求17的系統(tǒng),其中所述間接數(shù)據(jù)結構包括多個物理地址。19.權利要求17的系統(tǒng),其中所述間接數(shù)據(jù)結構是環(huán)形鏈表的一部分,其中用于所述克隆數(shù)據(jù)的所述主條目包括對于主索引的引用以及對于次索引的引用。20.權利要求17的系統(tǒng),其中所述間接數(shù)據(jù)結構是環(huán)形鏈表的一部分,其中用于所述克隆數(shù)據(jù)的所述克隆條目包括對于所述主索引的引用以及對于所述次索引的引用。21.權利要求17的系統(tǒng),其中所述間接數(shù)據(jù)結構是單個結尾的鏈表的一部分,其中,索引中的條目提供該索引是主索引的指示。22.權利要求17的系統(tǒng),其中所述引用包括用于邏輯塊尋址的平面間接表中的條目。23.權利要求17的系統(tǒng),其中所述第一裝置包括高速外圍組件互連(PCIe)裝置。24.權利要求17的系統(tǒng),進一步包括: 把用于一個或多個壓縮邏輯塊的指示符設置為指示所述一個或多個壓縮邏輯塊被克隆的指令。25.權利要求20的系統(tǒng),其中所述主條目的所述主索引以及所述克隆條目的所述主索引指向所述主條目,且數(shù)據(jù)結構中最后的克隆條目的次索引指向所述主條目。
【文檔編號】G06F12/16GK105912475SQ201610104585
【公開日】2016年8月31日
【申請日】2016年2月25日
【發(fā)明人】迪倫·馬克·德威特, 亞當·邁克爾·埃斯普瑟, 科林·克里斯多夫·麥坎布里奇, 大衛(wèi)·喬治·德賴爾
【申請人】Hgst荷蘭有限公司