專利名稱:一種適用于互聯(lián)網(wǎng)存儲系統(tǒng)的存儲控制方法、系統(tǒng)和裝置的制作方法
一種適用于互聯(lián)網(wǎng)存儲系統(tǒng)的存儲控制方法、系統(tǒng)和裝置
技術領域:
本發(fā)明涉及計算機技術領域,特別涉及一種適用于互聯(lián)網(wǎng)存儲系統(tǒng)的存儲控制方法、系統(tǒng)和裝置。
背景技術:
隨著半導體介質存儲裝置的廣泛使用,出現(xiàn)了各種各樣的存儲設備以及多種存儲介質,例如固態(tài)硬盤(SSD,Solid State Disk)、閃存(flash)卡。現(xiàn)有的SSD和flash卡都是面向通用的存儲模型設計的,需要考慮隨機讀、隨機寫、順序讀和順序寫這四種讀寫模式, 并且每種讀寫模式都要保證一定的性能。在flash設備中,讀寫的基本單元是頁(page),擦除的基本單元是塊(block),一個block —般包括64或者1 個page。在寫一個page之前,必須擦除整個block。而互聯(lián)網(wǎng)存儲系統(tǒng)中只有隨機讀、順序讀和順序寫這三種讀寫模式,并沒有隨機寫。通常,隨機寫會帶來非常復雜的問題,例如均衡磨損(wear leveling)策略,為了降低寫放大和降低合并(merge)操作對性能的影響,現(xiàn)有的存儲控制方法都要預留7%到25% 的存儲空間做緩存(buffer),如果有隨機寫或更新寫,則將數(shù)據(jù)先寫入該buffer,等到該 buffer快滿時,執(zhí)行merge操作,將數(shù)據(jù)拷入目的地址的存儲空間,再把buffer中過時的內(nèi)容刪掉供后續(xù)的數(shù)據(jù)寫入。顯然,如果直接將現(xiàn)有的存儲控制方法直接用于互聯(lián)網(wǎng)存儲系統(tǒng),則這些必然會增加設計復雜度和硬件成本。
發(fā)明內(nèi)容本發(fā)明提供了一種適用于互聯(lián)網(wǎng)存儲系統(tǒng)的存儲控制方法、系統(tǒng)和裝置,以便于降低設計復雜度和硬件成本。具體技術方案如下一種適用于互聯(lián)網(wǎng)存儲系統(tǒng)的存儲控制方法,該方法包括CPU在空閑時向存儲控制器發(fā)送擦除請求指示存儲控制器擦除過時的數(shù)據(jù)塊;所述存儲控制器接收到擦除請求后,擦除所述存儲控制器所負責存儲空間中過時的數(shù)據(jù)塊;當所述存儲控制器接收到寫請求后,根據(jù)地址映射表將數(shù)據(jù)寫入對應的數(shù)據(jù)塊。優(yōu)選地,該方法還包括所述存儲控制器記錄各數(shù)據(jù)塊的擦除次數(shù);所述根據(jù)地址映射表將數(shù)據(jù)寫入對應的數(shù)據(jù)塊具體包括所述存儲控制器識別所述存儲控制器所負責存儲空間中擦除次數(shù)最小的空閑塊作為目標塊,將數(shù)據(jù)寫入所述目標塊,并修改地址映射表中寫請求的目的邏輯地址所映射的物理地址為所述目標塊的物理地址?;蛘撸摲椒ㄟ€包括所述存儲控制器記錄各數(shù)據(jù)塊的擦除次數(shù);所述存儲控制器在空閑時將擦除次數(shù)小于設定第一閾值的數(shù)據(jù)塊與擦除大于設定第二閾值的數(shù)據(jù)塊進行內(nèi)容交換,并將地址映射表中交換的數(shù)據(jù)塊的物理地址進行交換;其中所述第二閾值大于第一閾值。具體地,所述CPU在空閑時向存儲控制器發(fā)送擦除請求包括所述CPU中的上層軟件將擦除請求分發(fā)至線程,再經(jīng)由軟件驅動層發(fā)送給各存儲通道共用的存儲控制器;或者,CPU中的上層軟件將擦除請求分發(fā)至線程,再經(jīng)由軟件驅動層發(fā)送給各線程所負責存儲通道的存儲控制器,其中每一個存儲通道分別對應一個存儲控制器。其中,所述過時的數(shù)據(jù)塊包括超過數(shù)據(jù)塊有效時間的數(shù)據(jù)塊、CPU中的上層軟件確定出的無用的數(shù)據(jù)所在的數(shù)據(jù)塊、臨時數(shù)據(jù)所在的數(shù)據(jù)塊。更進一步地,該方法還包括所述存儲控制器接收到讀請求后,根據(jù)地址映射表確定讀請求的目的邏輯地址所映射的物理地址,并從確定的物理地址讀取數(shù)據(jù)。另外,該方法還包括中斷控制器在每一個存儲控制器執(zhí)行完數(shù)據(jù)處理后,分別向所述CPU發(fā)起中斷; 或者,中斷控制器在所有存儲控制器執(zhí)行完數(shù)據(jù)處理的操作后,統(tǒng)一向所述CPU發(fā)起中斷。優(yōu)選地,當需要寫入的數(shù)據(jù)占用多個數(shù)據(jù)塊時,從所述存儲控制器所負責存儲空間的多個plane中分別識別出各plane中擦除次數(shù)最小的空閑塊作為目標塊。優(yōu)選地,該方法還包括所述存儲控制器選取不超過預設個數(shù)的空閑塊標識為保留區(qū);所述存儲控制器在識別所述目標塊時,從所負責存儲空間中標識為保留區(qū)的數(shù)據(jù)塊中選擇擦除次數(shù)最小的數(shù)據(jù)塊作為目標塊;所述目標塊被寫入數(shù)據(jù)后,取消該目標塊的保留區(qū)標識;有未標識為保留區(qū)的數(shù)據(jù)塊被擦除數(shù)據(jù),且被標識為保留區(qū)的數(shù)據(jù)塊沒有達到所述預設個數(shù),則將被擦除數(shù)據(jù)的數(shù)據(jù)塊標識為保留區(qū)。一種適用于互聯(lián)網(wǎng)存儲系統(tǒng)的存儲控制系統(tǒng),該存儲控制系統(tǒng)包括CPU和存儲控制器;所述CPU,用于在空閑時向存儲控制器發(fā)送擦除請求指示存儲控制器擦除過時的數(shù)據(jù)塊;所述存儲控制器,用于接收到擦除請求后,擦除所述存儲控制器所負責存儲空間中過時的數(shù)據(jù)塊;接收到寫請求后,根據(jù)地址映射表將數(shù)據(jù)寫入對應的數(shù)據(jù)塊。優(yōu)選地,所述存儲控制器還用于記錄各數(shù)據(jù)塊的擦除次數(shù),接收到所述寫請求后, 識別所述存儲控制器所負責存儲空間中擦除次數(shù)最小的空閑塊作為目標塊,將數(shù)據(jù)寫入所述目標塊,并修改地址映射表中寫請求的目的邏輯地址所映射的物理地址為所述目標塊的物理地址。或者,所述存儲控制器還用于記錄各數(shù)據(jù)塊的擦除次數(shù),在空閑時將擦除次數(shù)小于設定第一閾值的數(shù)據(jù)塊與擦除大于設定第二閾值的數(shù)據(jù)塊進行內(nèi)容交換,并將地址映射表中交換的數(shù)據(jù)塊的物理地址進行交換;其中所述第二閾值大于第一閾值。具體地,所述CPU包括上層軟件、一個以上的線程和軟件驅動層;
所述上層軟件將擦除請求分發(fā)至所述線程,再經(jīng)由所述軟件驅動層發(fā)送給各存儲通道共用的存儲控制器;或者,所述上層軟件將擦除請求分發(fā)至所述線程,再經(jīng)由所述軟件驅動層發(fā)送給各線程所負責存儲通道的存儲控制器,其中每一個存儲通道分別對應一個存儲控制器。其中,所述過時的數(shù)據(jù)塊包括超過數(shù)據(jù)塊有效時間的數(shù)據(jù)塊、CPU中的上層軟件確定出的無用的數(shù)據(jù)所在的數(shù)據(jù)塊、臨時數(shù)據(jù)所在的數(shù)據(jù)塊。所述存儲控制器,還用于接收到讀請求后,根據(jù)地址映射表確定讀請求的目的邏輯地址所映射的物理地址,并從確定的物理地址讀取數(shù)據(jù)。另外,該系統(tǒng)還包括中斷控制器,用于在每一個存儲控制器執(zhí)行完數(shù)據(jù)處理后, 分別向所述CPU發(fā)起中斷;或者,在所有存儲控制器執(zhí)行完數(shù)據(jù)處理的操作后,統(tǒng)一向所述 CPU發(fā)起中斷。優(yōu)選地,當需要寫入的數(shù)據(jù)占用多個數(shù)據(jù)塊時,所述存儲控制器從所負責存儲空間的多個plane中分別識別出各plane中擦除次數(shù)最小的空閑塊作為目標塊。優(yōu)選地,所述存儲控制器,還用于選取不超過預設個數(shù)的空閑塊標識為保留區(qū),在識別所述目標塊時,從所負責存儲空間中標識為保留區(qū)的數(shù)據(jù)塊中選擇擦除次數(shù)最小的數(shù)據(jù)塊作為目標塊;所述目標塊被寫入數(shù)據(jù)后,取消該目標塊的保留區(qū)標識;有未標識為保留區(qū)的數(shù)據(jù)塊被擦除數(shù)據(jù),且被標識為保留區(qū)的數(shù)據(jù)塊沒有達到所述預設個數(shù),則將被擦除數(shù)據(jù)的數(shù)據(jù)塊標識為保留區(qū)。一種存儲控制器,該存儲控制器包括存儲器文件RF、閃存翻譯層FTL、先入先出存儲器FIFO以及閃存控制模塊;所述RF,用于記錄接收到的訪問請求;所述FTL與所述RF、所述FIFO以及緩存處理數(shù)據(jù)的DRAM連接,用于進行地址管理,所述地址管理包括維護所在存儲通道中邏輯地址到物理地址的地址映射表,完成所述 RF所記錄訪問請求的邏輯地址到物理地址的映射;還用于記錄各數(shù)據(jù)塊的擦除次數(shù),當所述訪問請求為寫請求時,識別所述存儲控制器所負責存儲空間中擦除次數(shù)最小的空閑塊作為目標塊,并修改地址映射表中寫請求的目的邏輯地址所映射的物理地址為所述目標塊的物理地址;所述閃存控制模塊,與所述FTL通過所述FIFO連接,用于根據(jù)所述FTL的地址映射結果,按照所述訪問請求進行數(shù)據(jù)處理。更進一步地,所述RF還用于保存數(shù)據(jù)處理的狀態(tài)信息;所述閃存控制模塊,還用于在數(shù)據(jù)處理后,將處理狀態(tài)通過所述FIFO傳回所述 FTL,由所述FTL將所述處理狀態(tài)寫入所述RF。優(yōu)選地,所述FTL,還用于在確定需要寫入的數(shù)據(jù)占用多個數(shù)據(jù)塊時,從所述存儲控制器所負責存儲空間的多個plane中分別識別出各plane中擦除次數(shù)最小的空閑塊作為目標塊。優(yōu)選地,選取不超過預設個數(shù)的空閑塊標識為保留區(qū);所述FTL在識別所述目標塊時,從所負責存儲空間中標識為保留區(qū)的數(shù)據(jù)塊中選擇擦除次數(shù)最小的數(shù)據(jù)塊作為目標塊;還用于在所述目標塊被寫入數(shù)據(jù)后,取消該目標塊的保留區(qū)標識;有未標識為保留區(qū)的數(shù)據(jù)塊被擦除數(shù)據(jù),且被標識為保留區(qū)的數(shù)據(jù)塊沒有達到所述預設個數(shù),則將被擦除數(shù)據(jù)的數(shù)據(jù)塊標識為保留區(qū)。一種存儲控制器,該存儲控制器包括存儲器文件RF、閃存翻譯層FTL、先入先出存儲器FIFO以及閃存控制模塊;所述RF,用于記錄接收到的訪問請求;所述FTL與所述RF、所述FIFO以及緩存處理數(shù)據(jù)的DRAM連接,用于進行地址管理,所述地址管理包括維護所在存儲通道中邏輯地址到物理地址的地址映射表,完成所述 RF所記錄訪問請求的邏輯地址到物理地址的映射;還用于記錄各數(shù)據(jù)塊的擦除次數(shù),在空閑時觸發(fā)所述閃存控制模塊將擦除次數(shù)小于設定第一閾值的數(shù)據(jù)塊與擦除大于設定第二閾值的數(shù)據(jù)塊進行內(nèi)容交換,并將地址映射表中交換的數(shù)據(jù)塊的物理地址進行交換;其中所述第二閾值大于第一閾值;所述閃存控制模塊,與所述FTL通過所述FIFO連接,用于根據(jù)所述FTL的地址映射結果,按照所述訪問請求進行數(shù)據(jù)處理。更進一步地,所述RF還用于保存數(shù)據(jù)處理的狀態(tài)信息;所述閃存控制模塊,還用于在數(shù)據(jù)處理后,將處理狀態(tài)通過所述FIFO傳回所述 FTL,由所述FTL將所述處理狀態(tài)寫入所述RF。由以上技術方案可以看出,本發(fā)明針對互聯(lián)網(wǎng)存儲系統(tǒng)的特點,在CPU空閑時,存儲控制器執(zhí)行過時數(shù)據(jù)塊的擦除。通過這種方式能夠在寫數(shù)據(jù)之前為寫數(shù)據(jù)準備好數(shù)據(jù)塊,無需額外預留7%到25%的存儲空間做buffer,實現(xiàn)更加簡單,從而降低了設計復雜度和硬件成本。
圖1為本發(fā)明實施例所適用的一種系統(tǒng)架構圖;圖2為本發(fā)明實施例所適用的另一種系統(tǒng)架構圖;圖3為本發(fā)明實施例提供的適用于互聯(lián)網(wǎng)存儲系統(tǒng)的存儲控制方法流程圖;圖4為本發(fā)明實施例提供的存儲控制器的結構示意圖;圖5為本發(fā)明實施例提供的多個plane之間實現(xiàn)數(shù)據(jù)并發(fā)的示意圖。
具體實施方式為了使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面結合附圖和具體實施例對本發(fā)明進行詳細描述。本發(fā)明所提供的方法可以適用于圖1或者圖2所示的系統(tǒng),在圖1中多個存儲通道(在后續(xù)描述中簡稱通道)的數(shù)據(jù)處理由一個存儲控制器負責,該存儲控制器同時負責多個通道之間的并發(fā)和數(shù)據(jù)分布。在圖2中每一個通道的數(shù)據(jù)由不同的存儲控制器負責, 各存儲控制器負責其所在通道的存儲空間的數(shù)據(jù)分布,通道之間的并發(fā)則由CPU中的軟件驅動層控制,且各線程負責其中一個或多個通道。通常一個通道的存儲空間包含一個或一組flash芯片。本發(fā)明實施例中涉及的數(shù)據(jù)處理包括讀數(shù)據(jù)、寫數(shù)據(jù)或擦除數(shù)據(jù)等。并且,在上述圖1和圖2所示的系統(tǒng)中,不再為各通道的存儲空間設置額外的buffer?;谏鲜鋈我庖环N架構,本發(fā)明所提供的適用于互聯(lián)網(wǎng)存儲系統(tǒng)的存儲控制方法可以如圖3所示,包括以下步驟
步驟301 :CPU在空閑時向存儲控制器發(fā)送擦除請求指示存儲控制器擦除過時的數(shù)據(jù)塊。由于在本發(fā)明實施例中不再為存儲空間設置額外的buffer,因此在本發(fā)明實施例中,不再像現(xiàn)有技術一樣在buffer快滿時觸發(fā)數(shù)據(jù)擦除,而是在CPU空閑時就出發(fā)數(shù)據(jù)擦除的操作,向存儲控制器發(fā)送擦除請求。另外,CPU中的上層軟件將擦除請求分發(fā)至線程,再經(jīng)由軟件驅動層發(fā)送給各存儲通道共用的存儲控制器(圖1中所示情況)或者發(fā)送給線程所負責存儲通道的存儲控制器 (圖2中所示情況)。上層軟件在發(fā)送擦除請求時,會確定存儲空間中過時的數(shù)據(jù)塊,將這些過時的數(shù)據(jù)塊作為擦除對象并在擦除請求中指示。其中過時的數(shù)據(jù)塊可以包括但不限于超過數(shù)據(jù)塊有效時間的數(shù)據(jù)塊、上層軟件確定出的無用的數(shù)據(jù)所在的數(shù)據(jù)塊、臨時數(shù)據(jù)所在的數(shù)據(jù)塊等。步驟302 存儲控制器接收到擦除請求后,擦除其所負責存儲空間中過時的數(shù)據(jù)塊。存儲控制器按照擦除請求的指示,擦除對應的數(shù)據(jù)塊,該指示通常可以為擦除對象的地址。步驟303 存儲控制器接收到寫請求后,根據(jù)地址映射表將數(shù)據(jù)寫入對應的數(shù)據(jù)塊。存儲控制器中維護有其所負責通道的地址映射表,包含邏輯地址和物理地址的映射關系。為了使用wear leveling策略,在步驟302中對各數(shù)據(jù)塊的擦除次數(shù)進行記錄,在本發(fā)明實施例中,可以采用動態(tài)wear leveling策略,也可以采用靜態(tài)wear leveling策略,下面對這兩種策略進行詳細描述。動態(tài) wear leveling 策略當存儲控制器接收到寫請求時,識別其所負責存儲空間中擦除次數(shù)最小的空閑塊作為目標塊,將數(shù)據(jù)寫入目標塊,并修改地址映射表中寫請求的目的邏輯地址所映射的物理地址為該目標塊的物理地址。在本步驟中,采用了一種巧妙且簡單的寫入方式,保證了 wear leveling策略,即并不按照寫請求的目的邏輯地址所映射的物理地址寫入對應的目標塊,而是選擇存儲控制器所負責存儲空間中擦除次數(shù)最小的空閑塊作為目標塊,寫入該目標塊后,對地址映射表進行改寫,即將地址映射表中寫請求的目的邏輯地址所映射的物理地址修改為該目標塊的物理地址。這樣能夠保證每次寫入數(shù)據(jù)時,寫入的都是擦除次數(shù)最小的空閑塊,盡可能地將寫入操作平均分配至各存儲空間,從而最大程度地保證了 wear leveling策略。靜態(tài) wear leveling 策略存儲控制器在空閑時將擦除次數(shù)小于設定第一閾值的數(shù)據(jù)塊與擦除大于設定第二閾值的數(shù)據(jù)塊進行內(nèi)容交換,并將地址映射表中交換的數(shù)據(jù)塊的物理地址進行交換;其中第二閾值大于第一閾值。在存儲空間中往往存在一些數(shù)據(jù)一經(jīng)寫入就長時間不再更改,其所在數(shù)據(jù)塊的擦除次數(shù)很小,且不能夠被做其它使用,為了進行wear leveling,可以將擦除次數(shù)很小的數(shù)據(jù)塊與擦除次數(shù)很大的數(shù)據(jù)塊進行內(nèi)容交換,這樣,擦除次數(shù)很小的數(shù)據(jù)塊就有機會繼續(xù)被使用。在內(nèi)容進行交換之后,需要相應地更新地址映射表,保證數(shù)據(jù)能夠被正確讀取。上述存儲控制系統(tǒng)對于讀數(shù)據(jù)的處理而言,存儲控制器執(zhí)行的操作可以與現(xiàn)有技術相同。更進一步地,存儲控制器在完成上述擦除數(shù)據(jù)、寫數(shù)據(jù)或者讀數(shù)據(jù)之后,向CPU發(fā)起中斷的方式可以是中斷控制器在每一個存儲控制器執(zhí)行完數(shù)據(jù)處理的操作后,分別向 CPU發(fā)起中斷;或者,中斷控制器在所有存儲控制器執(zhí)行完數(shù)據(jù)處理的操作后,統(tǒng)一向CPU 發(fā)起中斷,從而減少中斷次數(shù),降低中斷開銷。以圖2所示架構為例,分別對讀數(shù)據(jù)、寫數(shù)據(jù)和擦除數(shù)據(jù)的過程進行描述,假設存在N個線程,N個通道,及圖2中的M = N,每個線程分別負責一個通道,且在寫數(shù)據(jù)的過程中采用動態(tài)wear leveling策略。CPU的上層軟件將讀數(shù)據(jù)的任務分成N個子任務,分別發(fā)送給N個線程,此處以分成N個子任務為例,也可以分成其他個數(shù)的子任務,分發(fā)給對應個數(shù)的線程。各線程分別發(fā)送讀請求,軟件驅動層將各線程的讀請求分別發(fā)送給各線程所負責通道的存儲控制器;各存儲控制器將讀請求的目的邏輯地址映射為物理地址后,從flash芯片中的該物理地址讀數(shù)據(jù);待所有存儲控制器完成讀數(shù)據(jù)的操作后,中斷控制器向CPU發(fā)送中斷。CPU的上層軟件將寫數(shù)據(jù)的任務分成N個子任務,分別發(fā)送給N個線程,此處以分成N個子任務為例,也可以分成其他個數(shù)的子任務,分發(fā)給對應個數(shù)的線程。各線程分別發(fā)送寫請求,軟件驅動層將各線程的寫請求分別發(fā)送給各線程所負責通道的存儲控制器;各存儲控制器接收到寫請求后,從flash芯片中確定擦除次數(shù)最小的空閑塊作為目標塊,將數(shù)據(jù)寫入目標塊,并修改該通道的地址映射表中寫請求的目的邏輯地址所映射的物理地址為該目標塊的物理地址;待所有存儲控制器完成寫數(shù)據(jù)的操作后,中斷控制器向CPU發(fā)送中斷。CPU的上層軟件將擦除數(shù)據(jù)的任務分成N個子任務,分別發(fā)送給N個線程,此處以分成N個子任務為例,也可以分成其他個數(shù)的子任務,分發(fā)給對應個數(shù)的線程。各線程分別發(fā)送擦除請求,軟件驅動層將各線程的擦除請求分別發(fā)送給各線程所負責通道的存儲控制器;各存儲控制器根據(jù)擦除請求對flash芯片中對應的數(shù)據(jù)塊擦除數(shù)據(jù),并記錄數(shù)據(jù)塊的擦除次數(shù);待所有存儲控制器完成擦除數(shù)據(jù)的操作后,中斷控制器向CPU發(fā)送中斷。上述軟件驅動層在將線程發(fā)送的訪問請求發(fā)送給對應通道時,可以根據(jù)線程與通道的綁定關系,將訪問請求發(fā)送給線程所綁定的通道;也可以在線程發(fā)送訪問請求時,在訪問請求中攜帶通道號,軟件驅動層根據(jù)訪問請求中攜帶的通道號,將訪問請求發(fā)送給對應的通道。下面對上述存儲控制器的結構進行介紹,如圖4所示,該存儲控制器可以包括存儲器文件(RF,Register File)、閃存翻譯層(FTL,F(xiàn)lash Translation Layer)、先入先出存儲器(FIFO)和閃存控制模塊。RF用于記錄接收到的訪問請求,包括訪問請求的源地址和目的地址、訪問類型、數(shù)據(jù)長度等,還可以保存數(shù)據(jù)處理的狀態(tài)信息和異常信息等。其中,訪問請求可以是讀請求、 寫請求或擦除請求等。FTL與RF、DRAM以及FIFO連接,用于進行地址管理,該地址管理包括維護邏輯地址到物理地址的地址映射表,完成訪問請求對應的邏輯地址到物理地址的映射。
上述地址管理還可以包括flash芯片的壞塊管理,這部分與現(xiàn)有技術相同,不再贅述。閃存控制模塊用于根據(jù)FTL進行地址映射結果,對flash芯片進行數(shù)據(jù)處理。
上述FIFO的作用是作時鐘隔離,因為FTL和DRAM運行在較高的時鐘域,而閃存控制模塊運行在較低的時鐘域。為了使用wear leveling策略,在本發(fā)明實施例中,如果訪問請求為擦除請求,F(xiàn)TL 還用于記錄數(shù)據(jù)塊的擦除次數(shù)。采用動態(tài)wear leveling策略時,如果訪問請求為寫請求,F(xiàn)TL會識別所負責存儲空間中擦除次數(shù)最小的空閑塊作為目標塊,將地址映射表中寫請求的目的邏輯地址所映射的物理地址修改為該目標塊的物理地址。上述的空閑塊為沒有數(shù)據(jù)的數(shù)據(jù)塊。上述FTL識別所負責存儲空間中擦除次數(shù)最小的空閑塊,通過改寫地址映射表的方式讓閃存控制模塊將數(shù)據(jù)寫入該擦除次數(shù)最小的空閑塊,從而保證均衡磨損(wear leveling)0具體地,如果接收到的訪問請求為讀數(shù)據(jù),則RF記錄該訪問請求,F(xiàn)TL根據(jù)該訪問請求進行地址映射,閃存控制模塊根據(jù)地址映射的結果,從相應的flash芯片中讀取數(shù)據(jù), 將讀取的數(shù)據(jù)經(jīng)由FIFO傳給FTL,F(xiàn)TL將數(shù)據(jù)送入DRAM,再經(jīng)由總線控制模塊傳給CPU的驅動及讀寫管理裝置。并且,閃存控制模塊在處理完成后,會將處理狀態(tài)通過FIFO傳回FTL, 由FTL將處理狀態(tài)寫入RF。如果接收到的訪問請求為擦除數(shù)據(jù),則RF記錄該訪問請求,F(xiàn)TL根據(jù)該訪問請求進行地址映射,閃存控制模塊根據(jù)地址映射的結果,從相應的flash芯片中擦除數(shù)據(jù),并將處理狀態(tài)通過FIFO傳回FTL,由FTL將處理狀態(tài)寫入RF。另外,F(xiàn)TL會記錄各數(shù)據(jù)塊擦除的次數(shù)。如果接收到的訪問請求為寫數(shù)據(jù),則數(shù)據(jù)經(jīng)總線控制模塊傳到DRAM,RF記錄該訪問請求,F(xiàn)TL識別對應flash芯片中擦除次數(shù)最小的空閑塊作為目標塊,將地址映射表中寫請求的目的邏輯地址所映射的物理地址修改為目標塊的物理地址,并將數(shù)據(jù)從DRAM通過 FIFO傳給閃存控制模塊,閃存控制模塊,根據(jù)地址映射的結果將數(shù)據(jù)寫入目標塊,并在完成寫數(shù)據(jù)后,將處理狀態(tài)通過FIFO傳回FTL,由FTL將處理狀態(tài)寫入RF。上述FTL在地址映射方面可以采用塊級別(block level)的方式,即地址的最小單位為塊級別,這種方式需要的映射表較小。由于一個通道中可能存在多個flash芯片,每個flash芯片中存在多個硅片(die),每個die中存在多個區(qū)域(plane),閃存控制模塊可以在通道中多個plane之間實現(xiàn)數(shù)據(jù)并發(fā),如圖5所示。舉個例子,一個寫數(shù)據(jù)的大小如果是8MB,那么可以寫到4個block中,本發(fā)明實施例中邏輯地址由LB0、LB1、LB2和LB3組成, 可以從4個不同的plane中選出4個block寫入數(shù)據(jù),即選擇dieO中planeO的blockO以 R planel Wblockl,diel 中 planeO WblockO L^^planel 的 blockl,然后將 4 個 block 的物理地址更新到地址映射表中。由于在寫數(shù)據(jù)的過程中需要對擦除最小的空閑塊進行識別,這就需要有一個遍歷各數(shù)據(jù)塊是否為空閑的過程,如果通道的存儲空間較大,則對存儲控制器中FTL的性能壓力也較大。較優(yōu)地,在本發(fā)明中可以選取不超過預設個數(shù)的空閑塊標識為保留區(qū),該預設個數(shù)可以根據(jù)需要進行設置,例如設置為占存儲空間0. 5%的數(shù)據(jù)塊。在選擇目標塊進行數(shù)
11據(jù)寫入時,存儲控制器的FTL從標識為保留區(qū)的空閑塊中選擇擦除次數(shù)最小的數(shù)據(jù)塊,一旦數(shù)據(jù)塊被寫入數(shù)據(jù),則取消該數(shù)據(jù)塊的保留區(qū)標識;有未標識為保留區(qū)的數(shù)據(jù)塊被擦除數(shù)據(jù),如果保留區(qū)的數(shù)據(jù)塊沒有達到預設個數(shù),則將該被擦除數(shù)據(jù)的數(shù)據(jù)塊標識為保留區(qū)。 通過這種方式,F(xiàn)TL僅需要遍歷被標識為保留區(qū)的數(shù)據(jù)塊,從保留區(qū)中識別出擦除次數(shù)最小的空閑塊作為目標塊,顯然提高了存儲控制器中FTL的識別效率,也降低了對FTL的性能壓力。采用靜態(tài)wear leveling時,F(xiàn)TL還會記錄各數(shù)據(jù)塊的擦除次數(shù),在空閑時觸發(fā)閃存控制模塊將擦除次數(shù)小于設定第一閾值的數(shù)據(jù)塊與擦除大于設定第二閾值的數(shù)據(jù)塊進行內(nèi)容交換,并將地址映射表中交換的數(shù)據(jù)塊的物理地址進行交換;其中第二閾值大于第
一閾值。需要說明的是,本發(fā)明所提供的方法不僅適用于現(xiàn)有的網(wǎng)絡存儲設備,同樣適用于其它不包括隨機寫而是順序寫的存儲設備。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應包含在本發(fā)明保護的范圍之內(nèi)。
權利要求
1.一種適用于互聯(lián)網(wǎng)存儲系統(tǒng)的存儲控制方法,其特征在于,該方法包括CPU在空閑時向存儲控制器發(fā)送擦除請求指示存儲控制器擦除過時的數(shù)據(jù)塊;所述存儲控制器接收到擦除請求后,擦除所述存儲控制器所負責存儲空間中過時的數(shù)據(jù)塊;當所述存儲控制器接收到寫請求后,根據(jù)地址映射表將數(shù)據(jù)寫入對應的數(shù)據(jù)塊。
2.根據(jù)權利要求1所述的方法,其特征在于,該方法還包括所述存儲控制器記錄各數(shù)據(jù)塊的擦除次數(shù);所述根據(jù)地址映射表將數(shù)據(jù)寫入對應的數(shù)據(jù)塊具體包括所述存儲控制器識別所述存儲控制器所負責存儲空間中擦除次數(shù)最小的空閑塊作為目標塊,將數(shù)據(jù)寫入所述目標塊, 并修改地址映射表中寫請求的目的邏輯地址所映射的物理地址為所述目標塊的物理地址。
3.根據(jù)權利要求1所述的方法,其特征在于,該方法還包括所述存儲控制器記錄各數(shù)據(jù)塊的擦除次數(shù);所述存儲控制器在空閑時將擦除次數(shù)小于設定第一閾值的數(shù)據(jù)塊與擦除大于設定第二閾值的數(shù)據(jù)塊進行內(nèi)容交換,并將地址映射表中交換的數(shù)據(jù)塊的物理地址進行交換;其中所述第二閾值大于第一閾值。
4.根據(jù)權利要求1所述的方法,其特征在于,所述CPU在空閑時向存儲控制器發(fā)送擦除請求包括所述CPU中的上層軟件將擦除請求分發(fā)至線程,再經(jīng)由軟件驅動層發(fā)送給各存儲通道共用的存儲控制器;或者,CPU中的上層軟件將擦除請求分發(fā)至線程,再經(jīng)由軟件驅動層發(fā)送給各線程所負責存儲通道的存儲控制器,其中每一個存儲通道分別對應一個存儲控制器。
5.根據(jù)權利要求1所述的方法,其特征在于,所述過時的數(shù)據(jù)塊包括超過數(shù)據(jù)塊有效時間的數(shù)據(jù)塊、CPU中的上層軟件確定出的無用的數(shù)據(jù)所在的數(shù)據(jù)塊、臨時數(shù)據(jù)所在的數(shù)據(jù)塊。
6.根據(jù)權利要求1所述的方法,其特征在于,該方法還包括所述存儲控制器接收到讀請求后,根據(jù)地址映射表確定讀請求的目的邏輯地址所映射的物理地址,并從確定的物理地址讀取數(shù)據(jù)。
7.根據(jù)權利要求1至6任一權項所述的方法,其特征在于,該方法還包括中斷控制器在每一個存儲控制器執(zhí)行完數(shù)據(jù)處理后,分別向所述CPU發(fā)起中斷;或者,中斷控制器在所有存儲控制器執(zhí)行完數(shù)據(jù)處理的操作后,統(tǒng)一向所述CPU發(fā)起中斷。
8.根據(jù)權利要求2所述的方法,其特征在于,當需要寫入的數(shù)據(jù)占用多個數(shù)據(jù)塊時,從所述存儲控制器所負責存儲空間的多個plane中分別識別出各plane中擦除次數(shù)最小的空閑塊作為目標塊。
9.根據(jù)權利要求2所述的方法,其特征在于,該方法還包括所述存儲控制器選取不超過預設個數(shù)的空閑塊標識為保留區(qū);所述存儲控制器在識別所述目標塊時,從所負責存儲空間中標識為保留區(qū)的數(shù)據(jù)塊中選擇擦除次數(shù)最小的數(shù)據(jù)塊作為目標塊;所述目標塊被寫入數(shù)據(jù)后,取消該目標塊的保留區(qū)標識;有未標識為保留區(qū)的數(shù)據(jù)塊被擦除數(shù)據(jù),且被標識為保留區(qū)的數(shù)據(jù)塊沒有達到所述預設個數(shù),則將被擦除數(shù)據(jù)的數(shù)據(jù)塊標識為保留區(qū)。
10.一種適用于互聯(lián)網(wǎng)存儲系統(tǒng)的存儲控制系統(tǒng),其特征在于,該存儲控制系統(tǒng)包括 CPU和存儲控制器;所述CPU,用于在空閑時向存儲控制器發(fā)送擦除請求指示存儲控制器擦除過時的數(shù)據(jù)塊;所述存儲控制器,用于接收到擦除請求后,擦除所述存儲控制器所負責存儲空間中過時的數(shù)據(jù)塊;接收到寫請求后,根據(jù)地址映射表將數(shù)據(jù)寫入對應的數(shù)據(jù)塊。
11.根據(jù)權利要求10所述的存儲控制系統(tǒng),其特征在于,所述存儲控制器還用于記錄各數(shù)據(jù)塊的擦除次數(shù),接收到所述寫請求后,識別所述存儲控制器所負責存儲空間中擦除次數(shù)最小的空閑塊作為目標塊,將數(shù)據(jù)寫入所述目標塊,并修改地址映射表中寫請求的目的邏輯地址所映射的物理地址為所述目標塊的物理地址。
12.根據(jù)權利要求10所述的存儲控制系統(tǒng),其特征在于,所述存儲控制器還用于記錄各數(shù)據(jù)塊的擦除次數(shù),在空閑時將擦除次數(shù)小于設定第一閾值的數(shù)據(jù)塊與擦除大于設定第二閾值的數(shù)據(jù)塊進行內(nèi)容交換,并將地址映射表中交換的數(shù)據(jù)塊的物理地址進行交換;其中所述第二閾值大于第一閾值。
13.根據(jù)權利要求10所述的存儲控制系統(tǒng),其特征在于,所述CPU包括上層軟件、一個以上的線程和軟件驅動層;所述上層軟件將擦除請求分發(fā)至所述線程,再經(jīng)由所述軟件驅動層發(fā)送給各存儲通道共用的存儲控制器;或者,所述上層軟件將擦除請求分發(fā)至所述線程,再經(jīng)由所述軟件驅動層發(fā)送給各線程所負責存儲通道的存儲控制器,其中每一個存儲通道分別對應一個存儲控制器。
14.根據(jù)權利要求10所述的存儲控制系統(tǒng),其特征在于,所述過時的數(shù)據(jù)塊包括超過數(shù)據(jù)塊有效時間的數(shù)據(jù)塊、CPU中的上層軟件確定出的無用的數(shù)據(jù)所在的數(shù)據(jù)塊、臨時數(shù)據(jù)所在的數(shù)據(jù)塊。
15.根據(jù)權利要求10所述的存儲控制系統(tǒng),其特征在于,所述存儲控制器,還用于接收到讀請求后,根據(jù)地址映射表確定讀請求的目的邏輯地址所映射的物理地址,并從確定的物理地址讀取數(shù)據(jù)。
16.根據(jù)權利要求10至15任一權項所述的存儲控制系統(tǒng),其特征在于,該系統(tǒng)還包括中斷控制器,用于在每一個存儲控制器執(zhí)行完數(shù)據(jù)處理后,分別向所述CPU發(fā)起中斷; 或者,在所有存儲控制器執(zhí)行完數(shù)據(jù)處理的操作后,統(tǒng)一向所述CPU發(fā)起中斷。
17.根據(jù)權利要求11所述的存儲控制系統(tǒng),其特征在于,當需要寫入的數(shù)據(jù)占用多個數(shù)據(jù)塊時,所述存儲控制器從所負責存儲空間的多個plane中分別識別出各plane中擦除次數(shù)最小的空閑塊作為目標塊。
18.根據(jù)權利要求11所述的存儲控制系統(tǒng),其特征在于,所述存儲控制器,還用于選取不超過預設個數(shù)的空閑塊標識為保留區(qū),在識別所述目標塊時,從所負責存儲空間中標識為保留區(qū)的數(shù)據(jù)塊中選擇擦除次數(shù)最小的數(shù)據(jù)塊作為目標塊;所述目標塊被寫入數(shù)據(jù)后, 取消該目標塊的保留區(qū)標識;有未標識為保留區(qū)的數(shù)據(jù)塊被擦除數(shù)據(jù),且被標識為保留區(qū)的數(shù)據(jù)塊沒有達到所述預設個數(shù),則將被擦除數(shù)據(jù)的數(shù)據(jù)塊標識為保留區(qū)。
19.一種存儲控制器,其特征在于,該存儲控制器包括存儲器文件RF、閃存翻譯層FTL、先入先出存儲器FIFO以及閃存控制模塊;所述RF,用于記錄接收到的訪問請求;所述FTL與所述RF、所述FIFO以及緩存處理數(shù)據(jù)的DRAM連接,用于進行地址管理,所述地址管理包括維護所在存儲通道中邏輯地址到物理地址的地址映射表,完成所述RF所記錄訪問請求的邏輯地址到物理地址的映射;還用于記錄各數(shù)據(jù)塊的擦除次數(shù),當所述訪問請求為寫請求時,識別所述存儲控制器所負責存儲空間中擦除次數(shù)最小的空閑塊作為目標塊,并修改地址映射表中寫請求的目的邏輯地址所映射的物理地址為所述目標塊的物理地址;所述閃存控制模塊,與所述FTL通過所述FIFO連接,用于根據(jù)所述FTL的地址映射結果,按照所述訪問請求進行數(shù)據(jù)處理。
20.根據(jù)權利要求19所述的存儲控制器,其特征在于,所述RF還用于保存數(shù)據(jù)處理的狀態(tài)信息;所述閃存控制模塊,還用于在數(shù)據(jù)處理后,將處理狀態(tài)通過所述FIFO傳回所述FTL,由所述FTL將所述處理狀態(tài)寫入所述RF。
21.根據(jù)權利要求19所述的存儲控制器,其特征在于,所述FTL,還用于在確定需要寫入的數(shù)據(jù)占用多個數(shù)據(jù)塊時,從所述存儲控制器所負責存儲空間的多個plane中分別識別出各plane中擦除次數(shù)最小的空閑塊作為目標塊。
22.根據(jù)權利要求19所述的存儲控制器,其特征在于,選取不超過預設個數(shù)的空閑塊標識為保留區(qū);所述FTL在識別所述目標塊時,從所負責存儲空間中標識為保留區(qū)的數(shù)據(jù)塊中選擇擦除次數(shù)最小的數(shù)據(jù)塊作為目標塊;還用于在所述目標塊被寫入數(shù)據(jù)后,取消該目標塊的保留區(qū)標識;有未標識為保留區(qū)的數(shù)據(jù)塊被擦除數(shù)據(jù),且被標識為保留區(qū)的數(shù)據(jù)塊沒有達到所述預設個數(shù),則將被擦除數(shù)據(jù)的數(shù)據(jù)塊標識為保留區(qū)。
23.一種存儲控制器,其特征在于,該存儲控制器包括存儲器文件RF、閃存翻譯層 FTL、先入先出存儲器FIFO以及閃存控制模塊;所述RF,用于記錄接收到的訪問請求;所述FTL與所述RF、所述FIFO以及緩存處理數(shù)據(jù)的DRAM連接,用于進行地址管理,所述地址管理包括維護所在存儲通道中邏輯地址到物理地址的地址映射表,完成所述RF所記錄訪問請求的邏輯地址到物理地址的映射;還用于記錄各數(shù)據(jù)塊的擦除次數(shù),在空閑時觸發(fā)所述閃存控制模塊將擦除次數(shù)小于設定第一閾值的數(shù)據(jù)塊與擦除大于設定第二閾值的數(shù)據(jù)塊進行內(nèi)容交換,并將地址映射表中交換的數(shù)據(jù)塊的物理地址進行交換;其中所述第二閾值大于第一閾值;所述閃存控制模塊,與所述FTL通過所述FIFO連接,用于根據(jù)所述FTL的地址映射結果,按照所述訪問請求進行數(shù)據(jù)處理。
24.根據(jù)權利要求23所述的存儲控制器,其特征在于,所述RF還用于保存數(shù)據(jù)處理的狀態(tài)信息;所述閃存控制模塊,還用于在數(shù)據(jù)處理后,將處理狀態(tài)通過所述FIFO傳回所述FTL,由所述FTL將所述處理狀態(tài)寫入所述RF。
全文摘要
本發(fā)明提供了一種適用于互聯(lián)網(wǎng)存儲系統(tǒng)的存儲控制方法、系統(tǒng)和裝置,其中方法包括CPU在空閑時向存儲控制器發(fā)送擦除請求指示存儲控制器擦除過時的數(shù)據(jù)塊;所述存儲控制器接收到擦除請求后,擦除所述存儲控制器所負責存儲空間中過時的數(shù)據(jù)塊;當所述存儲控制器接收到寫請求后,根據(jù)地址映射表將數(shù)據(jù)寫入對應的數(shù)據(jù)塊。通過本發(fā)明針對網(wǎng)絡存儲系統(tǒng)沒有隨機寫的特性,通過在CPU空閑的時候啟動擦除過時數(shù)據(jù)塊的操作,無需預留存儲空間作為buffer,降低了設計復雜度和硬件成本。
文檔編號G06F3/06GK102279712SQ20111022895
公開日2011年12月14日 申請日期2011年8月10日 優(yōu)先權日2011年8月10日
發(fā)明者劉斌, 林仕鼎, 歐陽劍, 王勇, 謝廣軍 申請人:北京百度網(wǎng)訊科技有限公司