欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

主機管理的非易失性存儲器的制作方法

文檔序號:11160834閱讀:415來源:國知局
主機管理的非易失性存儲器的制造方法與工藝

本公開涉及非易失性存儲器,具體地說,涉及固態(tài)驅(qū)動器中的非易失性存儲器。



背景技術(shù):

固態(tài)驅(qū)動器(SSD)是可由計算裝置使用的一種類型非易失性存儲裝置。一些SSD包含用于存儲的基于塊的非易失性存儲器,例如NAND型閃存。在NAND型閃存中,存儲器單元被編組成頁和塊。頁可包含若干字節(jié)(例如4096),塊可包含若干頁(例如128),并且取決于SSD的存儲能力,NAND型閃存SSD可包含若干塊(例如1024)。在NAND閃存中,讀和寫操作是基于頁的。換言之,數(shù)據(jù)頁是可讀/寫的最小量。從而,為了響應于讀或?qū)戄^小的數(shù)據(jù)量的應用請求,讀或?qū)懻?。另外,NAND型閃存要求,在編程之前擦除存儲器單元。此類擦除操作通常在存儲器單元的塊上執(zhí)行。

附圖說明

要求權(quán)利的主題的特征和優(yōu)點根據(jù)與之符合的實施例的如下詳細描述將顯而易見,該描述應該參考附圖考慮,附圖中:

圖1圖示了符合本公開各種實施例的計算系統(tǒng)的功能框圖;

圖2圖示了符合本公開各種實施例的裝置邏輯塊地址(LBA)空間的示例存儲布局;

圖3圖示了符合本公開各種實施例的圖2存儲布局的示例元數(shù)據(jù)布局;

圖4圖示了符合本公開一個實施例的具有分配的索引節(jié)點、數(shù)據(jù)區(qū)間(data extent)和自由空間的示例數(shù)據(jù)部分;

圖5是根據(jù)本公開各種實施例的存儲器存取操作的流程圖;

圖6是根據(jù)本公開各種實施例的寫和丟棄操作的流程圖;

圖7是根據(jù)本公開各種實施例的分配操作的流程圖;

圖8是根據(jù)本公開各種實施例的使自由操作的流程圖;

圖9是根據(jù)本公開各種實施例使用SIMD(單指令多數(shù)據(jù))的查找操作的流程圖;以及

圖10是根據(jù)本公開一個實施例的多個自由列表的操作的流程圖。

盡管如下具體實施方式將繼續(xù)參考說明性實施例,但它們的許多替換、修改和變形對本領(lǐng)域技術(shù)人員將是顯而易見的。

具體實施方式

為了補償基于塊(例如NAND型)的固態(tài)驅(qū)動器(SSD)的特性,寫操作可由主機計算裝置和/或SSD控制器管理,以最大化對于每個寫操作的存儲所寫的數(shù)據(jù)量。例如,要寫的數(shù)據(jù)可被緩沖,直到累積了最小數(shù)據(jù)量(例如頁)為止,然后,數(shù)據(jù)頁可被寫到連續(xù)存儲器位置。在另一示例中,響應于包含用于僅一部分頁的存儲器地址的讀請求,數(shù)據(jù)的整頁例如可被讀到SSD中的高速緩沖存儲器中。寫操作也可配置成促進擦除操作,即,最大化連續(xù)頁的數(shù)量,因為擦除操作是基于塊的。

向具有塊可存取的非易失性存儲器的SSD的寫操作通常利用日志構(gòu)造的存儲技術(shù)。本文所使用的“塊可存取”指的是具有用于存儲器存取的最小大小(例如一頁)的非易失性存儲器。本文所使用的“字節(jié)可存取”指的是可由字和/或字節(jié)存取的非易失性存儲器。“字節(jié)可存取”和“塊可存取”指的是對物理存儲器地址的存取。換言之,對應用顯然的是,已經(jīng)請求了如何存取物理存儲器的讀或?qū)懖僮?。日志?gòu)造的存儲裝置配置成將多個單獨的隨機寫操作組合成單個順序?qū)懀纱酥辽偬峁┮獙懙淖钚?shù)據(jù)量。要寫的數(shù)據(jù)可在主機中的易失性存儲器中緩沖,直到至少已經(jīng)累積了最小量的數(shù)據(jù)為止?!岸巍笨砂辽僖粋€數(shù)據(jù)頁,即,可被寫到SSD的最小量的數(shù)據(jù)。數(shù)據(jù)段然后可被寫到之前擦除的SSD中的存儲器位置的連續(xù)塊。

寫操作進一步配置為寫時拷貝。在寫時拷貝中,“老”數(shù)據(jù)不被改寫,而是,更新的(“新”)數(shù)據(jù)被寫到不同擦除的存儲器位置,并且老數(shù)據(jù)可隨后擦除。寫時拷貝可導致碎片化存儲,因為每次寫是到不同的存儲塊,并且每次寫可包含僅對應于“老”(即之前存儲的)數(shù)據(jù)子集的新數(shù)據(jù)。

從而,日志構(gòu)造的存儲裝置可消耗存儲等待要被寫的數(shù)據(jù)并且計算對自由空間碎片整理的資源的附加主機非易失性存儲器容量。對自由空間碎片整理配置成增加連續(xù)頁的數(shù)量。日志構(gòu)造的存儲裝置可進一步延遲向SSD提交數(shù)據(jù),因為準備要寫的數(shù)據(jù)可被延遲,等待附加數(shù)據(jù)填充頁。

一般而言,此公開涉及用于字節(jié)可存取的裝置管理的NVM存儲裝置的主機管理的NVM(非易失性存儲器)方法(和系統(tǒng))。NVM存儲裝置例如包含固態(tài)驅(qū)動器(SSD)。方法和系統(tǒng)包含主機計算裝置中的間接邏輯,其實現(xiàn)NVM基元,同時避免日志構(gòu)造的存儲及其關(guān)聯(lián)的開銷。NVM基元包含但不限于原子多寫、原子寫、稀疏編址、丟棄、驗證、原子丟棄和原子多丟棄。

原子操作配置成避免存儲器存取操作結(jié)果中的不確定性,如果該存儲器存取操作例如由于功率失敗而中斷的話。換言之,在原子寫中,要被寫的所有指定扇區(qū)都被寫,或者沒有扇區(qū)被寫。扇區(qū)對應于與存儲器存取操作關(guān)聯(lián)的若干數(shù)據(jù)字節(jié)。扇區(qū)可包含任何數(shù)量的數(shù)據(jù)字節(jié)。例如,扇區(qū)可包含512個數(shù)據(jù)字節(jié)。在另一示例中,扇區(qū)可包含少于512的數(shù)據(jù)字節(jié)。在另一示例中,扇區(qū)可包含多于512的數(shù)據(jù)字節(jié)。如果寫被中斷,則之前存儲的數(shù)據(jù)(“老數(shù)據(jù)”)被保持,并且要被存儲的數(shù)據(jù)(“新數(shù)據(jù)”)未被寫。在原子丟棄中,所有扇區(qū)被丟棄,或者沒有扇區(qū)被丟棄。寫時拷貝促進此類原子性,因為老數(shù)據(jù)未被立即改寫。

間接邏輯配置成響應于寫請求而管理向選擇的NVM存儲裝置寫數(shù)據(jù)扇區(qū),而不等待附加扇區(qū)累積。間接邏輯提供配置成將主機邏輯塊地址(LBA)映射到裝置LBA的間接層。邏輯塊編址提供物理存儲介質(zhì)(即物理存儲器)與例如操作系統(tǒng)(OS)之間的抽象。例如,由應用和/或OS使用的主機LBA可被映射到裝置LBA,其然后可與存儲裝置的物理存儲器地址相關(guān)。塊通常包含多個存儲器位置。例如,塊可包含扇區(qū),并且LBA然后可對應于一個扇區(qū)。應用可配置成從一系列主機LBA讀和/或向一系列主機LBA寫。一系列主機LBA可被映射到(即轉(zhuǎn)換成)對應的一系列裝置LBA和/或物理存儲器地址。主機地址空間可大于裝置地址空間。之前未映射的主機LBA可響應于寫請求而動態(tài)映射到裝置LBA。

裝置管理的NVM存儲裝置例如可在驅(qū)動器控制器中包含存儲裝置上的閃存轉(zhuǎn)換層(FTL)。FTL配置成將裝置LBA映射和/或轉(zhuǎn)換成物理存儲器地址。裝置控制器然后可執(zhí)行與將數(shù)據(jù)實際存儲到NVM存儲裝置關(guān)聯(lián)的操作。

