在持久存儲器裝置中的連續數據塊和非連續組的邏輯地址塊之間的讀取和寫入的制作方法
【技術領域】
[0001]公開的實施例大體涉及存儲裝置。
【背景技術】
[0002]眾所周知,邏輯上連續的存儲比邏輯上不連續的存儲提供輸入/輸出操作的更加有效的執行。但是,隨著時間的流逝和進行更多的操作,存儲通常變為碎片化的,從而導致較低效的操作。
[0003]本文所述的實施例提供用于對存儲裝置的更加有效的讀取和寫入的機制和方法。
【發明內容】
[0004]在本公開中,持久存儲器(persistent storage)裝置包括持久存儲器和存儲器控制器,該持久存儲器包括一組持久存儲器塊。該持久存儲器裝置響應于從外部主機裝置接收的命令而存儲并取回數據。該持久存儲器裝置將數據從連續的數據塊存儲到在持久存儲器中的兩組或更多組的邏輯地址塊。該持久存儲器裝置還從在持久存儲器中的兩組或更多組的邏輯地址塊取回對應于連續的數據塊的數據。在這兩種情況中,在持久存儲器中的兩組或更多組的邏輯地址塊在總體上是不連續的。
【附圖說明】
[0005]圖1是示出根據一些實施例的包括持久存儲器裝置和外部主機裝置的系統的框圖。
[0006]圖2A是根據一些實施例的對應于處理將數據從在主機裝置上的主機貯存器中的連續塊存儲到在持久存儲器裝置中的兩組或更多組的邏輯地址塊的寫入命令的示意圖。
[0007]圖2B是根據一些實施例的對應于處理從持久存儲器裝置中的兩組或更多組的邏輯地址塊取回數據并且將該數據存儲到主機裝置上的主機貯存器中的連續塊的讀取命令的示意圖。
[0008]圖3A-3B是示出根據一些實施例的持久存儲器裝置對主機命令的處理的流程圖。
[0009]圖4A-4C示出了根據一些實施例的包括處理主機讀取和寫入命令的用于管理持久存儲器裝置的處理的流程圖。
[0010]貫穿附圖相似的參考標號指代相應的部分。
【具體實施方式】
[0011]在一些實施例中,由在持久存儲器中的主機裝置存儲的數據隨著時間變得碎片化。當這發生時,難以分配連續的存儲。在一些實施例中,在主機上的應用使得主機使用存儲在持久存儲器中的非連續的數據進行輸入/輸出(I/o)操作。在這樣的實施例中,使用非連續的數據進行I/o操作比使用連續的數據塊進行I/O操作效率更低。在一些實施例中,一旦數據變為碎片化,主機對數據進行碎片整理(defragment)。例如,在一些情況中,主機暫停所有應用并且運行用于在持久存儲器中對數據進行碎片整理的處理。在該情況中,在碎片整理處理完成之前,應用不能進行操作。在另一示例中,主機在應用仍在運行的同時運行碎片整理處理。由于碎片整理處理與應用同時地運行,所以應用的性能減慢。在這兩種情況中,應用完成操作的時間增加,從而降低了效率。
[0012]在本公開中,持久存儲器裝置包括持久存儲器和存儲器控制器,該持久存儲器包括一組持久存儲器塊。該存儲器控制器被配置為響應于從外部主機裝置接收的命令而存儲并取回數據。該存儲器控制器還被配置為通過將數據從寫入數據連續數據塊存儲到對應于由主機寫入命令指定的兩組或更多組的邏輯地址塊的持久存儲器塊來響應主機寫入命令。由主機寫入命令指定的每組邏輯地址塊包括一組連續的邏輯地址塊,其中由主機寫入命令指定的兩組或更多組的邏輯地址塊在總體上(in a aggregate)是不連續的。存儲器控制器還被配置為通過從與由主機讀取命令指定的兩組或更多組的邏輯地址塊對應的持久存儲器塊取回與讀取數據連續數據塊對應的數據來響應主機讀取命令。由主機讀取命令指定的每組邏輯地址塊包括一組連續的邏輯地址塊,其中由該主機讀取命令指定的兩組或更多組的邏輯地址塊在總體上是不連續的。
[0013]在一些實施例中,該存儲器控制器還被配置為原子地(atomically)執行該主機寫入命令或者該主機讀取命令。在一些實施例中,該主機寫入命令指定將第一塊數據存儲到與第一邏輯地址塊對應的第一持久存儲器塊并且將第二塊數據存儲到與第二邏輯地址塊對應的第二持久存儲器塊,其中該第一和第二塊數據被連續地存儲在寫入數據連續數據塊中,并且其中該第一和第二邏輯地址塊是非連續的。類似地,在一些實施例中,該主機讀取命令指定從對應于第一邏輯地址塊的第一持久存儲器塊取回第一塊數據并且從對應于第二邏輯地址塊的第二持久存儲器塊取回第二塊數據,其中該第一和第二塊數據在取回之后被連續地存儲在讀取數據連續數據塊中,并且其中該第一和第二邏輯地址塊是非連續的。在一些實施例中,該持久存儲器裝置被實現為單個、單片集成電路。在一些實施例中,該持久存儲器裝置還包括用于將該持久存儲器裝置接口連接到該外部主機裝置的貯存器(memory)控制器的主機接口。
[0014]在一些實施例中,該持久存儲器裝置包括用于將邏輯塊地址與在該持久存儲器裝置中的持久存儲器塊相關聯的邏輯地址到物理地址映射。在一些實施例中,由主機寫入命令指定的兩組或更多組的邏輯地址塊包括邏輯塊地址,該邏輯塊地址的每一個與相應的持久存儲器塊相關聯,并且由該存儲器控制器使用邏輯塊地址到物理塊地址映射來識別該相應的持久存儲器塊。可選地,該寫入數據連續數據塊或者該讀取數據連續數據塊對應于在該外部主機裝置上的貯存器中的連續的數據塊。
[0015]在本公開的另一方面中,提供了用于管理持久存儲器裝置的方法。在一些實施例中,在持久存儲器裝置處進行該方法,該持久存儲器裝置包括持久存儲器和存儲器控制器。該持久存儲器包括一組持久存儲器塊。該方法包括通過將來自寫入數據連續數據塊的數據存儲到與由主機寫入命令指定的兩組或更多組的邏輯地址塊對應的持久存儲器塊,來響應從外部主機裝置接收的主機寫入命令。由主機寫入命令指定的每組邏輯地址塊包括一組連續的邏輯地址塊,其中由主機寫入命令指定的兩組或更多組的邏輯地址塊在總體上是不連續的。該方法還包括通過從與由主機讀取命令指定的兩組或更多組的邏輯地址塊對應的持久存儲器塊取回與讀取數據連續數據塊對應的數據,來響應主機讀取命令。由主機讀取命令指定的每組邏輯地址塊包括一組連續的邏輯地址塊,其中由該主機讀取命令指定的兩組或更多組的邏輯地址塊在總體上是不連續的。
[0016]在本公開的另一方面中,非暫時計算機可讀存儲介質存儲由持久存儲器裝置的存儲器控制器執行的一個或多個程序。由存儲器控制器執行一個或多個程序使得存儲器控制器進行任何上述的方法。
[0017]現在將詳細參考各種實施例,這些實施例的示例在附圖中示出。在下文詳細的描述中,闡述了許多具體的細節以便提供對本發明和所描述的實施例的透徹理解。但是,可以不需要這些具體細節而實施本發明。在其它實例中,沒有詳細地描述公知的方法、過程、組件和電路以使得不會不必要地混淆實施例的方面。
[0018]圖1是示出根據一些實施例的包括持久存儲器裝置106和外部主機裝置102 (在本文有時被稱為主機102)的操作系統100的框圖。為了方便,主機102在本文被描述為實現為單個服務器或者其它單個計算機。主機102包括一個或多個處理單元(CPU) 104、一個或多個貯存器接口 107、貯存器108和用于將這些組件相互連接的一條或多條通信總線I10通信總線110可選地包括互相連接系統組件并控制系統組件之間的通信的電路(有時被稱為芯片組)。貯存器108包括高速隨機存取存儲器,諸如DRAM、SRAM、DDR RAM或者其它隨機存取固態存儲器裝置;并且可選地包括非易失性存儲器,諸如一個或多個磁盤存儲裝置、光盤存儲裝置、閃存裝置、或者其它非易失性固態存儲裝置。此外,貯存器108可選地包括位于遠離CPU 104的一個或多個存儲裝置。貯存器108或者可替換地在貯存器108中的非易失性存儲器裝置包括非易失性計算機可讀存儲介質。在一些實施例中,貯存器108或者貯存器108的非易失性計算機可讀存儲介質存儲下列程序、模塊和數據結構或其子集:
[0019]?操作系統112,其包括用于處理各種基本的系統服務并且用于進行依賴于硬件的任務的過程(procedure);
[0020].一個或多個應用114,其被配置為(或包括指令以)使