裝置地址空間可包含元數(shù)據(jù)、事務日志和數(shù)據(jù)部分。數(shù)據(jù)部分包含自由空間、自由列表、例如配置為搜索樹的索引節(jié)點以及存儲的數(shù)據(jù)。數(shù)據(jù)被存儲在一個或多個數(shù)據(jù)區(qū)間中。本文所使用的“區(qū)間”對應于一個或多個連續(xù)的存儲單元。例如,存儲單元可對應于字節(jié)、扇區(qū)(例如512字節(jié))、頁、塊等。樹結(jié)構(gòu)可包含B樹、B+樹和/或它們的一個或多個變量。例如,B+樹包含根節(jié)點,可包含一個或多個內(nèi)部節(jié)點和一個或多個葉節(jié)點。根節(jié)點包含到內(nèi)部節(jié)點的索引和指針。索引與主機LBA相關(guān)。在一些實施例中,一個或多個索引可對應于主機LBA。內(nèi)部節(jié)點包含到葉節(jié)點的索引和指針。每個葉節(jié)點包含主機LBA、關(guān)聯(lián)的裝置LBA和長度。在一些實施例中,葉節(jié)點可包含多組主機LBA、關(guān)聯(lián)的裝置LBA和長度。每個葉節(jié)點配置成將一系列主機LBA映射到對應的一系列裝置LBA。長度對應于一系列裝置LBA的大小,并且可對應于開始于裝置LBA的數(shù)據(jù)區(qū)間的大小。大小可以存儲單元(例如扇區(qū))為單位。

方法和系統(tǒng)配置成利用相對低等待時間的NVM存儲裝置(例如SSD)的單扇區(qū)原子寫來避免緩沖日志構(gòu)造的存儲裝置,而不降級性能。相對低等待時間的NVM存儲裝置可以是字節(jié)可存取的,從而,存取時間可以不包含與日志構(gòu)造的存儲裝置關(guān)聯(lián)的等待時間。相對低等待時間的NVM技術(shù)具有相對快的存取時間,例如相對低的隨機寫或隨機讀等待時間。例如,用于寫或讀扇區(qū)的相對低的隨機存取等待時間可以在大約10微秒(μs)。在另一示例中,相對低的存儲器存取等待時間可以在大約100μs。寫等待時間可根據(jù)應用的角度確定。換言之,等待時間可包含分別開始于提交對于寫的請求并結(jié)束于關(guān)聯(lián)的數(shù)據(jù)被駐留在NVM存儲裝置上或者已經(jīng)被提供給發(fā)出請求的應用的時間間隔。例如,此類相對低等待時間的字節(jié)可存取的NVM技術(shù)可包含但不限于:磁阻存儲器(MRAM)、相變存儲器(PCM、PRAM)、相變存儲器和開關(guān)(PCMS)、阻性存儲器、鐵電存儲器(F-RAM, FeRAM)、自旋轉(zhuǎn)移轉(zhuǎn)矩存儲器(STT)、熱輔助的開關(guān)存儲器(TAS)、千足蟲存儲器、浮動結(jié)柵存儲器(FJG RAM)、電池備份RAM等。當利用此類字節(jié)可存取的相對低等待時間的NVM技術(shù)時,可避免日志構(gòu)造的存儲裝置及其關(guān)聯(lián)的開銷。可使用復合本公開的方法和系統(tǒng)與較高等待時間的NVM,但隨著等待時間增加,方法和系統(tǒng)的好處可減少,直到日志構(gòu)造的存儲裝置至少一樣快。

在一些實施例中,可使用SIMD(單指令多數(shù)據(jù))操作,實現(xiàn)查找包含在未分類的B樹葉節(jié)點中的地址的方法。例如,在查找地址操作中可利用包含在用于Intel?架構(gòu)處理器的SSE4指令集中的PCMPGTQ(對于大于的比較打包數(shù)據(jù))SIMD指令,如本文所描述的。換言之,可實現(xiàn)并行(例如向量)處理,如本文所描述的。

在一些實施例中,可管理共享地址空間內(nèi)的多個自由列表。共享地址空間內(nèi)的多個自由列表中的一個或多個可被指配給相應處理器、核和/或線程。處理器、核和/或線程然后可配置成從其指配的自由列表中添加和/或移除區(qū)間。從而,可避免與自由列表關(guān)聯(lián)的鎖定競爭。

從而,符合本公開的實現(xiàn)可類似于配置成存儲單個大稀疏文件的簡單文件系統(tǒng)。分配的空間可包含一個或多個數(shù)據(jù)區(qū)間、提供主機地址空間與裝置地址空間之間映射的一個或多個葉節(jié)點以及將索引節(jié)點與葉節(jié)點相關(guān)的樹結(jié)構(gòu)。數(shù)據(jù)區(qū)間對應于將主機LBA范圍連續(xù)映射到裝置LBA范圍。自由裝置LBA可由堆樣式的(heap style)(即,可用的自由存儲器池)自由列表管理。

圖1圖示了符合本公開幾個實施例的計算系統(tǒng)100的系統(tǒng)框圖。計算系統(tǒng)100可包含但不限于:服務器、工作站計算機、臺式計算機、膝上型計算機、平板計算機(例如iPad?、GalaxyTab?等)、超便攜式計算機、超移動計算機、上網(wǎng)本計算機和/或亞筆記本計算機;移動電話,包含但不限于智能電話(例如基于iPhone?、Android?的電話、基于Blackberry?、Symbian?的電話、基于Palm?的電話等)和/或特色電話。

系統(tǒng)100包含主機計算裝置102和NVM存儲裝置(例如SSD 104),并且可包含一個或多個外圍裝置106。主機102包含處理器110、芯片集112和存儲器114。處理器110可包含一個或多個處理單元(例如處理器和/或核),并且配置成執(zhí)行與計算裝置100關(guān)聯(lián)的操作,如本文所描述的。處理器110可配置成執(zhí)行一個或多個線程。芯片集112可包含SSD接口113。芯片集112和/或SSD接口113配置成將處理器110耦合到NVM存儲裝置104和/或外圍裝置106。SSD接口113可配置成使用一個或多個串行總線通信協(xié)議(例如PCIe(外圍組件互連Express)、SAS(串行附連SCSI(小計算機系統(tǒng)接口))、SATA(串行ATA(高級技術(shù)附連))等)與NVM存儲裝置104和/或一個或多個外圍裝置106通信。外圍裝置106例如可包:含用戶接口裝置,包含顯示器、觸摸屏顯示器、打印機、鍵區(qū)、鍵盤等;通信邏輯,有線的和/或無線的;其它存儲裝置,包含硬盤驅(qū)動器、固態(tài)驅(qū)動器、可移動存儲介質(zhì)等。應該指出,為了便于圖示和描述簡化系統(tǒng)100。

存儲器114可包含高速緩存和/或隨機存取存儲器。存儲器114配置成存儲一個或多個應用120、OS 122和應用庫124。存儲器114配置成存儲包含NVM基元142的間接邏輯140。應用120可配置成發(fā)起與NVM存儲裝置104相關(guān)的存儲器存取操作。例如,應用120可包含數(shù)據(jù)庫應用。存儲器存取操作包含讀、寫、丟棄和驗證。應用庫124可包含一個或多個應用編程接口(API)和/或其它應用,它們可由應用120用于促進應用120的操作。

OS 122可包含文件系統(tǒng)130和塊裝置驅(qū)動132。文件系統(tǒng)130配置成管理主機計算裝置102的文件存儲和/或檢索。塊裝置驅(qū)動132配置成管理主機計算裝置102與例如NVM存儲裝置104之間的輸入和輸出(I/O)操作。間接邏輯140和/或NVM基元142可被包含在OS 122、塊裝置驅(qū)動132和/或應用庫124中。在應用庫124中包含間接邏輯140和NVM基元142配置成促進應用120的直接I/O。間接邏輯140配置成接收一個或多個主機LBA以及可能的數(shù)據(jù),將主機LBA映射到裝置LBA,并向使用一個或多個NVM基元142的NVM存儲裝置104提供裝置LBA,如本文所描述的。NVM存儲裝置104然后可將接收的裝置LBA映射到和/或轉(zhuǎn)換成物理存儲器地址,并且如果存儲器存取是寫操作,則存儲關(guān)聯(lián)的數(shù)據(jù)。

間接邏輯140配置成從一個或多個應用120接收存儲器存取請求??山?jīng)由OS 122和/或直接經(jīng)由應用庫124接收請求。存儲器存取請求可包含讀、寫、刪除和/或驗證與一個或多個主機LBA標識的存儲器位置相關(guān)的操作。間接邏輯140配置成分配由裝置LBA標識的一個或多個扇區(qū),并將主機LBA映射到分配的裝置LBA進行寫操作。如果寫操作針對與現(xiàn)有數(shù)據(jù)關(guān)聯(lián)的主機LBA,則寫操作可包含在提交新數(shù)據(jù)之后隨后丟棄現(xiàn)有數(shù)據(jù),如本文所描述的。換言之,寫操作是寫時拷貝。 間接邏輯140進一步配置成丟棄(即返回到自由列表)與刪除的數(shù)據(jù)相關(guān)的裝置LBA。間接邏輯140配置成當執(zhí)行存儲器存取操作時,利用NVM基元142。

NVM基元142包含原子多寫、原子寫、稀疏編址、丟棄、驗證、原子丟棄和原子多丟棄。原子多寫和原子寫基元配置成將一個或多個扇區(qū)從主機LBA空間寫到裝置LBA空間,作為事務。扇區(qū)可以是不連續(xù)的。在原子寫操作中,全部所有數(shù)據(jù)變成被寫,或者沒有任何數(shù)據(jù)變成被寫。從而,如果在操作期間中斷(例如功率損耗)發(fā)生,則現(xiàn)有老數(shù)據(jù)保持有效。在整個事務之前或者之后,從一個或多個相同主機LBA其它同時發(fā)生的讀和/或向其寫。在稀疏編址中,主機LBA空間大于裝置LBA空間,并且至少一些主機LBA可保持不映射。當寫主機LBA時,稀疏編址基元配置成將未映射的主機LBA動態(tài)映射到裝置LBA。丟棄包含從裝置LBA隱式地不映射主機LBA。驗證配置成允許應用確定是映射還是不映射選擇的LBA。原子多丟棄和原子丟棄基元配置成作為丟棄全部所有數(shù)據(jù)或者不丟棄任何數(shù)據(jù)的事務(類似于原子多寫和原子寫基元)執(zhí)行丟棄。

從而,符合本公開的系統(tǒng)和方法配置成提供間接,將主機LBA映射到裝置LBA。與搜索樹相關(guān)的葉節(jié)點配置成包含主機LBA、裝置LBA和關(guān)聯(lián)的長度。下面的實現(xiàn)然后可從應用中抽象,同時允許在裝置驅(qū)動132、OS 122 I/O層和/或應用庫124中的一個或多個中實現(xiàn)間接邏輯140和NVM基元142(例如對于使用直接I/O的應用)。NVM存儲裝置104然后可將裝置LBA轉(zhuǎn)換到物理存儲器地址,并將數(shù)據(jù)存儲到目標物理存儲器地址。

NVM存儲裝置104包含驅(qū)動器控制器150、非易失性物理存儲器152、主機接口156,并且可包含高速緩沖存儲器158。驅(qū)動器控制器150配置成例如經(jīng)由芯片集112、SSD接口113和主機接口156,從間接邏輯140接收裝置LBA以及關(guān)聯(lián)的數(shù)據(jù)(如果有任何的話)。例如,非易失性物理存儲器152可包含相對低等待時間的字節(jié)可存取非易失性存儲器技術(shù),其包含但不限于:磁阻存儲器(MRAM)、相變存儲器(PCM、PRAM)、相變存儲器和開關(guān)(PCMS)、阻性存儲器、鐵電存儲器(F-RAM, FeRAM)、自旋轉(zhuǎn)移轉(zhuǎn)矩存儲器(STT)、熱輔助的開關(guān)存儲器(TAS)、千足蟲存儲器、浮動結(jié)柵存儲器(FJG RAM)、電池備份RAM等,如本文所描述的。驅(qū)動器控制器150包含配置成將裝置LBA轉(zhuǎn)換成物理存儲器地址(PMA)的閃存轉(zhuǎn)換層(FTL) 154。驅(qū)動器控制器150然后可配置成將裝置LBA映射到PMA,并將接收的數(shù)據(jù)存儲到對應于裝置LBA的非易失性物理存儲器152中的PMA。

從而,間接邏輯140可從包含主機LBA的一個或多個應用120接收存儲器存取請求,并且可包含到扇區(qū)關(guān)聯(lián)的數(shù)據(jù)的關(guān)聯(lián)的數(shù)據(jù)(或指針)的一個或多個扇區(qū)。間接邏輯140然后可利用主機LBA作為索引來遍歷B+樹。間接邏輯140可在裝置地址空間中分配對應于數(shù)據(jù)扇區(qū)長度的數(shù)據(jù)區(qū)間,并提供從主機LBA到裝置LBA的映射。該映射可包含在葉節(jié)點中。NVM存儲裝置104可從間接邏輯140接收裝置LBA和關(guān)聯(lián)的數(shù)據(jù),并且然后可將裝置LBA轉(zhuǎn)換成物理存儲器地址,并存儲關(guān)聯(lián)的數(shù)據(jù)??身憫诖鎯ζ鞔嫒≌埱蠖鴮τ谝粋€或多個數(shù)據(jù)扇區(qū)執(zhí)行此類操作,而不等待附加的數(shù)據(jù)扇區(qū)。

圖2圖示了符合本公開各種實施例的裝置LBA空間的示例存儲布局200。裝置LBA空間與NVM存儲裝置104的非易失性物理存儲器152相關(guān)。換言之,驅(qū)動器控制器150可將裝置LBA空間映射到或轉(zhuǎn)換成非易失性物理存儲器152 PMA空間,在其中可發(fā)生實際存儲。裝置LBA空間200包含三個區(qū)域:元數(shù)據(jù)202、事務日志204和數(shù)據(jù)部分206。元數(shù)據(jù)202包含與間接狀態(tài)相關(guān)的固定字段,如本文所描述的。事務日志204配置成包含與分配裝置存儲器(“分配”)和使裝置存儲器自由(“自由”)相關(guān)的記錄。事務日志204配置成存儲與暫時配置成支持原子操作的事務標識符(ID)相關(guān)的一個或多個記錄。數(shù)據(jù)部分206可包含與數(shù)據(jù)區(qū)間和索引節(jié)點相關(guān)的裝置LBA,如本文所描述的。區(qū)間是主機LBA范圍到裝置LBA范圍的連續(xù)映射。數(shù)據(jù)區(qū)間可由樹結(jié)構(gòu)中的主機LBA索引。樹結(jié)構(gòu)可包含B樹、B+樹和/或它們的變量。存儲布局200配置為配置成存儲相對大的稀疏文件的相對簡單的文件系統(tǒng)。修改可作為寫時拷貝執(zhí)行,如本文所描述的。自由裝置LBA即自由區(qū)間可由堆樣式的自由列表管理。

圖3圖示了符合本公開各種實施例的圖2的裝置LBA空間200的示例元數(shù)據(jù)布局300。元數(shù)據(jù)300包含事務日志LBA(開始)302、事務日志大小304、事務日志最后提交LBA 306、事務日志頭LBA 308、索引根節(jié)點LBA 310和自由頭列表LBA 312。事務日志LBA 302配置成包含事務日志的開始裝置LBA。事務日志大小304配置成包含扇區(qū)中的事務日志大小。事務日志最后提交LBA 306配置成包含最近“提交”記錄的事務日志204中的位置,如本文所描述的。事務日志頭LBA 308配置成包含寫到事務日志204的最后條目的位置。索引根節(jié)點LBA 310配置成包含對應于搜索樹根節(jié)點的裝置LBA,如本文所描述的。自由頭列表LBA 312配置成包含對應于自由列表頭的裝置LBA。自由列表與裝置LBA空間中的未分配的裝置LBA相關(guān)。在搜索時,可從自由頭列表LBA 312到達其它自由列表區(qū)間。

間接邏輯140配置成保持和/或更新元數(shù)據(jù)202和事務日志204??申P(guān)于來自應用120的存儲器存取請求,更新元數(shù)據(jù)202和/或事務日志204。存儲器存取請求可包含寫、讀、丟棄和/或驗證對應于一個或多個主機LBA的存儲器單元。當存儲器存取請求導致包含在元數(shù)據(jù)202、300中的參數(shù)的改變時,可更新元數(shù)據(jù)202、300。例如,自由列表頭LBA 312可響應于分配一個或多個裝置LBA的分配和/或使一個或多個裝置LBA自由的丟棄而改變。

可利用事務日志204支持當對存儲的數(shù)據(jù)和/或索引節(jié)點的改變提交時完成的原子操作。事務日志204配置成提供最近的事務的檢查點。事務日志204配置成包含與事務ID相關(guān)的一個或多個記錄。如果存儲器存取操作中斷,則在存儲器存取操作之前,可利用記錄返回到一個狀態(tài)。間接邏輯140配置成在存儲器存取操作期間和/或之后,從事務日志204添加、更新和/或刪除記錄。響應于存儲器存取請求,間接邏輯140可生成與存儲器存取關(guān)聯(lián)的唯一事務標識符(ID)。事務日志204包含與每個事務ID關(guān)聯(lián)的一個或多個記錄。每個記錄包含日志條目類型和一個或多個關(guān)聯(lián)的參數(shù)。事務日志204條目類型包含“分配”、“自由意圖(free intent)”、“提交”和“自由”。

分配指示已經(jīng)從自由列表中移除區(qū)間。與分配關(guān)聯(lián)的參數(shù)包含開始LBA、分配長度、新自由列表LBA。開始LBA標識正在分配的區(qū)間的開始裝置LBA。分配長度對應于分配的區(qū)間中的扇區(qū)數(shù)。在已經(jīng)分配了區(qū)間之后,新自由列表頭LBA對應于新自由列表頭裝置LBA。換言之,已經(jīng)用分配移除現(xiàn)有頭。

自由意圖指示,區(qū)間應該被返回到自由列表。自由意圖參數(shù)包含自由意圖LBA和自由意圖長度。自由意圖LBA對應于(即標識)應該被返回到自由列表的區(qū)間的裝置LBA。自由意圖長度對應于應該使自由的區(qū)間中的扇區(qū)數(shù)。例如,可響應于丟棄而使區(qū)間自由。在另一示例中,可在寫時使區(qū)間自由。在此示例中,由于寫操作是對應于老數(shù)據(jù)的寫時拷貝裝置LBA,如果可使任何自由的話(如果寫成功完成的話)。提交指示事務完成。提交參數(shù)包含根節(jié)點LBA。如果根節(jié)點已經(jīng)作為與事務ID關(guān)聯(lián)的存儲器存取操作的結(jié)果改變,則根節(jié)點LBA配置成提供搜索樹的新根的新裝置LBA。自由指示,區(qū)間應該被返回到自由列表。自由參數(shù)包含自由LBA和自由長度。自由LBA對應于返回到自由列表的區(qū)間的裝置LBA,并且自由長度對應于返回到自由列表的區(qū)間的扇區(qū)中的長度。

例如,在對裝置LBA(或一系列LBA)的寫操作期間,一個或多個扇區(qū)可被分配用于存儲與寫操作關(guān)聯(lián)的數(shù)據(jù)。唯一事務ID可與寫操作關(guān)聯(lián),并被包含在事務日志204中。事務日志204中的關(guān)聯(lián)記錄然后可包含條目類型分配以及關(guān)聯(lián)的分配參數(shù)。在已經(jīng)分配了與裝置操作關(guān)聯(lián)的區(qū)間之后,新自由列表頭LBA然后可對應于所得到的裝置LBA。分配裝置LBA參數(shù)然后可對應于分配的區(qū)間的開始裝置LBA,并且長度對應于扇區(qū)中的區(qū)間長度。間接邏輯140可配置成更新事務日志中的參數(shù)。

如果寫操作包含之前所寫的裝置LBA(老數(shù)據(jù)),則間接邏輯140還可創(chuàng)建和與老數(shù)據(jù)關(guān)聯(lián)的裝置LBA相關(guān)的自由意圖記錄。如果寫操作被中斷并且未完成,則間接邏輯140配置成至少部分基于事務日志204“滾回”到老數(shù)據(jù)。如果在完成之后但在自由的區(qū)間或節(jié)點已經(jīng)返回到自由列表之前寫操作中斷,則間接邏輯140配置成至少部分基于事務日志204“前滾”,并且重新開始將自由的區(qū)間和節(jié)點返回到自由列表。對應于事務ID的事務204的部分可在存儲器存取操作期間存在,并且可在與事務ID關(guān)聯(lián)的操作已經(jīng)成功完成之后取消分配。換言之,事務日志的元素可以是暫時的。

數(shù)據(jù)部分206包含分配的區(qū)間和/或葉節(jié)點、索引節(jié)點的區(qū)域和自由列表。索引節(jié)點包含根節(jié)點和內(nèi)部節(jié)點,并且可包含多個葉節(jié)點。最初,數(shù)據(jù)部分206可對應于單個大自由列表條目。換言之,最初,數(shù)據(jù)部分206可以不包含索引節(jié)點和分配的區(qū)間。在操作中,可分配和/或更新索引節(jié)點,并且可分配一個或多個葉節(jié)點和/或數(shù)據(jù)區(qū)間。可響應于對連續(xù)的一系列“新”主機LBA的寫請求而分配葉節(jié)點以及關(guān)聯(lián)的數(shù)據(jù)區(qū)間??捎门c葉節(jié)點的大小加上數(shù)據(jù)區(qū)間的大小對應的大小,分配自由區(qū)間??身憫谂c主機LBA關(guān)聯(lián)的更新請求而更新葉節(jié)點,分配新數(shù)據(jù)區(qū)間,并將老區(qū)間標記為“自由意圖”。如果存儲器存取操作成功完成,則然后可使老數(shù)據(jù)區(qū)間自由??身憫趤G棄(即刪除)請求而使葉節(jié)點和新數(shù)據(jù)區(qū)間自由。

最初,數(shù)據(jù)部分206可包含一個自由列表條目。每個自由列表條目包含相應第一扇區(qū)中的長度參數(shù)和參數(shù)下一裝置LBA。長度參數(shù)對應于關(guān)聯(lián)的自由列表部分(“項目”)中的扇區(qū)數(shù)。參數(shù)下一LBA對應于自由列表中下一項目的裝置LBA。從而,初始自由列表條目可包含鄰近(在裝置LBA空間中)事務日志204的最后裝置LBA的第一裝置LBA。

在操作中,當分配葉節(jié)點和/或區(qū)間時,可至少部分基于所分配的一系列裝置LBA和下一自由裝置LBA,更新受影響的自由列表條目。相應自由列表條目可被包含在每個系列連續(xù)自由裝置LBA(即自由區(qū)間)的第一扇區(qū)中。當使葉節(jié)點和/或區(qū)間自由時,自由列表條目可被寫到數(shù)據(jù)區(qū)間和/或葉節(jié)點的第一扇區(qū)。例如,當使區(qū)間和/或索引節(jié)點自由時,區(qū)間和/或索引節(jié)點變成自由列表中的新條目。自由列表頭LBA 312然后可被寫為條目中的下一裝置LBA參數(shù)。新條目的裝置LBA然后被寫到元數(shù)據(jù)202,作為新自由列表頭LBA 312。

自由列表是“堆樣式的”自由列表,因為它類似于易失性存儲器的堆存儲器管理器的自由列表。在操作期間,可向自由列表添加項目或從中移除項目。自由列表可變得碎片化,并且條目可能太小而不能存儲對應于連續(xù)的一系列主機LBA的數(shù)據(jù)。數(shù)據(jù)然后可被分成足以將數(shù)據(jù)放入自由列表條目的多個區(qū)間。對應的葉節(jié)點然后可包含多個映射,其中每個不連續(xù)區(qū)間一個映射。

圖4圖示了符合本公開一個實施例的具有分配的索引節(jié)點(包含葉節(jié)點)、數(shù)據(jù)區(qū)間和自由空間410的示例數(shù)據(jù)部分400。為了容易圖示,未示出自由列表條目。示例數(shù)據(jù)部分400包含根節(jié)點402、兩個內(nèi)部節(jié)點404a、404b、四個葉節(jié)點406a、406b、406c、406d和八個區(qū)間408a、...、408h。在此示例中,根節(jié)點402指向兩個內(nèi)部節(jié)點404a、404b。在此示例中,每個內(nèi)部節(jié)點404a、404b分別指向兩個葉節(jié)點406a和406b以及406c和406d。每個葉節(jié)點指向一個或多個相應區(qū)間。

索引節(jié)點402、404a、404b、406a、406b、406c、406d和數(shù)據(jù)區(qū)間408a、...、408h都可從同一自由列表分配,如本文所描述的。對于相對低等待時間的NVM,可以避免在自由空間的單獨連續(xù)部分中保持索引節(jié)點和數(shù)據(jù)。根節(jié)點402和內(nèi)部節(jié)點404a、404b可各包含至少對應于搜索樹(例如B+樹)一部分的索引和指針。索引可與主機LBA相關(guān),并且指針可與裝置LBA相關(guān)。葉節(jié)點配置成包含將數(shù)系列主機LBA映射到數(shù)系列裝置LBA(例如數(shù)據(jù)區(qū)間)的多個參數(shù)。例如,葉節(jié)點可包含主機LBA、對應的裝置LBA和扇區(qū)中的長度,例如{主機LBA,裝置LBA,長度}

例如,在操作中,與查詢主機LBA相關(guān)的查找包含遍歷該樹以找到具有小于或等于查詢主機LBA的最大主機LBA的葉節(jié)點。然后可評估葉節(jié)點的關(guān)聯(lián)長度,以確定所分配的一系列主機LBA是否包含查詢主機LBA。如果查詢主機LBA被包含在該系列LBA中,則然后可選擇關(guān)聯(lián)的裝置LBA。然后可處理存儲器存取操作??赏ㄟ^將操作編組成事務來實現(xiàn)跨多個主機LBA系列的原子操作。換言之,原子操作不限于連續(xù)主機LBA或連續(xù)裝置LBA。

從而,數(shù)據(jù)部分可包含多個索引節(jié)點、多個葉節(jié)點和多個數(shù)據(jù)區(qū)間。數(shù)據(jù)部分可進一步包含一個或多個自由區(qū)間。存儲器存取操作可包含使用查找主機LBA作為搜索索引來遍歷搜索樹。然后可至少部分基于包含在葉節(jié)點中的存儲的主機LBA,并且至少部分基于關(guān)聯(lián)的長度,選擇葉節(jié)點。例如,如果查找主機LBA包含在由存儲的主機LBA和長度定義的一系列主機LBA中,則可選擇葉節(jié)點。然后可標識對應的裝置LBA。換言之,葉節(jié)點配置成提供從查找主機LBA到標識的裝置LBA的映射。在操作中,可從同一樹列表分配索引節(jié)點、葉節(jié)點和區(qū)間。可從自由列表使葉節(jié)點和/或區(qū)間自由。

在實施例中,可通過向量處理促進搜索樹的遍歷。例如,處理器110可配置用于向量處理,并且間接邏輯140可配置成使用向量處理管理搜索樹的遍歷。向量處理包含單指令多數(shù)據(jù)(SIMD)。換言之,可對多個元素并行執(zhí)行操作。元素例如可包含在向量中。

搜索樹包含B+樹,如本文所描述的。搜索樹中的索引包含和/或有關(guān)主機LBA。查找操作配置成確定在葉節(jié)點中是否包含查找(即查詢)主機LBA。如果查找主機LBA大于或等于存儲的主機LBA并小于存儲的主機LBA加上關(guān)聯(lián)的長度,則查找主機LBA被包含在葉節(jié)點中。如果查找主機LBA被包含在葉節(jié)點中,則對應裝置LBA已經(jīng)被分配并且未自由。如果查找操作被包含在驗證操作中,則驗證操作可成功。如果查找主機LBA未包含在葉節(jié)點中,則對應裝置LBA未分配和/或已經(jīng)自由。在此情況下,關(guān)聯(lián)的驗證操作可失敗,或者可確認,對應裝置LBA已經(jīng)自由。

在此實施例中,一個或多個葉節(jié)點的內(nèi)容可配置為用于查找操作的多個向量。第一向量可包含多個存儲的主機LBA,并且第二向量可包含多個對應長度。查找向量可由多個查找主機LBA形成。查找向量然后可與第一向量比較,并且比較結(jié)果可被存儲在第一映射向量中。例如,對于每個查找主機LBA存儲的主機LBA比較,如果存儲的主機LBA小于或等于查找LBA,則第一映射向量可包含第一值(例如集),并且否則可包含第二值(例如清除)。

最大LBA向量然后可通過對第一向量和第二向量的對應元素求和(即,將存儲的主機LBA和對應長度相加以確定與區(qū)間關(guān)聯(lián)的一系列主機LBA)來形成。查找向量然后可與最大LBA向量比較,并且比較結(jié)果可被存儲在第二映射向量中。例如,對于每個查找主機LBA最大LBA比較,如果最大LBA大于查找主機LBA,則記錄映射向量可包含第一值,并且否則可包含第二值。

第一映射向量和第二映射向量然后可進行比較。對于第一映射向量中的每個元素和第二映射向量中的對應元素,如果查找主機LBA大于或等于存儲的主機LBA(例如第一映射向量元素對應于第一值)并且查找主機LBA小于最大主機LBA(例如第二映射向量元素對應于第一值),則查找主機LBA對應于由包含存儲的主機LBA的葉節(jié)點映射的主機LBA。

從而,可并行執(zhí)行多個查找(即查詢)主機LBA的查找。此類并行處理可通過減少遍歷搜索樹的時間量來增加吞吐量。

圖5是根據(jù)本公開各種實施例的存儲器存取操作的流程圖500。具體地說,流程圖500圖示:例如由間接邏輯140接收存儲器存取請求,確定存儲器存取請求是否是讀、丟棄、驗證或?qū)懖僮?,并且然后?zhí)行操作的主機計算裝置部分。操作例如可由圖1的主機計算裝置102執(zhí)行。

這個實施例的操作可開始于接收存儲器存取請求502。例如,可從應用120接收存儲器存取請求。在操作504可接收與數(shù)據(jù)扇區(qū)關(guān)聯(lián)的主機LBA。在操作506可以確定存儲器存取請求是否對應于讀、丟棄、驗證和/或?qū)懻埱蟆H绻鎯ζ鞔嫒≌埱髮谧x、丟棄和/或驗證請求,則在操作510可使用查詢主機LBA作為索引遍歷搜索樹。在操作512,可以確定是否存在包含與查詢主機LBA對應的存儲主機LBA的葉節(jié)點。如果此類葉節(jié)點不存在,則在操作514可傳遞結(jié)果。例如,結(jié)果可以驗證,裝置LBA已經(jīng)被丟棄。在另一示例中,結(jié)果可對應于錯誤。在操作516,程序流然后可返回。如果此類葉節(jié)點確實存在,則操作518可包含利用與查詢主機LBA關(guān)聯(lián)的裝置LBA執(zhí)行存儲器存取操作。在操作520,程序流然后可返回。

如果存儲器存取操作對應于寫請求,則在操作530,主機LBA可被映射到與NVM物理存儲器地址相關(guān)的裝置LBA。操作532可包含向NVM存儲裝置提供數(shù)據(jù)扇區(qū)。NVM存儲裝置然后可將裝置LBA轉(zhuǎn)換成物理存儲器地址,并存儲數(shù)據(jù)扇區(qū)。在操作534,程序流可返回。

從而,存儲器存取請求可包含主機LBA。寫操作可包含將主機LBA映射到裝置LBA。裝置LBA以及關(guān)聯(lián)的數(shù)據(jù)扇區(qū)然后可被提供給NVM存儲裝置進行存儲??杀苊獾却鄠€扇區(qū)的數(shù)據(jù)段。

圖6是根據(jù)本公開各種實施例的寫和丟棄操作的流程圖600。操作例如可由圖1的主機計算裝置102和/或NVM存儲裝置104執(zhí)行。

這個實施例的操作可在開頭602開始。操作604包含創(chuàng)建事務ID。事務ID可包含在事務日志中。在操作606可以確定分配大小。分配大小可包含葉節(jié)點和數(shù)據(jù)區(qū)間或者數(shù)據(jù)區(qū)間,如本文所描述的。操作608包含分配列表。操作608配置成分配總分配大小的區(qū)間,并更新自由列表,如本文所描述的。在操作610,可將數(shù)據(jù)寫到分配的數(shù)據(jù)區(qū)間。在操作611,與數(shù)據(jù)關(guān)聯(lián)的主機LBA可被映射到裝置LBA。映射可包含關(guān)聯(lián)的數(shù)據(jù)區(qū)間的長度。在操作612,可將B+樹節(jié)點寫到分配的數(shù)據(jù)區(qū)間。在操作614,可將節(jié)點寫到分配的空間。節(jié)點包含修改的和/或新的葉節(jié)點和內(nèi)部節(jié)點,并且可包含根節(jié)點。例如裝置控制器可將節(jié)點寫到NVM存儲裝置的物理存儲器中的分配的空間。對于返回到自由列表的每個數(shù)據(jù)區(qū)間和/或節(jié)點,在操作616,可將“自由意圖”記錄寫到與事務ID關(guān)聯(lián)的事務日志中。例如,更新現(xiàn)有存儲的數(shù)據(jù)及其關(guān)聯(lián)的丟棄“老”數(shù)據(jù)的丟棄操作和/或?qū)懖僮骺蓪е乱玫阶杂傻娜~節(jié)點和/或分配的數(shù)據(jù)區(qū)間(如果事務成功完成的話)。自由意圖條目類型可保持,直到事務完成。操作618可包含:將“提交”記錄寫到事務日志。提交日志條目配置成指示寫/丟棄事務(操作)成功完成。

在操作620,可以確定最頂端修改的節(jié)點是否是根節(jié)點。例如,B+樹節(jié)點可響應于重新平衡通過添加和/或刪除葉節(jié)點發(fā)起的搜索樹而修改。如果最頂端修改的節(jié)點是跟節(jié)點,則在操作622,元數(shù)據(jù)根節(jié)點可被設置成新根節(jié)點。如果最頂端修改的節(jié)點不是根節(jié)點,則在操作624,可將改變寫到父節(jié)點。換言之,此類節(jié)點更新不是寫時拷貝操作。在操作626,可釋放所有節(jié)點鎖定。在操作628,可使列表自由。自由列表對應于自由區(qū)間,并且區(qū)間列表對應于區(qū)間標記的自由意圖。在事務期間可以鎖列表。在操作630,程序流然后可結(jié)束。

圖7是根據(jù)本公開各種實施例的分配操作的流程圖700。具體地說,流程圖700圖示分配裝置存儲器中的區(qū)間。流程圖700是圖6的操作608的一個示例。操作例如可由圖1的主機計算裝置102執(zhí)行。流程圖700的操作可開始于操作702,開始分配。在操作704,可使自由列表鎖定。鎖定配置成防止其它操作訪問并且可能改變自由列表,同時發(fā)生流程圖700的操作。

在操作706,可以確定是否存在要分配的任何區(qū)間。如果不存在要分配的區(qū)間,則程序流可前進到操作718。如果存在要分配的區(qū)間,則在操作708,可以讀自由列表中的頭自由區(qū)間。在操作710,可以確定頭自由區(qū)間是否大于需要的。如果頭區(qū)間大于需要的,則在操作712,可以分割區(qū)間。例如,自由區(qū)間可被分成分配的區(qū)間和剩余區(qū)間。在714,可以寫新頭區(qū)間中的剩余區(qū)間的下一指針和新大小。操作716包含:將分配記錄寫到事務日志。程序流然后可前進到操作706。從而,可重復操作706、708、710、716以及可能的712和714,直到不再存在區(qū)間要分配為止。在操作718,可使自由列表解鎖。在操作720,可以返回分配的區(qū)間列表。從而,可從自由列表分配一個或多個區(qū)間。區(qū)間可包含數(shù)據(jù)區(qū)間和/或節(jié)點區(qū)間,如本文所描述的。

圖8是根據(jù)本公開各種實施例的使自由操作的流程圖800。具體地說,流程圖800圖示使裝置LBA空間中的區(qū)間自由。流程圖800是響應于圖6的操作616而使區(qū)間自由的操作的一個示例。換言之,流程圖800配置成使標記為“自由意圖”的區(qū)間自由。操作例如可由圖1的主機計算裝置102執(zhí)行。在操作802,可響應于與區(qū)間相關(guān)的“自由意圖”的事務日志條目而發(fā)起流程圖800的操作。在操作804,可使自由列表鎖定。操作806包含將下一裝置LBA和長度寫到自由區(qū)間。操作808可包含:將“自由”記錄寫在事務日志中。在操作810,可使自由列表解鎖。

圖9是根據(jù)本公開各種實施例使用SIMD(單指令多數(shù)據(jù))的查找操作的流程圖900。具體地說,流程圖900圖示由配置成執(zhí)行SIMD指令的處理器(例如向量處理器)執(zhí)行查找操作。操作例如可由圖1的主機計算裝置102執(zhí)行。流程圖900的操作可在開頭902開始。操作904可包含比較存儲的主機LBA的向量與查找LBA的向量(查找向量)。在操作906,比較結(jié)果可被存儲在第一映射向量中。例如,如果相應存儲的主機LBA小于相應查找主機LBA(即查詢主機LBA),則第一映射向量中的每個結(jié)果可對應于第一值,并且否則對應于第二值。操作908可包含將存儲的主機LBA的向量加上相應長度的向量。在操作910,操作908的結(jié)果可被存儲在最大LBA向量中。操作912包含比較最大LBA向量與查找向量。操作914可包含將操作912的比較結(jié)果存儲在第二映射向量中。在操作916可以比較第一映射向量與第二映射向量。

在操作918,可以確定相應查找主機LBA是否大于或等于相應存儲的主機LBA,并且相應查找主機LBA是否小于相應最大主機LBA。換言之,可以比較第一映射向量與第二映射向量。如果相應查找主機LBA大于或等于相應存儲的主機LBA,并且相應查找主機LBA小于相應最大主機LBA,則分配相應查找主機LBA,920。換言之,查找主機LBA對應于存儲的主機LBA。如果相應查找主機LBA小于相應存儲的主機LBA,和/或相應查找主機LBA大于相應最大主機LBA,則不分配查找主機LBA,922。

圖10是根據(jù)本公開一個實施例的多個自由列表的操作的流程圖1000。具體地說,流程圖1000圖示了多個自由列表的管理,每個自由列表配置成由相應處理器、核和/或線程維護。操作例如可由圖1的主機計算裝置102執(zhí)行。流程圖1000的操作可開始于開頭1002。操作1004包含用多個自由列表初始化數(shù)據(jù)部分。在操作1006,可將相應自由列表指配給選擇的處理器、核和/或線程。操作1008包含:從當前處理器、核和/或線程的相應自由列表分配或返回區(qū)間。在操作1010,程序流然后可結(jié)束。

雖然圖5至10的流程圖圖示了根據(jù)各種實施例的操作,但要理解到,對于其它實施例,并不是在圖5、6、7、8、9和/或10中描繪的所有操作都是必要的。此外,在本文完全可以預見,在本公開的其它實施例中,在圖5、6、7、8、9和/或10中描述的操作和/或本文描述的其它操作可以在任何附圖中都未明確顯示的方式組合,并且此類實施例可包含比在圖5、6、7、8、9和/或10中圖示的更少的或更多的操作。由此,針對一個附圖中未明確示出的特征和/或操作的權(quán)利要求被視為在本公開的范圍和內(nèi)容內(nèi)。

OS 122可配置成管理系統(tǒng)資源并控制在每個相應裝置和/或系統(tǒng)(例如主機計算裝置102和/或NVM存儲裝置104)上運行的任務。例如,可使用Microsoft Windows、HP-UX、Linux或UNIX實現(xiàn)OS,盡管可使用其它操作系統(tǒng)。在一些實施例中,OS可由可向在一個或多個處理單元上運行的各種操作系統(tǒng)(虛擬機)提供底層硬件的抽象層的虛擬機監(jiān)控器(或監(jiān)管程序)替換。

存儲器114可包含一個或多個如下類型的存儲器:半導體固件存儲器、可編程存儲器、非易失性存儲器、只讀存儲器、電可編程存儲器、隨機存取存儲器、閃存、磁盤存儲器和/或光盤存儲器。附加地或備選地,系統(tǒng)存儲器可包含其它類型和/或以后開發(fā)的類型的計算機可讀存儲器。

本文描述的操作的實施例可實現(xiàn)在計算機可讀存儲裝置中,其上存儲有指令,所述指令當由一個或多個處理器執(zhí)行時執(zhí)行所述方法。處理器例如可包含處理單元和/或可編程電路。存儲裝置可包含機器可讀存儲裝置,包含任何類型的有形、非暫時性存儲裝置,例如任何類型的盤,包含軟盤、光盤、壓縮盤只讀存儲器(CD-ROM)、壓縮盤可重寫(CD-RW)和磁光盤、半導體裝置,諸如只讀存儲器(ROM)、隨機存取存儲器(RAM),諸如動態(tài)和靜態(tài)RAM、可擦除可編程只讀存儲器(EPROM)、電可擦除可編程只讀存儲器(EEPROM)、閃存、磁卡或光卡、或適合于存儲電指令的任何類型存儲裝置。

如本文任何實施例中所使用的術(shù)語“邏輯”可指的是配置成執(zhí)行上面提到的操作的軟件、固件和/或電路。軟件可實施為記錄在非暫時性計算機可讀存儲介質(zhì)上的軟件包、代碼、指令、指令集和/或數(shù)據(jù)。固件可實施為硬編碼在(例如非易失性)存儲器裝置中的代碼、指令或指令集和/或數(shù)據(jù)。

如在本文任何實施例中所使用的“電路”例如可包括硬連線電路、可編程電路(諸如包括一個或多個單獨指令處理核心的計算機處理器)、狀態(tài)機電路和/或存儲由可編程電路執(zhí)行的指令的固件(單個或以任何組合)。邏輯可共同或單獨實施為形成更大系統(tǒng)(例如集成電路(IC)、專用集成電路(ASIC)、片上系統(tǒng)(SoC)、臺式計算機、膝上型計算機、平板計算機、服務器、智能電話等)的一部分的電路。

在一些實施例中,硬件描述語言(HDL)可用于規(guī)定用于本文描述的各種邏輯和/或電路的電路和/或邏輯實現(xiàn)。例如,在一個實施例中,硬件描述語言可遵守或兼容超高速集成電路(VHSIC)硬件描述語言(VHDL),其可實現(xiàn)本文描述的一個或多個電路和/或邏輯的半導體制造。VHDL可遵守或兼容IEEE標準1076-1987、IEEE標準1076.2、IEEE1076.1、VHDL-2006的IEEE草稿3.0、VHDL-2008的IEEE草稿4.0和/或IEEE VHDL標準的其它版本和/或其它硬件描述標準。

從而,與本公開的教導一致,系統(tǒng)和方法包含主機計算裝置中的間接邏輯,其實現(xiàn)NVM基元,同時避免日志構(gòu)造的存儲及其關(guān)聯(lián)的開銷。NVM基元包含但不限于原子寫、原子多寫、原子寫、稀疏編址、丟棄、驗證、原子丟棄和原子多丟棄。間接邏輯配置成響應于寫請求而管理向選擇的字節(jié)可存取NVM存儲裝置寫數(shù)據(jù)扇區(qū),而不等待附加扇區(qū)累積。間接邏輯提供配置成將LBA映射到裝置LBA的間接層。NVM存儲裝置然后可將裝置LBA映射和/或轉(zhuǎn)換成PMA。

在一些實施例中,可使用SIMD(單指令多數(shù)據(jù))操作,實現(xiàn)查找包含在未分類的B樹葉節(jié)點中的地址的方法。換言之,可實現(xiàn)并行(即向量)處理,如本文所描述的。

在一些實施例中,可管理共享地址空間內(nèi)的多個自由列表。共享地址空間內(nèi)的多個自由列表中的一個或多個可被指配給相應處理器、核和/或線程。處理器、核和/或線程然后可配置成從其指配的自由列表中添加和/或移除區(qū)間。從而,可避免與自由列表關(guān)聯(lián)的鎖定競爭。

示例

本公開的示例包含諸如與固態(tài)驅(qū)動器中的主機管理的非易失性存儲器相關(guān)的方法、用于執(zhí)行方法動作的部件、裝置或設備或計算機可讀存儲裝置的主題,如下面所論述的。

示例1

根據(jù)這個示例,提供了一種包含處理器、芯片集、存儲器和簡潔邏輯的設備。間接邏輯接收與第一數(shù)據(jù)扇區(qū)關(guān)聯(lián)的主機邏輯塊地址(LBA),將主機LBA從主機地址空間映射到裝置地址空間中的第一裝置LBA,裝置地址空間與非易失性存儲器(NVM)存儲裝置物理存儲器地址空間相關(guān),并且向NVM存儲裝置提供第一數(shù)據(jù)扇區(qū)和第一裝置LBA。

示例2

這個示例包含示例1的元件,其中所述裝置地址空間包含元數(shù)據(jù)、事務日志和數(shù)據(jù)部分。

示例3

這個示例包含示例2的元件,其中數(shù)據(jù)部分包含自由列表、多個索引節(jié)點、多個葉節(jié)點和多個區(qū)間,并且所述間接邏輯進一步從所述自由列表分配葉節(jié)點和區(qū)間,所述區(qū)間對應于所述第一數(shù)據(jù)扇區(qū)。

示例4

這個示例包含示例3的元件,其中所述間接邏輯進一步向葉節(jié)點寫所述主機LBA、所述第一裝置LBA和對應于所述第一數(shù)據(jù)扇區(qū)的長度。

示例5

這個示例包含根據(jù)示例1至4中任一示例的元件,其中所述間接邏輯進一步接收與所述主機LBA關(guān)聯(lián)的第二數(shù)據(jù)扇區(qū),將所述主機LBA映射到第二裝置LBA,向所述NVM存儲裝置提供所述第二數(shù)據(jù)扇區(qū)和所述第二裝置LBA,并將葉節(jié)點更新成包含所述第二裝置LBA。

示例6

這個示例包含根據(jù)示例1至4中任一示例的元件,其中所述處理器是向量處理器,并且所述間接邏輯進一步遍歷搜索樹以并行查找多個查詢主機LBA。

示例7

這個示例包含根據(jù)示例2至3中任一示例的元件,其中所述數(shù)據(jù)部分包含多個自由列表,每個自由列表由相應處理器、核或線程管理。

示例8

這個示例包含根據(jù)示例1至4中任一示例的元件,其中間接邏輯進一步存儲與主機地址空間相關(guān)的一個或多個索引節(jié)點,索引節(jié)點促進對于存儲的數(shù)據(jù)的搜索。

示例9

這個示例包含示例8的元件,其中索引節(jié)點布置在搜索樹中。

示例10

這個示例包含示例9的元件,其中搜索樹是B+樹。

示例11

這個示例包含根據(jù)示例1至4中任一示例的元件,其中間接邏輯進一步確定第一數(shù)據(jù)扇區(qū)是否被成功存儲在NVM存儲裝置中。

示例12

這個示例包含根據(jù)示例1至4中任一示例的元件,其中所述間接邏輯包含與原子寫、原子丟棄、原子多寫、原子多丟棄、稀疏編址和驗證中一個或多個對應的一個或多個NVM基元。

示例13

這個示例包含示例5的元件,其中如果成功存儲了所述第二數(shù)據(jù)扇區(qū),則所述間接邏輯進一步丟棄所述第一數(shù)據(jù)扇區(qū)。

示例14

這個示例包含根據(jù)權(quán)利要求1至4中任一項的元件,其中所述主機地址空間大于所述裝置地址空間。

示例15

這個示例包含根據(jù)示例2至3中任一示例的元件,其中事務日志包含與第一裝置LBA相關(guān)的至少一個日志條目和事務標識符(ID),每個日志條目包含日志條目類型。

示例16

這個示例包含示例15的元件,其中每個日志條目選自包含分配、自由意圖、提交和自由的列表。

示例17

這個示例包含根據(jù)示例1至4中任一示例的元件,其中間接邏輯進一步創(chuàng)建事務標識符(ID),確定與第一數(shù)據(jù)扇區(qū)相關(guān)的分配大小,分配至少一個區(qū)間,向至少一個區(qū)間的一個數(shù)據(jù)區(qū)間寫第一數(shù)據(jù)扇區(qū),并向至少一個區(qū)間的節(jié)點區(qū)間寫索引節(jié)點。

示例18

這個示例包含示例17的元件,其中間接邏輯進一步向與要返回到自由列表的節(jié)點區(qū)間和數(shù)據(jù)區(qū)間中的至少一個的事務ID關(guān)聯(lián)的事務日志寫入自由意圖記錄。

示例19

這個示例包含示例17的元件,其中如果第一數(shù)據(jù)扇區(qū)被成功存儲到NVM存儲裝置,則間接邏輯進一步向與事務ID關(guān)聯(lián)的事務日志寫入提交記錄。

示例20

這個示例包含示例17的元件,其中間接邏輯進一步調(diào)整根節(jié)點。

示例21

這個示例包含示例17的元件,其中間接邏輯進一步讀自由列表中頭區(qū)間的長度,如果頭區(qū)間的大小大于分配大小,則將頭區(qū)間分成分配的區(qū)間和剩余區(qū)間,向剩余區(qū)間寫剩余區(qū)間大小和下一指針,并向與事務ID關(guān)聯(lián)的事務日志寫入分配記錄。

示例22

這個示例包含示例18的元件,其中間接邏輯進一步至少部分基于自由意圖日志向自由的區(qū)間寫下一裝置LBA和長度,并向事務日志寫入自由記錄。

示例23

這個示例包含示例6的元件,其中間接邏輯進一步將存儲的主機LBA的向量與包含多個查找LBA的查找向量相比較,將比較結(jié)果存儲在第一映射向量中;將存儲的主機LBA的向量和與存儲的主機LBA關(guān)聯(lián)的相應長度的向量之和存儲在最大LBA向量中;將查找向量與最大LBA向量的比較結(jié)果存儲在第二映射向量中;以及至少部分基于第一映射向量和第二映射向量確定每個查找主機LBA是否對應于相應存儲的主機LBA。

示例24

根據(jù)這個示例,提供了一種方法。該方法包含:由間接邏輯接收與第一數(shù)據(jù)扇區(qū)關(guān)聯(lián)的主機邏輯塊地址(LBA);由間接邏輯將主機LBA從主機地址空間映射到裝置地址空間中的第一裝置LBA,裝置地址空間與非易失性存儲器(NVM)存儲裝置物理存儲器地址空間相關(guān);由間接邏輯向NVM存儲裝置提供第一數(shù)據(jù)扇區(qū)和第一裝置LBA。

示例25

這個示例包含示例24的元件,其中所述裝置地址空間包含元數(shù)據(jù)、事務日志和數(shù)據(jù)部分。

示例26

這個示例包含示例25的元件,并且進一步包含:由所述間接邏輯從自由列表分配葉節(jié)點和區(qū)間,所述區(qū)間對應于所述第一數(shù)據(jù)扇區(qū),所述數(shù)據(jù)部分包含所述自由列表、多個索引節(jié)點、多個葉節(jié)點和多個區(qū)間。

示例27

這個示例包含示例26的元件,并且進一步包含:由所述間接邏輯向所述葉節(jié)點寫所述主機LBA、所述第一裝置LBA和對應于所述第一數(shù)據(jù)扇區(qū)的長度。

示例28

這個示例包含示例24的元件,并且進一步包含:由間接邏輯接收與主機LBA關(guān)聯(lián)的第二數(shù)據(jù)扇區(qū);由間接邏輯將主機LBA映射到第二裝置LBA;由間接邏輯向所述NVM存儲裝置提供所述第二數(shù)據(jù)扇區(qū)和所述第二裝置LBA;以及由間接邏輯將葉節(jié)點更新成包含所述第二裝置LBA。

示例29

這個示例包含示例24的元件,并且進一步包含:由所述間接邏輯遍歷搜索樹以并行查找多個查詢主機LBA。

示例30

這個示例包含示例25的元件,其中所述數(shù)據(jù)部分包含多個自由列表,每個自由列表由相應處理器、核或線程管理。

示例31

這個示例包含示例24的元件,并且進一步包含:由間接邏輯存儲與主機地址空間相關(guān)的一個或多個索引節(jié)點,索引節(jié)點促進對于存儲的數(shù)據(jù)的搜索。

示例32

這個示例包含示例31的元件,其中索引節(jié)點布置在搜索樹中。

示例33

這個示例包含示例32的元件,其中搜索樹是B+樹。

示例34

這個示例包含示例24的元件,并且進一步包含:由間接邏輯確定第一數(shù)據(jù)扇區(qū)是否被成功存儲在NVM存儲裝置中。

示例35

這個示例包含示例24的元件,其中所述間接邏輯包含與原子寫、原子丟棄、原子多寫、原子多丟棄、稀疏編址和驗證中一個或多個對應的一個或多個NVM基元。

示例36

這個示例包含示例28的元件,并且進一步包含:如果成功存儲了所述第二數(shù)據(jù)扇區(qū),則所述間接邏輯丟棄所述第一數(shù)據(jù)扇區(qū)。

示例37

這個示例包含示例24的元件,其中所述主機地址空間大于所述裝置地址空間。

示例38

這個示例包含示例25的元件,其中事務日志包含與第一裝置LBA相關(guān)的至少一個日志條目和事務標識符(ID),每個日志條目包含日志條目類型。

示例39

這個示例包含示例38的元件,其中每個日志條目選自包含分配、自由意圖、提交和自由的列表。

示例40

這個示例包含示例24的元件,并且進一步包含:由間接邏輯創(chuàng)建事務標識符(ID);由間接邏輯確定與第一數(shù)據(jù)扇區(qū)相關(guān)的分配大小;由間接邏輯分配至少一個區(qū)間;由間接邏輯向至少一個區(qū)間的一個數(shù)據(jù)區(qū)間寫第一數(shù)據(jù)扇區(qū);以及由間接邏輯向至少一個區(qū)間的節(jié)點區(qū)間寫索引節(jié)點。

示例41

這個示例包含示例40的元件,并且進一步包含:由間接邏輯向與要返回到自由列表的節(jié)點區(qū)間和數(shù)據(jù)區(qū)間中的至少一個的事務ID關(guān)聯(lián)的事務日志寫入自由意圖記錄。

示例42

這個示例包含示例40的元件,并且進一步包含:如果第一數(shù)據(jù)扇區(qū)被成功存儲到NVM存儲裝置,則由間接邏輯向與事務ID關(guān)聯(lián)的事務日志寫入提交記錄。

示例43

這個示例包含示例40的元件,并且進一步包含:由間接邏輯調(diào)整根節(jié)點。

示例44

這個示例包含示例40的元件,并且進一步包含:由間接邏輯讀自由列表中頭區(qū)間的長度;如果頭區(qū)間的大小大于分配大小,則由間接邏輯將頭區(qū)間分成分配的區(qū)間和剩余區(qū)間;由間接邏輯向剩余區(qū)間寫剩余區(qū)間大小和下一指針;以及由間接邏輯向與事務ID關(guān)聯(lián)的事務日志寫入分配記錄。

示例45

這個示例包含示例41的元件,并且進一步包含:由間接邏輯至少部分基于自由意圖日志向自由的區(qū)間寫下一裝置LBA和長度;以及由間接邏輯向事務日志寫入自由記錄。

示例46

這個示例包含示例29的元件,并且進一步包含:由間接邏輯將存儲的主機LBA的向量與包含多個查找LBA的查找向量相比較;由間接邏輯將比較結(jié)果存儲在第一映射向量中;由間接邏輯將存儲的主機LBA的向量和與存儲的主機LBA關(guān)聯(lián)的相應長度的向量之和存儲在最大LBA向量中;由間接邏輯將查找向量與最大LBA向量的比較結(jié)果存儲在第二映射向量中;以及由間接邏輯至少部分基于第一映射向量和第二映射向量確定每個查找主機LBA是否對應于相應存儲的主機LBA。

示例47

根據(jù)這個示例,提供了一種計算機可讀存儲裝置,其上存儲了指令,所述指令當由一個或多個處理器執(zhí)行時導致如下操作,包含:接收與第一數(shù)據(jù)扇區(qū)關(guān)聯(lián)的主機邏輯塊地址(LBA);將主機LBA從主機地址空間映射到裝置地址空間中的第一裝置LBA,裝置地址空間與非易失性存儲器(NVM)存儲裝置物理存儲器地址空間相關(guān);向NVM存儲裝置提供第一數(shù)據(jù)扇區(qū)和第一裝置LBA。

示例48

這個示例包含示例47的元件,其中所述裝置地址空間包含元數(shù)據(jù)、事務日志和數(shù)據(jù)部分。

示例49

這個示例包含示例48的元件,其中所述指令當由一個或多個處理器執(zhí)行時導致如下附加操作,包含:從自由列表分配葉節(jié)點和區(qū)間,所述區(qū)間對應于所述第一數(shù)據(jù)扇區(qū),所述數(shù)據(jù)部分包含所述自由列表、多個索引節(jié)點、多個葉節(jié)點和多個區(qū)間。

示例50

這個示例包含示例49的元件,其中所述指令當由一個或多個處理器執(zhí)行時導致如下附加操作,包含:向所述葉節(jié)點寫所述主機LBA、所述第一裝置LBA和對應于所述第一數(shù)據(jù)扇區(qū)的長度。

示例51

這個示例包含根據(jù)示例47至50中任一示例的元件,其中所述指令當由一個或多個處理器執(zhí)行時導致如下附加操作,包含:接收與所述主機LBA關(guān)聯(lián)的第二數(shù)據(jù)扇區(qū),將所述主機LBA映射到第二裝置LBA,向所述NVM存儲裝置提供所述第二數(shù)據(jù)扇區(qū)和所述第二裝置LBA,并將葉節(jié)點更新成包含所述第二裝置LBA。

示例52

這個示例包含根據(jù)示例47至50中任一示例的元件,其中所述指令當由一個或多個處理器執(zhí)行時導致如下附加操作,包含:遍歷搜索樹以并行查找多個查詢主機LBA。

示例53

這個示例包含根據(jù)示例48和49中任一示例的元件,其中所述數(shù)據(jù)部分包含多個自由列表,每個自由列表由相應處理器、核或線程管理。

示例54

這個示例包含根據(jù)示例47至50中任一示例的元件,其中所述指令當由一個或多個處理器執(zhí)行時導致如下附加操作,包含:存儲與主機地址空間相關(guān)的一個或多個索引節(jié)點,索引節(jié)點促進對于存儲的數(shù)據(jù)的搜索。

示例55

這個示例包含示例54的元件,其中索引節(jié)點布置在搜索樹中。

示例56

這個示例包含示例55的元件,其中搜索樹是B+樹。

示例57

這個示例包含根據(jù)示例47至50中任一示例的元件,其中所述指令當由一個或多個處理器執(zhí)行時導致如下附加操作,包含:確定第一數(shù)據(jù)扇區(qū)是否被成功存儲在NVM存儲裝置中。

示例58

這個示例包含根據(jù)示例47至50中任一示例的元件,其中指令包含與原子寫、原子丟棄、原子多寫、原子多丟棄、稀疏編址和驗證中一個或多個對應的一個或多個NVM基元。

示例59

這個示例包含示例51的元件,其中所述指令當由一個或多個處理器執(zhí)行時導致如下附加操作,包含:如果成功存儲了所述第二數(shù)據(jù)扇區(qū),則丟棄所述第一數(shù)據(jù)扇區(qū)。

示例60

這個示例包含根據(jù)示例47至50中任一示例的元件,其中所述主機地址空間大于所述裝置地址空間。

示例61

這個示例包含根據(jù)示例48和49中任一示例的元件,其中事務日志包含與第一裝置LBA相關(guān)的至少一個日志條目和事務標識符(ID),每個日志條目包含日志條目類型。

示例62

這個示例包含示例61的元件,其中每個日志條目選自包含分配、自由意圖、提交和自由的列表。

示例63

這個示例包含根據(jù)示例47至50中任一示例的元件,其中所述指令當由一個或多個處理器執(zhí)行時導致如下附加操作,包含:創(chuàng)建事務標識符(ID),確定與第一數(shù)據(jù)扇區(qū)相關(guān)的分配大小,分配至少一個區(qū)間,向至少一個區(qū)間的一個數(shù)據(jù)區(qū)間寫第一數(shù)據(jù)扇區(qū),并向至少一個區(qū)間的節(jié)點區(qū)間寫索引節(jié)點。

示例64

這個示例包含示例63的元件,其中所述指令當由一個或多個處理器執(zhí)行時導致如下附加操作,包含:向與要返回到自由列表的節(jié)點區(qū)間和數(shù)據(jù)區(qū)間中的至少一個的事務ID關(guān)聯(lián)的事務日志寫入自由意圖記錄。

示例65

這個示例包含示例63的元件,其中所述指令當由一個或多個處理器執(zhí)行時導致如下附加操作,包含:如果第一數(shù)據(jù)扇區(qū)被成功存儲到NVM存儲裝置,則向與事務ID關(guān)聯(lián)的事務日志寫入提交記錄。

示例66

這個示例包含示例63的元件,其中所述指令當由一個或多個處理器執(zhí)行時導致如下附加操作,包含:調(diào)整根節(jié)點。

示例67

這個示例包含示例63的元件,其中所述指令當由一個或多個處理器執(zhí)行時導致如下附加操作,包含:讀自由列表中頭區(qū)間的長度,如果頭區(qū)間的大小大于分配大小,則將頭區(qū)間分成分配的區(qū)間和剩余區(qū)間,向剩余區(qū)間寫剩余區(qū)間大小和下一指針,并向與事務ID關(guān)聯(lián)的事務日志寫入分配記錄。

示例68

這個示例包含示例64的元件,其中所述指令當由一個或多個處理器執(zhí)行時導致如下附加操作,包含:至少部分基于自由意圖日志向自由的區(qū)間寫下一裝置LBA和長度;以及向事務日志寫入自由記錄。

示例69

這個示例包含示例52的元件,其中所述指令當由一個或多個處理器執(zhí)行時導致如下附加操作,包含:將存儲的主機LBA的向量與包含多個查找LBA的查找向量相比較,將比較結(jié)果存儲在第一映射向量中;將存儲的主機LBA的向量和與存儲的主機LBA關(guān)聯(lián)的相應長度的向量之和存儲在最大LBA向量中;將查找向量與最大LBA向量的比較結(jié)果存儲在第二映射向量中;以及至少部分基于第一映射向量和第二映射向量確定每個查找主機LBA是否對應于相應存儲的主機LBA。

示例70

根據(jù)這個示例,存在一種計算機可讀存儲裝置,其上存儲了指令,所述指令當由一個或多個處理器執(zhí)行時導致如下操作,包含:如示例24至46中任一示例的方法。

示例71

本公開的另一示例是一種系統(tǒng),包含布置成執(zhí)行如示例24至46中任一示例的方法的至少一個裝置。

示例72

本公開的另一示例是一種裝置,包含執(zhí)行如示例24至46中任一示例的方法的部件。

本文已經(jīng)采用的術(shù)語和表述被用作描述而非限制的說法,并且在使用此類術(shù)語和表述時沒打算排除所示出和描述的特征的任何等同物(或其部分),并且要認識到,各種修改在權(quán)利要求書的范圍內(nèi)是可能的。因而,權(quán)利要求書打算覆蓋所有此類等同物。

本文已經(jīng)描述了各種特點、方面和實施例。特點、方面和實施例易于彼此組合以及變化和修改,這是本領(lǐng)域技術(shù)人員將理解的。本公開因此應該視為包含此類組合、變化和修改。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
平潭县| 肇州县| 玉环县| 溆浦县| 寻甸| 本溪市| 都昌县| 高要市| 兴和县| 英超| 南召县| 定兴县| 仙游县| 东丰县| 正蓝旗| 定边县| 文水县| 承德市| 图木舒克市| 紫金县| 泊头市| 浦北县| 新化县| 石景山区| 陈巴尔虎旗| 新巴尔虎左旗| 石狮市| 赞皇县| 黄石市| 营口市| 兰坪| 彰化县| 定州市| 鄂托克前旗| 边坝县| 会东县| 四平市| 东至县| 镇原县| 惠安县| 上高县|