專利名稱:在多處理器/多線程環境下協調存儲請求的裝置、系統和方法
技術領域:
本發明涉及并行處理,具體地,涉及協調從多處理器或多線程發送到數據存儲設 備的存儲請求。
背景技術:
傳統的數據存儲設備(例如磁盤驅動器、光盤驅動器等)通常作為隨機存取設備 運行以存儲數據。隨機存取通常能夠在同一時間內存取序列中的任意元素。這不同于順序 存取,在順序存取中,數據被順序地存儲且被順序地訪問,從而基于數據的位置,存取時間 顯著不同。例如,用于存儲數據的磁帶就是一種順序存取設備。存取一個數據元素可能耗 費不同的時間,這是由于一個數據元素的位置可能離讀取頭的位置近,而且必須使磁帶前 進或后退才能到達第二個數據元素,因此,存取另一個數據元素可能消耗更多的時間。由于在隨機存取設備中存取每個數據元素的時間需要大約一致,因此,隨機存取 設備(如存儲芯片、磁盤驅動器或固態存儲器)作為隨機存取設備運行。由于數據存取的 可預測性和效率,隨機存取是可取的。一些設備(如存儲芯片)既支持隨機讀取又支持隨 機寫入,隨機寫入通常支持用更新的數據覆蓋數據的功能。一些設備(如閃存)支持隨機 讀取但在數據能夠被寫入區域之前需要擦除存儲器的整個區域(例如擦除模塊或擦除區 域)。通常,文件系統利用初級命令與隨機存取存儲設備通信。文件系統管理數據的位 置。初級命令通常包括命令中的物理地址和數據長度以存儲或訪問數據。隨機存取存儲設 備中的數據通常可以在讀-修改-寫操作中更新,其中在特定地址的數據被讀取、修改,然 后被寫入與其存儲位置相同的位置。通常,數據存儲設備被多個設備訪問。通常文件服務器管理對數據存儲設備的訪 問并協調涉及共有數據的請求。對于典型的隨機存取數據存儲設備而言,一旦文件服務器 提交了存儲請求,文件服務器通常必須等待請求完成,然后才發送另一存儲請求以確保數 據以適當的順序寫入。由于數據存儲設備完成特定的存儲請求需要消耗相對長的時間,因 此處理時間可能被相對地延長。一些數據存儲設備順序地存儲數據,而數據存儲設備的數據存取時間大約一致。 例如,在一些固態存儲設備(如閃存)中,數據被順序地存儲。類似于其他隨機存取設備, 固態存儲設備的數據存取時間完全不一致。使用傳統的文件服務器或其他數據管理系統以為順序存儲設備協調來自不同設備的請求影響性能。例如,在讀-修改-寫操作期間,修正 的數據并不被寫回到同一位置,反而被順序地存儲。當文件服務器管理更新時,文件服務器 必須等待整個更新進程完成,才服務對同一文件或對象的另一數據請求。當元數據(例如 存儲在目錄中的元數據)和映射被鎖定而附加進程完成更新時,其他進程或線程可被鎖定 在外,以阻止訪問元數據。這種更新包括等待順序存儲設備返回數據被順序地存儲的物理 地址。在并行計算環境中,等待數據存儲設備完成存儲請求是無效率的,這是因為并行 處理器可能在等待單線程存儲處理完成的過程中中斷。對于實施基于日志的初級存儲進程 的順序存儲系統而言,需要的是一種允許并行地執行許多線程或進程的最佳完成途徑。
發明內容
從上述討論可知,顯然存在一種需求即使在存儲請求與公共文件或對象有關時, 也允許數據存儲設備交錯地處理存儲請求從而多處理器或多線程能夠并行地完成存儲請 求的不同部分的裝置、系統和方法。有利地是,這種裝置、系統和方法將提升在多處理器、多 線程環境下的性能,同時確保修正的數據基于存儲請求到達的順序反映恰當的更新順序。響應于現有技術的現狀,具體地,響應于現有技術中未被當前可用的并行處理系 統所完全解決的問題和需要,本發明被開發出來。因此,本發明被開發以提供一種用于在多 處理器和多線程之間協調存儲請求的裝置、系統和方法,其克服了現有技術中的上述全部 或大部分缺點。協調存儲請求的裝置具有多個配置為功能性地執行下述必要步驟的模塊協調訪 問單個數據段的兩個存儲請求的服務。在所述的實施方式中,這些模塊包括附加/無效模 塊和重組模塊。附加/無效模塊響應于第一存儲請求的接收生成第一附加數據存儲命令。第一存 儲請求包括用第一數據覆蓋現有數據的請求。現有數據是存儲在數據存儲設備上的數據段 的一部分。該附加/無效模塊響應于第二存儲請求的接收生成第二附加數據存儲命令。第 二存儲請求包括用第二數據覆蓋數據段的現有數據的請求。第一和第二數據至少包括將以 相同的偏移量存儲在數據段內的重疊數據的至少一部分。在第一存儲請求之后接收第二存 儲請求。該附加/無效模塊響應于第一存儲請求通過將數據段的數據標記為無效來更新索 引。標記為無效的數據包括正被第一數據替換的數據。該附加/無效模塊響應于第二存儲 請求通過將數據段的數據標記為無效來更新索引。標記為無效的數據包括正被第二數據替 換的數據。重組模塊基于第一數據更新索引并基于第二數據更新索引。當在基于第二數據更 新索引之前基于第一數據索引更新索引時或在基于第一數據更新索引之前基于第二數據 更新索引時,組織被更新的索引以指示第二數據比第一數據更符合當前情況。附加/無效 模塊阻止對索引的訪問,直到附加/無效模塊已經完成更新索引,并且重組模塊阻止對索 引的訪問,直到重組模塊已經完成更新索引。在一種實施方式中,該裝置包括數據位置更新模塊,用于利用數據存儲設備存儲 第一數據的第一物理位置更新索引。數據位置模塊還利用數據存儲設備存儲第二數據的第 二物理位置更新索引。從數據存儲設備接收數據存儲設備存儲第一和第二數據的物理位置。當在基于第二物理位置更新索引之前基于第一物理位置更新索引時或在基于第一物理 位置更新索引之前基于第二物理位置更新索引時,組織被更新的索引以指示第二物理位置 比第一物理位置更符合當前情況。數據位置更新模塊阻止對索引的訪問,直到數據位置模 塊已經完成更新索引。在另一種實施方式中,附加/無效模塊處理存儲請求發生在重組模塊的處理之 前,并且重組模塊處理存儲請求發生在數據位置模塊的處理之前。在另一種實施方式中,附 加/無效模塊、重組模塊或數據位置更新模塊處理第一存儲請求發生在附加/無效模塊、重 組模塊或數據位置更新模塊處理第二存儲請求之前或之后。在一種實施方式中,在兩個或多個線程內執行附加/無效模塊、重組模塊和數據 位置更新模塊中的每一個的例程,附加/無效模塊、重組模塊和數據位置更新模塊的每個 例程阻止對索引的訪問,直到附加/無效模塊、重組模塊或數據位置更新模塊已經完成更 新索引。在另一種實施方式中,在并行操作的兩個或多個處理器上執行附加/無效模塊、重 組模塊和數據位置更新模塊中的每一個的例程,附加/無效模塊、重組模塊和數據位置更 新模塊的每個例程阻止對索引的訪問,直到附加/無效模塊、重組模塊或數據位置更新模 塊已經完成更新索引。在一種實施方式中,該裝置包括讀取模塊,用于響應于包括讀取請求的存儲請求 讀取數據段的至少一部分。在該實施方式中,該裝置還包括讀取延遲模塊,用于推遲服務所 請求的讀取,直到第一存儲請求由附加/無效模塊、重組模塊和數據位置更新模塊服務。在 又一種實施方式中,在第一存儲請求之后,在第二存儲請求之前,該裝置接收到讀取數據段 的至少一部分的存儲請求,并且讀取延遲模塊推遲服務讀取請求,直到第一和第二存儲請 求都由附加/無效模塊、重組模塊和數據位置更新模塊服務。在一種實施方式中,該裝置包括序列編號模塊,用于將序列號與存儲請求關聯。分 配的序列號表示該裝置接收存儲請求的順序。重組模塊利用分配給第一存儲請求和第二存 儲請求中的每一個的序列號組織索引以指示第二數據比第一數據更符合當前情況。在另一 種實施方式中,組織索引以指示第二數據比第一數據更符合當前情況包括利用第二數據更 新索引的映射到重疊數據的一部分,并且如果重組模塊在基于第一數據更新索引之前基于 第二數據更新索引,則保留到第二數據的映射。在另一種實施方式中,附加/無效模塊接收三個或更多覆蓋數據段的現有數據的 存儲請求,重組模塊基于存儲請求到達的順序利用存儲請求的數據組織索引,而不考慮重 組模塊利用存儲請求的數據更新索引的順序。在另一種實施方式中,索引還被分割為兩個 或多個區域,并且當附加/無效模塊和重組模塊中的一個或多個的額外的例程在服務涉及 第二區域的存儲請求時阻止對索引的第二區域的訪問時,涉及索引的第一區域的存儲請求 被服務。在另一種實施方式中,第一存儲請求發送自第一客戶端,第二存儲請求發送自第二 客戶端。在一種實施方式中,響應于第一存儲請求通過將數據段被替換的數據標記為無效 更新索引還包括標記位圖的一個或多個位。位圖中的位對應于數據存儲設備中由第一數據 和第二數據替換的數據段的數據所駐留的一個或多個位置。在另一種實施方式中,響應于 第一存儲請求通過將數據段被替換的數據標記為無效更新索引還包括暫時地將整個數據 段標記為無效,直到重組模塊基于第一數據和第二數據更新索引,并且隨后更新索引以指示數據段除了被替換的數據之外的數據有效。在又一種實施方式中,響應于第一存儲請求 通過將數據段被替換的數據標記為無效更新索引還包括生成表,該表指示數據段被第一數 據和第二數據替換的部分為無效,并指示數據段未被第一數據和第二數據替換的部分為有 效。在一種實施方式中,在基本上沒有數據的情況下接收第一存儲請求和/或第二 存儲請求。在另一種實施方式中,在基本上沒有數據的情況下將第一附加數據存儲命令 和/或第二附加數據存儲命令發送到數據存儲設備。在另一種實施方式中,存儲請求和附 加數據存儲命令中的至少一個初始化直接存儲器存取(DMA)進程或遠程直接存儲器存取 (RDMA)進程以將數據段的數據轉移到數據存儲設備。本發明也提供了一種系統以協調存儲請求,該系統可由數據存儲設備和控制數據 存儲設備的存儲控制器實施。具體地,在一種實施方式中,存儲控制器包括附加/無效模塊 和重組模塊。附加/無效模塊響應于第一存儲請求的接收生成第一附加數據存儲命令。第一存 儲請求包括用第一數據覆蓋現有數據的請求。現有數據是存儲在數據存儲設備上的數據段 的一部分。該附加/無效模塊響應于第二存儲請求的接收生成第二附加數據存儲命令。第 二存儲請求包括用第二數據覆蓋數據段的現有數據的請求。第一和第二數據至少包括將以 相同的偏移量存儲在數據段內的重疊數據的至少一部分。在第一存儲請求之后接收第二存 儲請求。該附加/無效模塊響應于第一存儲請求通過將數據段的數據標記為無效來更新索 引。標記為無效的數據包括正被第一數據替換的數據。該附加/無效模塊響應于第二存儲 請求通過將數據段的數據標記為無效來更新索引。標記為無效的數據包括正被第二數據替 換的數據。重組模塊基于第一數據更新索引并基于第二數據更新索引。當在基于第二數據更 新索引之前基于第一數據索引更新索引時或在基于第一數據更新索引之前基于第二數據 更新索引時,組織被更新的索引以指示第二數據比第一數據更符合當前情況。附加/無效 模塊阻止對索引的訪問,直到附加/無效模塊已經完成更新索引,并且重組模塊阻止對索 弓I的訪問,直到重組模塊已經完成更新索引。在一種實施方式中,數據存儲設備是固態存儲設備。在另一種實施方式中,第一存 儲請求和第二存儲請求接收自分離的請求設備,其中請求設備可以是客戶端或服務器。在 另一種實施方式中,至少一個請求設備是客戶端,附加/無效模塊和重組模塊獨立于客戶 端運行。在另一種實施方式中,該系統包括服務器,并且存儲控制器位于服務器內。本發明也提供了一種協調存儲請求的方法。在公開的實施方式中,該方法包括執 行上文中相對于所述裝置和系統的功能所必須的步驟。在一種實施方式中,該方法包括響 應于第一存儲請求的接收生成第一附加數據存儲命令,以用第一數據覆蓋存儲在數據存儲 設備上的數據段的現有數據。該方法包括響應于第二存儲請求的接收生成第二附加數據 存儲命令,以包括用第二數據覆蓋數據段的現有數據。第一和第二數據至少包括將以相同 的偏移量存儲在數據段內的重疊數據的至少一部分,在第一存儲請求之后接收第二存儲請 求。該方法包括響應于第一存儲請求通過將數據段的數據標記為無效來更新索引,標 記為無效的數據包括正被第一數據替換的數據。該方法包括響應于第二存儲請求通過將數據段的數據標記為無效來更新索引,標記為無效的數據包括正被第二數據替換的數據。在 一種實施方式中,對索引的訪問被阻止,直到為第一存儲請求或第二存儲請求生成附加數 據存儲命令且通過將數據段的數據標記為無效為第一存儲請求和第二存儲請求中的一個 更新了索引。該方法包括基于第一數據更新索引和基于第二數據更新索引。當在基于第二數據 更新索引之前基于第一數據索引更新索引時或在基于第一數據更新索引之前基于第二數 據更新索引時,組織被更新的索引以指示第二數據比第一數據更符合當前情況。對索引的 訪問被阻止,直到基于第一數據和第二數據中的一個更新索引。本說明書全文所提到的特征、優點或者類似措辭并不意味著可利用本發明實現的 所有的特征和優點應該或本來就包含在本發明的任一單獨的實施方式中。更確切地,涉及 特征和優點的措辭被理解為意味著與實施方式一起描述的特定的特征、優點或者特點包 括在本發明的至少一種實施方式中。因此,在本說明書全文中,關于特征、優點和類似措辭 的討論可(但未必)涉及同一種實施方式。此外,描述的本發明的特征、優點和特點可采用任何合適的方式與一個或多個實 施方式結合。相關領域的技術人員可意識到本發明可在不具備特定實施方式的一個或多個 具體特征或優點的情況下被實施。在其他例子中,可意識到附加特征和優點可出現在某些 實施方式中,而不是在本發明的所有實施方式中都出現。通過下面的說明和附加的權利要求,本發明的這些特征和優點將變得更加充分的 顯而易見,或者可以通過按下文所闡述的本發明的實踐而獲悉。
為了更容易地理解本發明的優點,將參考附圖中示出的具體實例方式詳細說明上 文中簡述的本發明的實施方式。應當理解,這些附圖僅描繪了本發明的典型實施方式,因此 不能將其理解為對本發明的限制,將結合附圖具體且詳細地描述和解釋本發明,附圖中圖1是示出了根據本發明的將存儲請求轉換為附加數據命令的系統的一種實施 方式的示意性框圖;圖2是示出了根據本發明的將存儲請求轉換為附加數據命令的裝置的一種實施 方式的示意性框圖;圖3是示出了根據本發明的將存儲請求轉換為附加數據命令的替換裝置的一種 實施方式的示意性框圖;圖4是示出了根據本發明的將存儲請求轉換為附加數據命令的方法的一種實施 方式的示意性流程圖;圖5是示出了根據本發明的將存儲請求轉換為附加數據命令的另一種方法的一 種實施方式的示意性流程圖;圖6是根據本發明的將存儲請求轉換為附加數據命令的實例的示意性框圖;圖7是根據本發明的用于有效地映射虛擬地址和物理地址的裝置的一種實施方 式的示意性框圖;圖8是根據本發明的用于有效地映射虛擬地址和物理地址的裝置的另一種實施 方式的示意性框圖9是根據本發明的用于有效地映射虛擬地址和物理地址的方法的一種實施方 式的示意性流程圖;圖10是根據本發明的用于有效地映射虛擬地址和物理地址的方法的另一種實施 方式的示意性流程圖;圖11是根據本發明的正向映射和反向映射的實例的示意性框圖;圖12是示出了根據本發明的用于協調存儲請求的裝置的一種實施方式的示意性 框圖;圖13是示出了根據本發明的用于協調存儲請求的裝置的另一種實施方式的示意 性框圖;圖14是示出了根據本發明的用于協調存儲請求的方法的一種實施方式的示意性 流程圖;圖15是示出了根據本發明的用于協調存儲請求的方法的另一種實施方式的示意 性流程圖;圖16A是示出了根據本發明的用于協調存儲請求的裝置的實例的示意性框圖的 第一部分;圖16B是示出了根據本發明的用于協調存儲請求的裝置的實例的示意性框圖的 第二部分;圖16C是示出了根據本發明的用于協調存儲請求的裝置的實例的示意性框圖的
第三部分。
具體實施例方式本說明書全文所提到的“一種實施方式”、“實施方式”或類似的措辭意味著與實施 方式一起描述的特定的特征、結構或特點包括在本發明的至少一種實施方式中。因此,在本 說明書全文中,短語“在一種實施方式中”、“在實施方式中”及類似措辭的出現可(但未必) 涉及同一實施方式。此外,描述的本發明的特征、結構或特點可以以任何合適的方式合并在一種或多 種實施方式中。在下文的說明中,提供了大量的具體細節以全面理解本發明的實施方式,所 述具體細節比如編程、軟件模塊、用戶選擇、網絡事務、數據庫查詢、數據庫結構、硬件模塊、 硬件電路、硬件芯片等等的實例。然而,相關技術領域的技術人員可認識到本發明在可在 不具備一個或多個具體細節的情況下被實施,或者本發明可結合其他方法、組件、材料等實 施。在其他例子中,并沒有顯示或描述公知的結構、材料或操作以使本發明變得清晰。一般而言,此處所包括的示意性流程圖作為邏輯流程圖示出。同樣的,描述的順序 和所標記的步驟表明了所示出的方法的一種實施方式。可以設想在功能上、邏輯上或效果 上與所示方法的一個或多個步驟或其部分相同的其他步驟和方法。此外,所用的格式和符 號是用于解釋方法的邏輯步驟并且不應理解為是對該方法的限制。盡管在流程圖中可使用 不同的箭頭類型和直線類型,但是不應將其理解為對相應方法的限制。事實上,一些箭頭或 其他連接符可用于僅指示方法的邏輯流程。例如,箭頭可指示在所示方法所列舉的步驟之 間不明確的時間階段的等待或監視期。此外,特定方法的順序可以(但未必)嚴格遵照所 示出的相應步驟的順序。
圖1是示出了根據本發明的將存儲請求轉換為附加數據命令并有效地映射物理 地址和虛擬地址的系統100的一種實施方式的示意性框圖。系統100包括存儲設備102,存 儲設備102包括存儲控制器104和數據存儲設備106。存儲設備102位于通過計算機網絡 112連接到一個或多個客戶端110的服務器108內。在一種實施方式中,系統100包括具有存儲控制器104和數據存儲設備106的存 儲設備102。存儲控制器104和數據存儲設備106可被包括在同一箱體中,該同一箱體為存 儲設備102。在另一種實施方式中,存儲控制器104和數據存儲設備106是分離的。存儲控 制器104通常控制對數據存儲設備106的數據存儲訪問。在一種實施方式中,數據存儲設 備106能夠使得對數據存儲設備106上的所有數據的訪問次數基本上相當。例如,數據存 儲設備106可以是固態存儲設備,例如閃存、納米隨機存取存儲器(nano RAM或NRAM)、磁阻 RAM(MRAM)、動態RAM(DRAM)、相變RAM(PRAM)等。數據存儲設備106也以是硬盤驅動器、光 盤(CD)驅動器、光驅動器和類似設備。盡管在圖1中數據存儲設備106被示為單個存儲設備,但數據存儲設備106可以 包括兩個或多個存儲設備。數據存儲設備106可被配置為獨立驅動器冗余陣列(RAID)、磁 盤簇(JBOD)和類似設備。數據存儲設備106可與一個或多個數據存儲設備106(例如固態 存儲器)一起配置為高性能、短期存儲器,也可與一個或多個數據存儲設備106(例如硬盤 驅動器)一起配置為低性能、長期存儲器。在這種實施方式中,存儲控制器104可管理不同 類型的數據存儲設備106。本領域技術人員會意識到其他類型和配置的數據存儲設備106。存儲控制器104可控制一個或多個數據存儲設備106而且可以是RAID控制器、用 于存儲區域網絡(SAN)的控制器等等。存儲控制器104可包括一個或多個子控制器。存儲 控制器104可與數據存儲設備106集成或分離,并且存儲控制器104可以集成在一起或者 是分布式的。例如,存儲控制器104的一部分可以是主控制器,而存儲控制器104其他部分 可以是子控制器或從控制器。主控制器可以是與輪流控制數據存儲設備106的其他子控制 器通信的設備,或者可以是控制從控制器和數據存儲設備106的主控制器。本領域技術人 員會認識到具有其他形式和功能的存儲控制器104。在一種實施方式中,存儲設備102包括在服務器108中。在不同的實施方式中,存 儲控制器104或數據存儲設備106或二者都可位于服務器108的外部。服務器108可連接 到存儲控制器104,或者存儲控制器104可通過系統總線連接到數據存儲設備106,系統總 線例如外圍組件互連快速(PCI-e)總線、串行高級技術附件(串行ΑΤΑ)總線或類似總線。 在另一種實施方式中,固態存儲設備102位于服務器108或存儲設備102外部,并可以通 過通用串行總線(USB)、電氣和電子工程師學會(IEEE) 1394總線(Fireffire)等連接。在 其他實施方式中,存儲設備102連接到服務器108,或者存儲控制器104利用外圍組件互連 (PCI)快速總線使用外部電子或光總線擴展或聯網方案連接到數據存儲設備106,聯網方 案例如以太網、光纖通道、無限帶寬、或PCI快速高級交換(PCIe-AS)及其類似。本領域技 術人員會認識到其他各種可能的連接方法。替換地,服務器108也可以是個人計算機、膝上型計算機、主計算機、工作站、電子 設備等。服務器108可包括客戶端110或通過計算機網絡112連接到客戶端110。系統100 可包括任意數量的計算機、客戶端110、計算機網絡112或其他電子設備,只要系統100能夠 將存儲請求傳輸到存儲設備102。客戶端110可以是運行在服務器108或另一臺計算機或電子設備上的程序。客戶端110也可以是個人計算機、膝上型計算機、主計算機、工作站、電 子設備等。本領域技術人員會認識到能夠將存儲請求發送到存儲設備102的系統100的其 他組件和配置。圖2示出了根據本發明的將存儲請求轉換為附加數據命令的裝置200的一種實施 方式的示意性框圖。裝置200包括存儲請求接收器模塊202、翻譯模塊204和映射模塊206, 下文將描述這些模塊。在圖2中,裝置200被示出為位于存儲控制器104中,但模塊202、 204,206中的全部或部分可位于存儲控制器104的外部而且可分布在系統100的不同組件中。裝置200包括從請求設備接收存儲請求的存儲請求接收器模塊202。在一種實施 方式中,請求設備是服務器108。在另一種實施方式中,請求設備是客戶端110。請求設備 可以是能夠發送存儲請求的任何設備。存儲請求包括將文件或對象的數據段存儲在數據存儲設備106上的請求。存儲請 求可以是對象請求、文件請求、邏輯塊存儲請求及類似請求。存儲請求包括數據段的一個或 多個源參數。源參數包括文件或對象的虛擬地址,數據段的數據來源于所述虛擬地址。通 常,虛擬地址是文件或對象的標識符。虛擬地址可以是連接到存儲設備102的文件系統已 知的文件名、對象名或其他標識符。在邏輯地址與邏輯地址空間和虛擬地址與虛擬地址空間之間做出區別。在此文本 中,虛擬地址空間擬包含間接編址的最大可能范圍。如本文所用的,虛擬地址空間可同時包 括一個或多個虛擬地址空間、一個或多個邏輯地址空間、一個或多個存儲空間、一個或多 個邏輯塊地址空間、一個或多個混合塊地址空間等等。例如,客戶端可以運行多個虛擬操作系統。在這種實施方式中,每個虛擬操作系統 可具有虛擬存儲空間。每一個虛擬存儲空間可以根據設備的虛擬地址空間和虛擬-物理 映射被映射到存儲在存儲設備中的數據。在另一個實例中,若干客戶端中的對象可以以多 對一的關系獨立地映射到相同的存儲數據,該相同的存儲數據稱為具有對客戶端的唯一虛 擬地址的共享數據。盡管此處的實例示出了一對一的關系,但方法、裝置和系統將支持多對 一、一對多、甚至是多對多的虛擬-物理的地址映射。通過支持識別、地址、長度和元數據轉換中的廣泛間接性,虛擬-物理映射方法將 支持稀疏編址(物理地址空間的過量供應)、瘦供給(thin provisioning)、虛擬分區和數 據轉換(例如壓縮、加密)。此處,作為一種約定,虛擬ID唯一地標識在客戶端的虛擬空間內存儲的數據實 體。虛擬地址更具體地編址虛擬實體的數據。例如,虛擬地址可包括虛擬ID和在數據集內 的偏移量。在另一實例中,虛擬地址可包括虛擬ID和虛擬實體內的索引,其中索引可以是 非統一的(例如,長度不同)記錄結構中的記錄。在一種實施方式中,裝置200仿真邏輯塊存儲設備,源參數包括一個或多個邏輯 塊地址,其中,請求設備通過存儲請求請求數據段以將其存儲。在該實施方式中,虛擬地址 可包括邏輯塊地址。例如,如果存儲請求是邏輯塊存儲請求,請求設備可指定數據段將要存 儲在數據存儲設備106中的位置。邏輯塊地址可包括諸如RAID群組號、數據存儲設備標識 符、分區、柱面號、扇區、偏移量等的信息。本領域技術人員會認識到可包括在邏輯塊地址中 的其他元素。
存儲請求可包括將數據段存儲在不止一個位置上的請求,或者存儲請求可包括將 數據段的某些部分存儲在不止一個位置上的請求,從而存儲請求可包括不止一個邏輯塊地 址。當存儲請求包括邏輯塊地址時,存儲請求通常也包括對應于一個或多個邏輯塊地址的 一個或多個偏移量和數據長度。偏移量和數據長度可暗示邏輯塊是否具有固定尺寸。通 常,偏移量是指數據段開始進入文件或對象有多遠,通常從文件或對象的形頭起算。數據長 度通常包括存儲設備將有多大容量被與邏輯塊地址關聯的數據段或數據段的部分占據。通 常,將以可被存儲控制器104和數據存儲設備106識別的一些單位表示偏移量和數據長度。 例如,偏移量和數據長度可以表示為字節、塊、扇區或其他用于分割數據存儲設備106的單 位。本領域技術人員會認識到用于全部或部分數據段的偏移量和數據長度的其他表示方 法。系統100包括將存儲請求翻譯為一條或多條存儲命令的翻譯模塊204,其中至少 一條存儲命令是附加數據存儲命令。每條附加數據存儲命令指令數據存儲設備106將創建 自數據段的數據和一個或多個源參數存儲在一個或多個附加點上。源參數與數據一起存 儲,而且至少一個源參數是虛擬地址。優選地,數據存儲設備106將數據存儲為數據包。數據包包括數據段的數據和數 據包包頭。在一種實施方式中,數據包包頭包括源參數。在另一種實施方式中,源參數與數 據同時存儲。例如,數據可順序地存儲在數據存儲設備的一個位置上的附加點中,而源參數 同時順序地存儲在數據存儲設備中的另一位置中。在該實施方式中,源參數和數據存儲的 順序可用于在讀操作或數據和源參數被檢索的其他操作期間配對數據和源參數。在一種實施方式中,數據存儲設備106通過下述操作順序地存儲數據(或數據 包)將數據存儲在頁、分區或其他指定區域中;將附加點移動到緊隨先前存儲的數據末端 的下一個可用地址;將數據存儲在附加點,再次將附加點移動到緊隨先前存儲的數據末端 的下一個可用地址等等。數據存儲在頁、分區等中,直到頁或分區滿為止,然后附加點移動, 數據存儲在另一頁、分區等等。附加點可以響應于具體請求由存儲設備102獨立地移動。順序存儲數據對于固態存儲設備來說是尤其有益的,這是因為其甚至允許分布式 的數據以防止出現比其他地址寫入更頻繁的熱點或熱地址。由于順序存儲數據省去了搜 尋時間、省去了讀-修改-寫操作和相關擦除操作并由此增加了固態存儲設備的數據可靠 性和有效壽命,因此,順序存儲數據對于固態存儲設備來說是尤其有益。由于常規固態存儲 設備對存儲在固態存儲設備中任意位置的數據的讀取訪問時間基本上相同,固態存儲設備 中的順序存儲也通常不會不利地影響讀取訪問時間。這種特性允許數據存儲設備106仿真 隨機存取設備以有效地消除由于寫入搜尋次數而產生的恢復時間,并增加了固態存儲設備 106的可靠性和有效壽命,而不會不利地影響讀取性能。順序存儲對于數據存儲設備106也可具有其他好處。順序存儲相對于存取時間 的益處在下述文獻中有全面的描述題為"Apparatus, System, and Method for Managing Commands of Solid-State Storage Using Bank Interleave" W ^ H # ^lJ Φ it ^ 11/952,095 ;禾口題為“Apparatus, System, and Method for Storage Space Recovery In Solid-State Storage”的美國專利申請號11/952,101 (下文中的“存儲空間恢復申請”), 兩項申請均由David Flyrm等人于2007年12月6日提交,通過引用將所述文獻并入本文。—個明顯益處是通過順序地存儲數據以及將源參數與數據一起(在包頭或同時)存儲,數據存儲設備106成為了日志存儲設備。通常,日志存儲設備記錄數據存儲的序 列或順序,從而如果第一數據包在第二數據包之后存儲,這種存儲順序是已知的并且可以 是確定的。在一種實施方式中,將要存儲數據的附加點獨立于環境。鑒于數據被順序地存儲, 附加點可由存儲設備保持,從而與存儲請求一起接收的數據可以存儲在數據存儲日志中的 下一個可用的物理地址。對于該附加點來說,沒有外部環境。這意味著,數據并不根據與客 戶端的明確或隱藏關系存儲在設備的不同物理區域中。例如,第一客戶端可利用第一分區 訪問設備,而第二客戶端利用第二分區訪問設備。在虛擬編址方案中,這些分區是嚴格的邏 輯構造。在兩個不同的分區中用于兩個客戶端的數據仍然被順序地附加。這樣,設備不限 制開放文件的數量,并由此不限制能夠同時訪問設備的客戶端的數量。額外益處是存儲空 間的使用效率最優,而且自然地支持提供增加容量使用率(如瘦供給)的存儲方法。通常,附加點被設置為緊隨先前存儲的數據或數據包之后的地址,但在其他實施 方式中,附加點可以設置在頁、擦除塊、分區等的起始地址上,可以設置在緊隨不可用地址 的塊之后,等等。在一種實施方式中,數據存儲設備106保持附加點的地址,翻譯模塊204 僅創建指令數據存儲設備106將數據存儲在附加點上的附加數據存儲命令。一旦存儲了數 據,數據存儲設備106然后向映射模塊206或另一設備或模塊報告數據存儲的物理地址。在 另一種實施方式中,翻譯模塊204得知或保持附加點在數據存儲設備106中的物理地址并 且利用附加點的物理地址創建附加數據存儲命令。在一種實施方式中,表示在當前擦除區域被寫滿之后將要被寫入的下一擦除區域 (或擦除塊)的附加點或擦除區域指針可預先排隊且由數據存儲設備106或翻譯模塊204 從隊列中取出。在另一種實施方式中,附加點(擦除區域指針)根據設定的模式從子區域 移動到子區域。設定的模式可包括區域序列信息。附加數據存儲命令通常是將數據存儲在附加點的命令。數據創建自數據段,通常, 數據段的數據跨越數據段。翻譯模塊204可創建一個或多個附加數據存儲命令。例如,如 果數據段分解而且數據的不止一個部分存儲在非連續位置,可能會需要不止一個的附加數 據存儲命令。在另一種實施方式中,單個附加數據存儲命令能夠將數據段存儲在多個、非連 續位置。數據段的數據可來自不同的源。在一種實施方式中,數據是來自新的先前并沒有 存儲在數據存儲設備106上的文件的數據。在另一種實施方式中,數據段的數據已從數據 存儲設備106中讀取,而且已在將數據再次作為數據包存儲在數據存儲設備106中之前被 修正。在另一種實施方式中,數據段的數據來自在存儲恢復(垃圾收集)操作中恢復的另 一擦除區域(例如擦除塊)、頁、分區等。在該實施方式中,數據可以是在恢復擦除區域以用 于將來的數據存儲之前從選定的擦除區域移動而來的有效數據。在另一種實施方式中,數 據是索引數據或映射數據,索引數據或映射數據被存儲用來保護索引或映射。本領域技術 人員會認識到可位于由存儲請求接收器模塊202接收的數據段中的其他數據。在不同的實施方式中,翻譯模塊204創建與存儲請求有關的其他命令。例如,翻譯 模塊204可創建集附加點命令、讀取命令、擦除命令、復位命令、移動命令、同步命令、清洗 命令、讀取控制登記命令、修正控制登記命令、程序頁命令、在擦除塊上指令的擦除命令、轉 移命令列表命令、請求狀態命令及類似命令。通常,其他命令增補附加數據存儲命令以服務存儲請求。本領域技術人員會認識到其他可以由翻譯模塊204創建以服務存儲請求的相關 命令和命令序列。在一種實施方式中,存儲請求接收器模塊202所接收的存儲請求是在基本上沒有 數據的情況下接收的。在這種情況下,存儲請求是請求轉移數據的請求,并且實質上不包括 數據。在另一種實施方式中,附加數據存儲命令在基本上沒有數據的情況下被傳輸到數據 存儲設備106。在這種情況下,附加數據存儲命令是轉移數據的命令,并且實質上不包括數 據。在又一種實施方式中,源參數包括主機或客戶端110內的一個或多個物理存儲地址,作 為存儲請求的結果,數據段從該物理存儲地址被讀取。在這種實施方式中,翻譯模塊204創 建的存儲請求或命令(例如附加數據存儲命令)初始化或請求直接存儲器存取(DMA)或遠 程直接存儲器存取(RDMA)進程以將數據段的數據轉移到數據存儲設備106。例如,DMA進 程可由附加數據存儲命令初始化為從客戶端110到數據存儲設備106內的某個位置的DMA 數據。本領域技術人員會意識到初始化或請求DMA或RDMA進程的其他方法。在典型的DMA或RDMA進程中,數據存儲設備106在寫入操作中從主機的存儲器中 取出數據并在讀取操作中將數據推入主機。這樣做是有利的,因為主機不需要知道數據將 要被存儲在數據存儲設備10的哪個位置。主機可以僅告知存儲設備102取出將要被寫入 的數據的位置或者數據將要被存儲以供讀取的位置。裝置200包括映射模塊206,映射模塊206將數據段的一個或多個源參數映射到數 據存儲設備106中的一個或多個位置,其中數據存儲設備106附加了數據段的數據和源參 數。源參數可包括與數據段、設備標識符、分區標識符、數據段的一個或多個數據包的長度、 存儲請求之前或之后數據段在主機的存儲器中所處的一個或多個存儲位置、一個或多個存 儲位置中的一個或多個長度的數據、數據段的屬性、數據段的元數據、數據段的控制參數等 相關聯的虛擬標識符。有利地,數據段的源參數到存儲數據段的數據的物理位置之間的映射允許裝置 200利用數據存儲設備106仿真隨機存取設備,數據在數據存儲設備106順序地存儲。這 樣是有利的,因為具有裝置200的存儲設備102或存儲控制器104能夠連接成隨機存取設 備并且能夠接收對象請求、文件請求和邏輯塊存儲請求,而不會對這些請求予以區分。裝置 200平等地處理來自不同請求的數據,即實質上以與虛擬地址相同的方式映射在存儲請求 中接收到的邏輯塊地址。換言之,在邏輯塊存儲請求中接收的邏輯塊地址、數據長度等可以 成為將要被映射到數據請求的數據在數據存儲設備106中的存儲位置的物理地址的虛擬 地址。圖3是示出了根據本發明的將存儲請求轉換為附加數據命令的替換裝置300的一 種實施方式的示意性框圖。裝置300包括存儲請求接收器模塊202、翻譯模塊204和映射模 塊206,這些模塊基本上類似于上文中相對于圖2的裝置200描述的模塊。裝置300包括存 儲響應接收器模塊302、響應傳輸模塊304、壓縮模塊306、索引重建模塊308、命令重新排序 模塊310、請求重新排序模塊312和垃圾收集模塊314,下文將描述這些模塊。裝置300在圖 3中示為位于存儲控制器104中,但模塊202、204、206、302-314中的一部分可以位于存儲 控制器104的外部而且可分布在系統100的不同元件中。此外,裝置300的模塊202-206、 302-314可獨立于客戶端110運行。在一種實施方式中,裝置300包括從數據存儲設備106接收一個或多個存儲命令響應的存儲響應接收器模塊302。存儲命令響應包括數據存儲設備106附加數據段的數據 的一個或多個位置。在這種實施方式中,數據存儲設備106存儲數據的位置對于裝置300 來說可以是未知的,直到數據存儲設備106響應并指示數據附加的位置。當直到數據存儲 設備106存儲數據之后數據存儲設備106附加數據的物理位置才是已知的時,映射模塊206 從數據存儲設備106(通常來自于一個或多個存儲命令響應)接收數據存儲設備106附加 數據段的數據的一個或多個位置。在另一種實施方式中,如上所述,翻譯模塊204跟蹤或管 理數據段的數據存儲的物理地址,映射模塊206可從翻譯模塊204接收數據存儲的位置的 物理地址。在另一種實施方式中,裝置300包括將存儲請求響應發到請求設備的響應傳輸模 塊304。存儲請求響應包括關于存儲請求的執行的信息。例如,存儲請求響應可指示存儲請 求已成功執行或其他狀態信息。在另一種實施方式中,存儲請求響應包括指示數據和相關 聯的源參數所存儲的位置。如果裝置300正在仿真隨機存取設備,這種實施方式可以是不 可取的。在一種實施方式中,響應傳輸模塊304在存儲響應接收器模塊302接收存儲命令 響應之后發送存儲請求響應,該存儲命令響應指示數據段的所有數據和相關聯的源參數已 成功存儲在數據存儲設備106上。在另一種實施方式中,響應傳輸模塊304獨立于存儲命 令響應的接收而發送存儲請求響應。本領域技術人員會意識到在存儲請求中發送的其他信 息和發送響應的時機。在一種實施方式中,裝置300包括在存儲在數據存儲設備106上之前壓縮附加數 據存儲命令的數據以形成數據的壓縮模塊306。通常,壓縮模塊306改變數據段的部分數據 (或數據包)的數據長度。這影響了數據存儲的位置和后續的附加點。在這種情況下,每 個附加點可以是未知的,直到壓縮之后。當使用壓縮時,數據存儲設備106或壓縮模塊306 下游的一些模塊通常跟蹤附加點和數據存儲設備106上的數據的物理位置,并且等待直到 數據被壓縮以確定數據(或數據包)的一部分和后續的附加點的數據長度。一旦得知附加 點且壓縮了數據,數據長度和位置(可以是物理地址的形式)可以被回報給映射模塊206。 在一種實施方式中,壓縮模塊306將壓縮信息與所壓縮的數據一起存儲,通常存儲在用于 數據的數據包頭中。本領域技術人員會認識到在數據存儲設備106存儲之前的壓縮的其他 特點和結果。在另一種實施方式中,裝置300包括索引重建模塊308,索引重建模塊308利用一 個或多個源參數和數據段的數據在數據存儲設備106上的物理位置重建映射模塊206為 數據段創建的映射。為了提升存取速度,索引通常存儲在快速、非易失性存儲器中(例如 DRAM),快速、非易失性存儲器容易由于電力故障、系統復位等丟失。將源參數與數據一起存 儲在順序存儲設備在順序日志內創建了非易失性數據記錄,索引重建模塊308利用順序日 志重新創建源參數和物理地址以及數據長度之間的索引映射。源參數可以存儲在包頭、數據包內的特定位置或者存儲在數據包的尾端。通常,源 參數存儲在數據包的包頭中。數據長度通常存儲在數據包頭內,從而如果索引或映射不可 用,也可以順序地搜索數據。在一種實施方式中,索引重建模塊308在數據存儲設備106的 整個區域(例如頁或擦除塊)中跟蹤,以重建包括用于數據段的映射的索引。有利地是,數據在數據存儲設備106上的物理存儲位置和與數據一起存儲的源參 數包括主要的虛擬-物理映射。映射模塊206所創建的映射包括次要虛擬-物理。次要虛擬-物理映射通常存儲在RAM中,從而如果由于失去電力、發生故障或者其他原因,映射模 塊206所創建的映射失效時,主要虛擬-物理映射可用于重建次要虛擬-物理映射。例如,索引重建模塊308在數據存儲設備106中查看位于數據的頁的起始處的數 據包頭。索引重建模塊308讀取第一數據包的物理地址,然后讀取包頭中的源參數(包括 數據長度)。然后,索引重建模塊308將數據包中的源參數映射到數據包的物理地址和數據 長度。索引重建模塊308隨后利用數據長度移動到下一數據包。索引重建模塊308然后重 復重建在頁中的所有數據包中跟蹤的進程以構建次要虛擬-物理映射。因此,數據存儲設 備106是可用于重建索引的順序日志,該索引包括物理地址和源參數(例如虛擬標識符、偏 移量、邏輯塊地址、源物理長度等)之間的映射。在一種實施方式中,索引被周期性地檢查,或者在特定的時間點或以特定的狀態 存儲在非易失性存儲器中。每頁何時被數據填充的順序由帶內保持,并且該順序與檢查點 相互聯系。如果索引不可用,對應于最近的檢查點的最近索引可被檢索。隨后,可通過重放 始于在檢查點之后保存數據包的位置的日志來將索引提到當前。索引重建模塊308可以通 過下述方法同步從存儲在檢查點之后的數據包到最新存儲的數據包順序地在數據包中跟 蹤以將索引更新到當前狀態。有利地是,索引重建模塊308允許有效和快速地恢復被檢查 的索引。在一種實施方式中,裝置300包括用于修正兩個或多個未完成的附加數據存儲命 令的執行序列的命令重新排序模塊310。命令重新排序模塊310以一種更有效的方式有利 于序列命令。在一種實施方式中,讀取命令可被推遲,直到同一數據段的寫入命令完成。在 另一種實施方式中,支持多通道的存儲設備102可允許當第一通道繁忙時其預定的命令推 遲,并允許其他通道的其他命令繼續執行,直到第一通道可用。在另一種實施方式中,當存 儲請求接收器模塊202接收兩個或多個存儲請求時,裝置300包括重新排列服務存儲請求 的順序的請求重新排序模塊312。命令重新排序模塊310和請求重新排序模塊312以一種 更有效的方式有利于序列命令和請求。在另一種實施方式中,裝置300包括垃圾收集模塊314,垃圾收集模塊314在將存 儲區域返回給數據存儲設備106的可用空間的池以用于后續的數據存儲之前,從數據存儲 設備106的被標識為恢復的存儲區域移動有效數據,并從存儲區域中擦除無效數據。在該 實施方式中,映射模塊206將數據存儲設備106中的一個或多個位置的有效數據的源參數 的映射更新為數據存儲設備106附加有效數據和關聯的源參數的新位置。在一種實施方式 中,可按與其他存儲請求相同的方式從選定為恢復的區域中移動有效數據。圖4是示出了根據本發明的將存儲請求轉換為附加數據命令的方法400的一種實 施方式的示意性流程圖。方法400開始,在步驟402,存儲請求接收器模塊202從請求設備 (例如客戶端110或服務器108)接收存儲請求。存儲請求包括將文件或對象的數據段存儲 在數據存儲設備106上的請求。存儲請求可包括一個或多個用于數據段的源參數,數據段 至少包括一個或多個邏輯塊地址(在該地址處,存儲請求請求存儲數據段)和一個或多個 相應于一個或多個邏輯塊地址的數據長度。在步驟404,翻譯模塊204將存儲請求翻譯為一條或多條存儲命令。至少一條存儲 命令是附加數據存儲命令。每條附加數據存儲命令指令數據存儲設備106將數據段的數據 存儲在一個或多個附加點上。附加點是數據存儲設備106中的位置,其是數據存儲設備106上最新存儲的數據段之后的下一個地址。如果翻譯模塊204將數據段分割為不止一個段, 則通常不止一個數據附加命令被創建。如果源自數據段的數據不適于頁、擦除塊等的末端 的附加點,這樣做可能是需要的。第二附加點可被設置在另一頁、擦除塊等的起始位置處。在步驟406,映射模塊206將數據段的一個或多個源參數映射為數據存儲設備106 的一個或多個位置,在該位置處,數據存儲設備106附加數據段的數據,方法400結束。通 常,映射是允許將來存取數據的索引的一部分。通過將數據的物理位置和數據長度映射到 源參數,裝置200能夠仿真隨機存取設備,同時將數據順序地存儲在數據存儲設備106上。圖5是示出了根據本發明的將存儲請求轉換為附加數據命令的另一種方法500的 一種實施方式的示意性流程圖。方法500開始,在步驟502,存儲請求接收器模塊202從請 求設備(例如客戶端110或服務器108)接收存儲請求。在步驟504,翻譯模塊204將存儲 請求翻譯為一條或多條存儲命令,其中至少一條存儲命令是附加數據存儲命令。同樣地,每 條附加數據存儲命令指令數據存儲設備106將數據段的數據存儲在一個或多個附加點上。在步驟506,壓縮模塊306將關于數據段的一條或多條附加數據存儲命令的數據 壓縮成壓縮數據,并且在步驟508,數據存儲設備106響應于附加數據存儲命令存儲壓縮數 據。在步驟510,存儲響應接收器模塊302從數據存儲設備106接收一個或多個存儲命令 響應。存儲命令響應包括數據存儲設備106附加數據段的數據的一個或多個位置。在步驟 512,基于作為存儲命令響應的一部分接收的存儲位置,映射模塊206將數據段的一個或多 個源參數映射到數據存儲設備106中的一個或多個位置,在這些位置,數據存儲設備106附 加數據段的數據,方法500結束。通常,壓縮數據使得在存儲數據之后將源參數映射到存儲 位置成為必須,這是因為壓縮通常會改變數據的數據長度。圖6是根據本發明的將存儲請求轉換為附加數據命令的實例600的示意性框圖。 實例600僅展示了用于將存儲請求轉換為附加數據存儲命令的裝置200、裝置300的一種 實施方式,并不試圖以任何方式成為限制。本領域技術人員會認識到,有不同于圖6的實例 600的許多方法實施本發明。實例600可表示請求設備指令存儲設備102將數據段存儲在特定物理地址處的邏 輯塊存儲請求。請求設備(如客戶端110或服務器10 初始化存儲請求以從源數據存儲 設備寫入數據。來自源數據存儲設備的數據602的一部分與存儲在數據602的一部分內的 數據段606 —起被描述。在這種情況下,數據段606擬被存儲于存儲設備102的扇區1、偏 移量5和數據長度為8的物理地址上。在一種實施方式中,請求設備制定存儲請求608并 將存儲請求608發送到存儲設備102,存儲請求608包括具有源參數的包頭,源參數包括邏 輯塊地址和數據長度。為簡便起見,實例600假設數據段606的數據未被壓縮。在實例600中,數據段 606的數據長度為8,并且在當前頁616內有用于數據包的空間,用于長度為5的數據包的 數據正在被存儲在當前頁616中。在這個例子中,翻譯模塊204確定數據段606不適于當 前數據所存儲的當前頁616的末端并從數據段606創建兩條附加數據存儲命令614以存儲 兩個數據包。數據1 610和數據2 612。數據當前所存儲的頁616包括有效數據618。在其他頁中可包括有效或無效數據。 一條附加數據存儲命令614將數據1 610存儲在附加點1 620中,附加點1 620緊隨數據 最新存儲的位置622。數據包數據1 610隨后存儲在當前頁616的末端,如擬4所示。
第二附加數據存儲命令614將數據2 612存儲在數據將要被存儲的下一頁6 上。在一種實施方式中,下一頁擬6位于不同于數據1 610所存儲的頁616的擦除塊中。 在這種實施方式中,存儲在附加點1 620的數據可流到下一頁,而不需要必須在下一頁的 起始處設置新的附加點,除非下一頁擬6位于另一擦除塊中。在另一種實施方式中,下一頁 626是鄰近數據1 610所存儲的頁616的頁,或者在某種程序上是邏輯上的下一頁,但是新 的附加點2 630需要位于下一頁626的起始處。本領域技術人員會認識到何時第二附加點 630被要求繼續存儲數據。下一頁擬6不包括有效數據628,這是由于下一頁626已被擦除 或存儲空間恢復進程已經確定下一頁626中不再有有效數據。第二附加數據存儲命令614 將數據包數據2 612存儲在附加點2 630上,如632所示。該實例600表明了數據段606分離的情況,數據段606分離是由于創建自數據段 606的數據包610、612落在了頁616的邊界上,在其他情況下,數據段606的數據可存儲在 一起或者可以分離為三個或更多個數據包。在其他情況下,壓縮模塊306將數據段606的 數據壓縮以形成一個或多個數據包610、612。圖7是根據本發明的用于有效地映射虛擬地址和物理地址的裝置700的一種實施 方式的示意性框圖。裝置700包括正向映射模塊702、反向映射模塊704和存儲空間恢復 模塊706,下文將描述這些模塊。正向映射模塊702、反向映射模塊704和存儲空間恢復模 塊706中的一個或多個的至少一部分位于下述設備的一個或多個中發送存儲請求的請求 設備、數據存儲設備106、存儲控制器104、以及與請求設備、數據存儲設備106和存儲控制 器104分離的計算設備。在一種實施方式中,正向映射模塊702和反向映射模塊704與映射模塊206結合 起來工作。正向映射模塊702和反向映射模塊704可以是映射模塊206的一部分,或者與 映射模塊206分離但一起工作。裝置700包括使用正向映射以識別數據段的數據的一個或多個物理地址的正向 映射模塊702。通過數據段的一個或多個虛擬地址識別物理地址,虛擬地址在發送到數據存 儲設備106的存儲請求中識別。例如,存儲請求可包括讀取存儲在數據存儲設備106中的 數據的請求。讀取數據的存儲請求包括與存儲在數據存儲設備106上的數據相關聯的虛擬 地址或虛擬標識符。讀取請求可包括文件的虛擬地址,數據段源于該文件,這可以解釋為, 讀取請求是讀取與虛擬地址相關聯的整個數據段的請求。在另一實例中,讀取請求包括讀取請求中所請求的數據的虛擬地址以及偏移量和 虛擬地址。例如,如果數據段是20個塊,讀取請求可包括16塊的偏移量(即,始于20個塊 中的第16個塊)和5的數據長度,從而讀取請求讀取數據段的最后5個塊。讀取請求也可 在請求中包括偏移量和數據長度以讀取整個數據段或從數據段的起始處讀取。其他請求也 可包括在存儲請求中,例如狀態請求。存儲請求的其他類型和其他形式也被考慮在本發明 的范圍內并且能夠被本領域技術人員所認識到。裝置700包括正向映射,該正向映射將一個或多個虛擬地址映射到存儲在數據存 儲設備106中的數據的一個或多個物理地址。虛擬地址對應于與存儲在數據存儲設備106 中的數據有關的一個或多個數據段。通常,一個或多個虛擬地址包括虛擬地址空間內的離 散地址,其中虛擬地址通常稀疏地位于虛擬地址空間。對于數據段的虛擬地址來說,數據長 度信息也可與虛擬地址關聯且也可以包括在正向映射中。通常,數據長度對應于數據段的大小。結合虛擬地址和與虛擬地址有關的數據長度信息可用于幫助讀取數據段內的特定部 分。通常,用于識別存儲的數據的虛擬地址表示可能位于名字空間或可能的虛擬地址 范圍內的極少量虛擬地址。搜索這種稀疏構成的空間可能是繁瑣的。出于這個原因,正向 映射通常是有助于快速遍歷正向映射以基于虛擬地址找出物理地址的數據結構。例如,正 向映射可包括B-樹、內容可尋址存儲器(CAM)、二進制樹、哈希表或有助于快速搜索稀疏構 成的空間或范圍的其他數據結構。通過使用快速搜索稀疏構成的名字空間的正向映射,裝 置700提供了從虛擬地址確定一個或多個物理地址的有效方式。當正向映射可被優化(或至少被設計)以快速地從虛擬地址確定物理地址時,通 常,不必為了在數據存儲設備106的特定區域內定位所有數據而優化正向。出于該原因, 裝置700包括使用反向映射以從物理地址確定數據段的虛擬地址的反向映射模塊704。反 向映射用于將一個或多個物理地址映射到一個或多個虛擬地址,并且能夠被反向映射模塊 704或其他進程使用以從物理地址確定虛擬地址。反向映射是有利地將數據存儲設備106 映射到擦除區域,從而反向映射的一部分跨越數據存儲設備106的在存儲空間恢復操作中 一起擦除的擦除區域。存儲空間恢復操作(或垃圾收集操作)恢復擦除區域以用于進一步 的數據存儲。通過利用擦除區域組織反向映射,存儲空間恢復模塊706能夠有效地識別用 于存儲空間恢復的擦除區域并識別有效數據。下文將更詳細地描述存儲空間恢復模塊706。反向映射中的物理地址與正向映射關聯或鏈接到正向映射,從而如果在正向映射 中虛擬地址A映射到物理地址B,則在反向映射中,物理地址B映射到虛擬地址A。在一種 實施方式中,正向映射包括鏈接到反向映射中的條目的物理地址。在另一種實施方式中,正 向映射包括指向反向映射中的物理地址的指針或一些其他的中間鏈表、表等。本領域技術 人員會認識到將物理地址鏈接到正向映射和反向映射的其他方法。在一種實施方式中,反向映射包括一個或多個源參數。源參數通常與存儲請求一 起被接收并至少包括一個或多個虛擬地址。源參數也可包括與數據段的數據相關聯的數據 長度,數據段與存儲請求一起被接收。在另一種實施方式中,反向映射不包括虛擬地址或數 據長度形式的源參數,且源參數與存儲在數據存儲設備106上的數據段的數據一起存儲。 在該實施方式中,源參數可從反向映射中的引到與數據一起存儲的源參數的物理地址被找 出。換言之,反向映射可使用主要虛擬-物理映射,而不使用次要邏輯-物理映射。將源參數與數據一起存儲在順序存儲設備中是有利的,這是因為存儲在數據存儲 設備106中的數據成為了能夠被回放以重建正向和反向映射的日志。這是由于以下事實 與存儲請求被接收的時間相匹配的順序存儲數據,并由此,源數據執行雙重職能;重建正向 和反向映射,并從物理地址確定虛擬地址。裝置700包括存儲空間恢復模塊706,存儲空間恢復模塊706在恢復擦除區域的操 作之前利用反向映射識別擦除區域中的有效數據。在恢復操作之前,所識別的有效數據被 移動到另一個擦除區域。通過利用擦除區域組織反向映射,存儲空間恢復模塊706能夠掃 描反向映射中對應于擦除區域的那部分以快速地識別有效數據或確定擦除區域中的有效 數據的數量。擦除區域可包括一起擦除的擦除塊、固定數量的頁等。可組織反向映射,從而 一旦掃描到特定擦除區域的條目,就得知了擦除區域的內容。通過利用擦除區域組織反向映射,相比于搜索B-樹、二進制樹或其他用于虛擬-物理地址搜索的類似結構,搜索擦除區域的內容更加有效。搜索B-樹、二進制樹等形 式的正向映射是繁瑣的,這是因為B-樹、二進制樹等必須頻繁地被全面搜索以識別擦除區 域的所有有效數據。反向可包括表、數據庫或其他允許進入擦除區域的將要被存儲的數據 以有助于擦除區域的數據的操作的結構。在一種實施方式中,正向映射和反向映射獨立于組織數據用于發送存儲請求的請 求設備的文件結構、名字空間、目錄等,請求設備例如運行在服務器108或客戶端110中的 文件服務器或客戶端。通過維持與請求設備的任何文件服務器分離的正向映射和反向映 射,裝置700能夠仿真像存儲請求所請求的那樣存儲數據的隨機存取、邏輯塊存儲設備。正向映射和反向映射的使用允許裝置700看起來像是將數據存儲在存儲請求所 指令的特定位置,而實際上將數據順序地存儲在數據存儲設備106。有利地是,裝置700通 過仿真邏輯塊存儲而實際上順序地存儲數據,克服了隨機存儲對固態存儲器(例如閃存) 所產生的問題。裝置700也允許靈活性,這是由于一個存儲請求可以是邏輯塊存儲請求,而 第二存儲請求可以是對象存儲請求、文件存儲請求等。保持請求設備對文件結構、名字空間 等的獨立性在裝置700可以服務的存儲請求的類型方面提供了極大的靈活性。圖8是根據本發明的用于有效地映射虛擬地址和物理地址的裝置800的另一種實 施方式的示意性框圖。裝置800包括正向映射模塊702、反向映射模塊704和存儲空間恢復 模塊706,這些模塊與上文中相對于圖7的裝置200描述的基本相同。裝置800還包括映射 重建模塊802、檢查點模塊804、映射同步模塊806、無效模塊808和映射更新模塊810,將在 下文中描述這些模塊。裝置800包括映射重建模塊802,映射重建模塊802利用與數據一起存儲的源參 數重建正向映射和反向映射。當數據在數據存儲設備106上順序地存儲時,通過跟蹤擦除 區域或擦除塊在數據存儲設備106中填充順序和將源參數與數據一起存儲,數據存儲設備 106成為順序日志。映射重建模塊802通過順序地讀取存儲在數據存儲設備106上的數據 包回放日志。每個物理地址和數據包長度與每個數據包中的源參數成對,以重建正向和反 向映射。在另一種實施方式中,裝置800包括檢查點模塊804,檢查點模塊804存儲與正向 映射和反向映射相關的信息,其中檢查點是與數據存儲設備的時間點或狀態點有關的檢查 點。存儲的信息足以將正向映射和反向映射恢復到相對于檢查點的狀態。例如,存儲的信 息可包括將正向和反向映射連同一些指示狀態或時間檢查點的標識符存儲在非易失性存 儲器中,例如存儲在數據存儲設備中。例如,時間戳可以與檢查點信息一起存儲。然后,時間戳可以與數據存儲設備106 中位置相互關聯,其中數據包當前在該位置正在被存儲在檢查點中。在另一實例中,狀態信 息與檢查點信息一起存儲,狀態點信息例如數據存儲設備106正在存儲數據的位置。本領 域技術人員會認識到可由檢查點模塊804存儲以將正向和反向映射恢復為檢查點的其他 檢查點信息。在另一種實施方式中,裝置800包括映射同步模塊806,映射同步模塊806通過順 序地應用源參數和物理地址將正向映射和反向映射從相對于檢查點的狀態更新到當前狀 態。應用的源參數與順序存儲在檢查點之后的數據一起存儲。物理地址源于數據存儲設備 106上的數據的位置。
有利地是,映射同步模塊806從檢查點(而不是從起始處開始恢復)將正向和反 向映射恢復到當前狀態,并回放數據存儲設備106的所有內容。映射同步模塊806使用檢 查點到達緊隨檢查點之后存儲的數據包,然后從該點到當前狀態(在該狀態下,數據包當 前正被存儲在數據存儲設備106上)回放數據包。映射同步模塊806通常比映射重建模塊 802消耗更少的時間來恢復正向和反向映射。在一種實施方式中,正向和反向映射存儲在數據存儲設備106上,而正向和反向 映射的另一個集被創建以映射存儲的正向和反向映射。例如,數據包可存儲在第一存儲通 道中,而用于存儲的數據包的正向和反向映射可作為數據存儲在第二存儲通道中;第二存 儲通道上的用于數據的正向和反向映射可以作為數據存儲在第三存儲通道上,依此類推。 這種遞歸的進程可根據需要為額外的正向和反向映射繼續。存儲通道可以位于單個數據存 儲設備106或位于分離的數據存儲設備106。裝置800包括無效模塊808,無效模塊808在反向映射中標記數據的條目,該條目 指示由其引用的數據響應于導致數據被無效的操作而無效。無效模塊808可作為刪除請 求、讀-修改-寫請求及類似請求的結果標記條目無效。反向映射包括一些類型的無效標 記或標簽,無效標記或標簽可由無效模塊808改變以指示與反向映射中的條目關聯的數據 是無效的。例如,反向映射可包括一個由無效模塊808在數據無效時設定的位。在一種實施方式中,反向映射包括用于存儲在數據存儲設備106的有效數據和無 效數據的信息,正向映射包括用于存儲在數據存儲設備106上的有效數據的信息。由于反 向映射對于存儲空間恢復操作來說是有用的,指示擦除塊中的哪些數據為無效的信息包括 在反向映射中。通過在反向映射中維持指示無效數據的信息,在一種實施方式中,正向映射 僅需要維持有關于存儲在數據存儲設備106上的有效數據的信息,由此提升了正向查找的 效率和速度。隨后,存儲空間恢復模塊706可使用無效標記通過下述方法確定擦除區域中的無 效數據的數量掃描用于擦除區域的反向映射以相對于擦除區域的存儲容量確定無效數據 的數量。然后,存儲空間恢復模塊706可使用擦除區域中的無效數據的確定數量來選擇恢 復的擦除區域。通過掃描若干擦除區域甚至是全部可用的擦除區域,存儲空間恢復模塊706 可以使用選擇標準(例如擦除區域中無效數據的最高量)以選擇恢復的擦除區域。在一種實施方式中,一旦擦除區域被選定為恢復,存儲空間恢復模塊706可隨后 將有效數據從選定的擦除區域寫入數據存儲設備106中的新位置。通常,該新位置位于當 前正在順序地存儲數據的擦除區域的頁中。存儲空間恢復模塊706可利用數據管道寫入有 效數據,正如由David Flyrm等人于2007年12月6日提交的申請號為11,952,091,題為 "Apparatus, System, and Method for Managing Data Using a Data Pipeline,,美國專禾丨J 申請中所述的,通過引用將該文獻并入本文中。在一種實施方式中,存儲空間恢復模塊706還更新反向映射以指示寫入新位置的 有效數據在選定的擦除區域中為無效,并且基于寫入新位置的有效數據更新正向和反向映 射。在另一種實施方式中,存儲空間恢復模塊706與映射更新模塊810(下文將對其描述) 協同作用以更新正向和反向映射。在優選實施方式中,存儲空間恢復模塊706相對于與存儲請求和其他命令相關聯 的數據存儲和檢索自主地運行。包括在存儲空間恢復模塊706中的存儲空間恢復操作在上文中引用的存儲空間恢復申請有更詳細的描述。在一種實施方式中,裝置800包括映射更新模塊810,映射更新模塊810響應于數 據存儲設備106被改變的內容更新正向映射和/或反向映射。在又一種實施方式中,基于 數據存儲設備存儲數據的位置,映射更新模塊810從數據存儲設備接收將所存儲數據的物 理地址鏈接到虛擬地址的信息。在該實施方式中,存儲數據包的位置可以是不可用的,直到 數據存儲設備106存儲了數據包。例如,來自數據段的數據被壓縮以形成數據包,每個數據包的大小可以是未知的, 直到壓縮之后。數據存儲設備106順序地存儲數據,一旦數據包被壓縮和存儲,附加被設定 到存儲的數據包之后的位置,下一數據包被存儲。一旦得知附加點,數據存儲設備106隨后 發回對應于存儲下一數據包的附加點的物理地址的報告。映射更新模塊810使用所報告的 存儲的數據包的物理地址和關聯的數據長度更新正向和反向映射。本領域技術人員會認識 到映射更新模塊810的其他實施方式以基于存儲在數據存儲設備106上的數據的物理地址 和關聯的數據長度更新正向和反向映射。圖9是根據本發明的用于有效地映射虛擬地址和物理地址的方法900的一種實施 方式的示意性流程圖。方法900開始,在步驟902,正向映射模塊702使用正向映射識別數 據段的數據的一個或多個物理地址。從數據段的一個或多個虛擬地址識別物理地址,在指 令數據存儲設備106的存儲請求中識別數據段。正向映射包括一個或多個虛擬地址到數據 存儲設備106中存儲的數據的一個或多個物理地址之間的映射。虛擬地址是虛擬地址空間 內的離散地址,其中虛擬地址稀疏地位于虛擬地址空間。在步驟904,反向映射模塊704使用反向映射從物理地址確定數據段的虛擬地址。 反向映射將一個或多個物理地址映射到一個或多個虛擬地址。反向映射中的物理地址也利 用指針、鏈接等與正向映射相關聯。反向映射中的虛擬地址對應于與存儲在數據存儲設備 106上的數據相關的一個或多個數據段。反向映射也將數據存儲設備映射到擦除區域,從而 反向映射的一部分跨越擦除區域。數據存儲設備106的擦除區域在存儲空間恢復操作中被 一起擦除。存儲空間恢復操為將來存儲數據恢復擦除區域。在步驟906,存儲空間恢復模塊706在恢復擦除區域的操作之前使用反向映射識 別擦除區域中的有效數據,方法900結束。存儲空間恢復模塊706或其他與存儲空間恢復 關聯的模塊在恢復操作之前將識別的有效數據移動到另一擦除區域。注意到方法900的步 驟902、904、906平行示出,這是因為步驟902、904、906可以以任意順序獨立地實施。圖10是根據本發明的用于有效地映射虛擬地址和物理地址的方法1000的另一種 實施方式的示意性流程圖。方法1000開始,在步驟1002,存儲空間恢復模塊706通過下述 方法確定擦除區域中的有效數據的數量掃描用于擦除區域的反向映射以確定有效數據相 對于擦除區域的存儲容量的數量。在步驟1004,存儲空間恢復模塊706確定是否要計算另 一擦除區域。如果在步驟1004,存儲空間恢復模塊706確定要計算另一擦除區域,存儲空間 恢復模塊706為下一擦除區域確定有效數據的量。如果在步驟1004,存儲空間恢復模塊706確定不計算另一擦除區域,則在步驟 1006,存儲空間恢復模塊706通過利用選擇標準選擇恢復的擦除區域,選擇標準可包括利 用擦除區域中的無效數據的數量。在步驟1008,存儲空間恢復模塊706識別選定的擦除區 域中的有效數據并在步驟1010中,將有效數據移動到當前寫入數據的擦除區域中。在步驟1012,映射更新模塊810隨后更新正向和反向映射以表明有效數據已被寫入數據存儲設備 106中的另一位置。在一種實施方式中,在步驟1014,存儲空間恢復模塊706擦除選定的擦除區域并 將選定的存儲區域標記為可用于數據存儲,方法1000結束。在另一種實施方式中,一旦存 儲空間恢復模塊706將選定的擦除區域中的所有有效數據寫入另一位置,在步驟1014,存 儲空間恢復模塊706將選定的存儲區域標記為可用于數據存儲,而不需要擦除。圖11是根據本發明的正向映射和反向映射的實例的示意性框圖。通常,裝置700 和800接收存儲請求,例如讀取和編址的存儲請求。例如,裝置700和800可接收邏輯塊存 儲請求1102以開始讀取讀取地址182并讀取3個塊。通常,正向映射1104將邏輯塊地址存 儲為與其他虛擬地址在一起的虛擬地址,從而正向映射模塊702使用正向映射1104從存儲 請求1102的值為182的虛擬地址識別物理地址。在該實例中,為簡便起見,僅示出了數字 的虛擬地址,但本領域技術人員會認識到正向映射1104中可使用和表示的任意虛擬地址。 在其他實施方式中,正向映射1104可包括字母-數字字符、十六進制字符及類似字符。在該實例中,正向映射1104是簡單的B-樹。在其他實施方式中,正向映射1104 可以是內容可尋址存儲器(CAM)、二進制樹、哈希表或本領域內技術人員所知的其他數據結 構。在該實施方式中,B-樹包括可包括兩個虛擬地址的節點(例如根節點1108)。每個虛 擬地址可以是值域。例如,虛擬地址可以是具有值域(例如偏移量和長度)的虛擬標識符 的形式,或者可表示利用第一和最后地址或位置的值域。單個虛擬地址包括在特定節點(例如根節點1108)中時,如果被搜索的虛擬地址 1106小于節點的虛擬地址,搜索會繼續沿著定向邊1110往下到達節點1108的左邊。如果 被搜索的虛擬地址1106與當前節點1108匹配(即,位于在節點中識別的值域內),搜索停 止,并且在當前節點1108的指針、鏈接、物理地址等被識別。如果被搜索的虛擬地址1106大 于當前節點1108的值域,搜索會繼續沿著定向邊1112往下到達當前節點1108的右邊。當 節點包括兩個虛擬地址,并且被搜索的虛擬地址1106落入節點的所列的虛擬地址之間時, 搜索繼續沿著中間定向邊(未示出)往下到達具有落入當前節點1108的兩個虛擬地址之 間的虛擬地址的節點。搜索繼續沿著B-樹往下進行,直到定位了期望的虛擬地址或者確定 了 B-樹中不存在所搜索的虛擬地址1106。在圖11所示出的實例中,正向映射模塊702從根節點1108開始搜索值為182的 虛擬地址1106。由于搜索的虛擬地址1106小于根節點的虛擬地址(2005-212),正向映射 模塊702向下沿著定向邊1110往下搜索到達下一節點1114的左邊。搜索的值為182的虛 擬地址1106大于存儲在下一節點1114的虛擬地址(072-083),所以正向映射模塊702向下 沿著定向邊1116從節點1114的右邊往下搜索到達下一節點1118。在該實例中,下一節點 1118包括178-192的虛擬地址,從而所搜索的值為182的虛擬地址1106與節點1118的值 為178-192的虛擬地址匹配,這是因為所搜索的值為182的虛擬地址1106落入到節點1118 的值域178-192內。一旦正向映射模塊702確定了正向映射1104中的匹配,正向映射模塊702將在節 點1118內找到的或與節點1118鏈接的物理地址返回。在所述實例中,由正向映射模塊702 識別為包含所搜索的虛擬地址1106的節點1118包括映射到反向映射1122中的條目1120 的鏈接“f”。
在所述實施方式中,對于反向映射1122中的每個條目1120(表示為表中的行)而 言,反向映射1122包括條目ID 1124、物理地址1126、與存儲在數據存儲設備106的物理地 址11 上的數據(在這種情況下,數據被壓縮)相關聯的數據長度1128、有效標簽1130、 虛擬地址1132(可選)、與虛擬地址1132相關聯的數據長度1134(可選)和其他雜項數據 1136。反向映射1122被組織到擦除塊(擦除區域)中。在該實例中,對應于選定的節點 1118的條目1120位于擦除塊η 1138中。擦除塊η 1138在擦除塊η_1 1140之后,擦除塊 η 1138之后是擦除塊η+1 1142 (擦除塊η_1和擦除塊η+1中的內容未示出)。擦除塊可以 是包括預定數量的頁的一些擦除區域。擦除區域是數據存儲設備106上在存儲恢復操作中 被一起擦除的區域。條目ID IlM被示出為是反向映射1122的一部分,條目ID IlM可以是地址、虛 擬鏈接或將反向映射1122中的條目鏈接到正向映射1104中的節點的其他手段。物理地址 1126是數據存儲設備106中對應于所搜索的虛擬地址1106的數據所駐留的地址。與物理 地址11 關聯的數據長度11 識別存儲在物理地址11 上的數據包的長度。(為簡便起 見,物理地址11 和數據長度11 可被一起稱為目標參數1144,虛擬地址1132和關聯的 數據長度可被稱為源參數1146)。在這個實例中,目標參數1144的數據長度1120不同于源 參數1146的數據長度1134,在一種實施方式中,在存儲之前壓縮存儲在數據存儲設備106 上的數據包。對于與條目1120關聯的數據,數據可被高度壓縮,從64個塊壓縮成1個塊。有效標簽1130指示映射到條目1120的數據是否有效。在這種情況下,與條目1120 關聯的數據是有效的,在圖11中,其在條目1120的行中被表示為“Y”。通常,反向映射1122 既跟蹤有效數據又跟蹤無效數據,正向映射1104跟蹤有效數據。在該實例中,條目“c”l 148 表示與條目1148關聯的數據無效。注意到正向映射1104不包括虛擬地址。通常,反向映射 1122保持無效數據的條目,從而能夠在存儲恢復操作中快速地區別有效數據和無效數據。為了方便,所述反向映射1122包括源參數1146,但反向映射1122可以(但未必) 包括源參數1146。例如,如果源參數1146與數據一起存儲(可能位于存儲數據的包頭), 反向映射1122可通過包括與數據關聯的物理地址11 間接地識別虛擬地址,而可以從存 儲的數據中識別源參數1146。本領域技術人員會認識到何時將源參數1146存儲在反向映 射1122是有利的。反向映射1122也可包括其他雜項數據1136,例如文件名、對象名、源數據等。本 領域技術人員會認識到在反向映射1122中有用的其他信息。盡管物理地址11 在反向映 射1122中示出,但在其他實施方式中,物理地址11 或其他目標參數1144可被包括在其 他位置中,例如可被包括下述位置正向映射1104、中間表或數據結構等等。通常,反向映射1122由擦除塊或擦除區域設置,從而遍歷與擦除塊(如擦除塊η 1138)關聯的映射的一部分允許存儲空間恢復模塊706識別擦除塊1138中的有效數據并計 算擦除塊1138中有效數據的數量(或相反地,無效數據的量)。由于索引可被優化用于搜 索和存儲恢復操作,將索引設置到正向映射1104和反向映射1122中是有利的,其中正向映 射1104能夠被快速地搜索以從虛擬地址1106識別物理地址11 ,反向映射1122能夠被快 速地搜索以識別擦除塊1138中的有效數據及其數量。本領域技術人員會認識到具有正向 映射1104和反向映射1122的索引的其他好處。圖12是示出了根據本發明的用于協調存儲請求的裝置1200的一種實施方式的示意性框圖。裝置1200包括具有附加/無效模塊1202和重組模塊1204的存儲控制器104, 這將在下文描述。附加/無效模塊1202和重組模塊1204中的一個或多個的至少一部分位 于下述設備中的一個或多個中發送存儲請求的請求設備、數據存儲設備106、存儲控制器 104和與請求設備、數據存儲設備106和存儲控制器104分離的計算設備。裝置1200包括附加/無效模塊1202,附加/無效模塊1202響應于第一存儲請求 的接收生成第一附加數據存儲命令,并響應于第二存儲請求的接收生成第二附加數據存儲 命令。從一個或多個請求設備接收第一和第二存儲請求。請求設備可以是服務器108或客 戶端110,客戶端110可以位于服務器108上,或者通過計算機網絡112與服務器108通信。第一存儲請求包括用第一數據覆蓋數據段的現有數據的請求。數據段存儲在數據 存儲設備106上。第二存儲請求包括用第二數據覆蓋相同數據段的現有數據的請求。第一 和第二數據包括將以相同的偏移量存儲在數據段內的重疊數據的至少一部分,在第一存儲 請求之后接收第二存儲請求。附加/無效模塊1202還響應于第一存儲請求通過將數據段的數據標記為無效來 更新索引。標記為無效的數據是正被第一數據替換的數據。附加/無效模塊1202也響應于 第二存儲請求通過將數據段的數據標記為無效來更新索引,其中,標記為無效的數據是正 被第二數據替換的數據。在一種實施方式中,附加/無效模塊1202通過更新反向映射1122 來更新索引。在一種實施方式中,附加/無效模塊1202更新反向映射1122以指示數據段 無效。在另一種實施方式中,附加/無效模塊1202僅將對應于第一數據或第二數據的數據 標記為無效。這可能需要修正正向映射1104和反向映射1122,這將在下文中詳細描述。在另一種實施方式中,將數據段的數據標記為無效可包括生成表,該表指示數據 段的正被第一數據和第二數據替換的部分是無效的,該表還指示數據段中未被替換的部分 仍然是有效的。該表可被重組模塊1204在更新索引的過程中使用,而不需要將整個數據段 標記為無效。裝置1200包括重組模塊1204,重組模塊1204基于第一數據更新索引并基于第二 數據更新索引,其中,組織被更新的索引以指示第二數據比第一數據更符合當前情況。在基 于第一數據更新索引(在基于第二數據更新索引之前)之時或基于第二數據更新索引(在 基于第一數據更新索引之前)之時保持索引的這種組織。在一種實施方式中,組織索引以指示對于重疊數據來說第二數據比第一數據更符 合當前情況包括在用于重疊數據的索引中保持指針、鏈接等,不考慮更新的順序,重疊數據 對應于第二數據。例如,如果源數據段包括由3’的第一數據和3”的第二數據覆蓋的塊3, 在更新之后,不論索引是否在第一數據之前用第二數據更新,索引都指向3”,反之亦然。在 下文對圖16的描述中提供了進一步的解釋。通常,組織索引以指示第二數據比第一數據更符合當前情況可包括利用第二數據 更新索引中映射到重疊數據的一部分,以及甚至在重組模塊1204基于第二數據(在基于第 一數據更新索引之前)更新索引的情況下,保留到第二數據的映射。當附加/無效模塊1202更新索引時,附加/無效模塊1202阻止通過另一進程訪 問索引以確保數據完整性。例如,如果附加/無效模塊1202正在基于第一數據更新索引, 附加/無效模塊1202阻止重組模塊1204或附加/無效模塊1202的另一例程基于第二數 據更新索引。通過在索引更新時阻止對索引的訪問(即鎖定索引),裝置1200支持多處理器或多線程運行的裝置的模塊1202和1204的多重運行。注意到盡管上文中討論了兩個存 儲請求,本發明可同樣地應用到同時處理三個或更多個存儲請求的情形。圖13是示出了根據本發明的用于協調存儲請求的裝置1300的另一種實施方式的 示意性框圖。裝置1300包括附加/無效模塊1202和重組模塊1204,這兩個模塊基本上類似 于結合圖12的裝置1200所描述的。裝置1300還包括數據位置模塊1302、讀取模塊1304、 讀取延遲模塊1306、序列編號模塊1308,將在下文中描述這些模塊。圖示中,裝置1300的 模塊1202、1204、1302-1308位于存儲控制器104中,但模塊1202、1204、1302-1308的全部 或部分可包括在數據存儲設備106、客戶端110、服務器108或其他設備或其他位置中。在一種實施方式中,裝置1300包括數據位置模塊1302,數據位置更新模塊1302利 用數據存儲設備106存儲第一數據的第一物理地址更新索引,還利用數據存儲設備106存 儲第二數據的第二物理地址更新索引。裝置1300接收數據存儲設備106存儲第一數據和 從數據存儲設備106接收第二數據的物理位置。如上所述,數據存儲設備106順序地存儲 數據,為給定的數據包存儲數據的位置可以是未知的,直到存儲了先前的數據包。組織所更新的索引以指示第二物理位置比第一物理位置更符合當前情況,而不考 慮索引是基于第一物理位置被更新(在基于第二物理位置更新之前),還是基于第二物理 位置被更新(在基于第一物理位置更新之前)。例如,如果第一數據的重疊部分響應于第一 存儲請求存儲在地址1中,而第二數據的重疊部分存儲地址2中,則數據位置模塊1302為 索引中相對于重疊數據的部分將地址2存儲在索引中。如果在為第一數據更新之前,為第 二數據更新索引,則索引為重疊數據維持地址2,而不是用地址1替換地址2。數據位置更新模塊1302阻止通過數據位置模塊1302或其他模塊(例如附加/無 效模塊1202或重組模塊1204)的另一例程訪問索引,直到數據位置模塊1302完成更新索 引。在數據位置模塊1302更新索引之時阻止對索引的訪問增加了數據的可靠性。通常,在重組模塊1204處理存儲請求之前,附加/無效模塊1202處理特定存儲請 求,并且在數據位置模塊1302處理存儲請求之前,重組模塊1204處理存儲請求。然而,一 旦確定兩個存儲請求到達的順序,附加/無效模塊1202的例程處理第二存儲請求可發生在 附加/無效模塊1202的另一例程處理第一存儲請求之前。同樣地,重組模塊1204處理第 二存儲請求可發生在附加/無效模塊1202或重組模塊1204的另一例程處理第一存儲請求。類似地,數據位置模塊1302的例程處理第二存儲請求可發生在附加/無效模塊 1202、重組模塊1204或數據位置模塊1302的另一例程處理第一存儲請求之前。本發明的這 種特征允許異步和獨立的多處理器和/或多線程地處理存儲請求。在模塊1202、1204、1302 的另一例程更新索引和基于到達的順序而不是處理的順序組織索引時,阻止對模塊1202、 1204和1302的訪問有助于通過多處理器或多線程并行地處理存儲請求。裝置1300包括反向的讀取模塊1304,讀取模塊1304響應于包括讀取請求的存儲 請求讀取數據段的至少一部分。讀取請求必須與導致修正數據段的存儲請求協調,從而裝 置1300也包括讀取延遲模塊1306,讀取延遲模塊1306推遲服務所請求的讀取操作,直到第 一存儲請求由附加/無效模塊1202、重組模塊1204和數據位置更新模塊1302服務。讀取 延遲模塊1306通過在更新數據段的內容時或在更新映射到數據段的索引時阻止讀取操作 保持數據的完整性。
在一種實施方式中,當在請求覆蓋數據段的至少一部分的第一存儲請求之后,但 在同樣請求覆蓋數據的至少一部分的第二存儲請求之前接收到讀取數據段的讀取請求時, 讀取延遲模塊1306推遲服務讀取請求,直到第一和第二存儲請求都已由附加/無效模塊 1202、重組模塊1204和數據位置更新模塊1302服務。在這種實施方式中,讀取延遲模塊 1306允許基于第二數據存儲請求更新數據段,從而讀取模塊1304將讀取數據段的最新版 本。 在一種實施方式中,裝置1300包括序列編號模塊1308,序列編號模塊1308將序列 號與存儲請求關聯,其中分配的序列號表示裝置1300接收存儲請求的順序。序列號有助于 組織索引,從而索引反映出基于第二存儲請求的更新發生在基于第一存儲請求的更新之 前。在這種實施方式中,重組模塊1204組織索引以利用分配給第一存儲請求和第二存儲請 求中的每一個的序列號指示第二數據比第一數據更符合當前情況。同樣地,數據位置模塊 1302也組織索引以指示第二數據比第一數據更符合當前情況。序列號可以是時間戳、連續 的數字或其他任何可被用于識別一個序列號先于另一個序列號的機制。本領域技術人員會 認識到序列號的其他形式。在一種實施方式中,在更新索引時,附加/無效模塊1202、重組模塊1204或數據位 置模塊1302不阻止訪問整個索引。索引可被分割成兩個或多個區域。例如,一個區域可涉 及數據存儲設備106的一個區域,而索引的另一個區域可涉及數據存儲設備106的另一個 區域。在該實施方式中,當服務涉及索引的第一區域的存儲請求時,附加/無效模塊1202、 重組模塊1204或數據位置模塊1302的額外的例程可服務涉及第二區域的第二存儲請求。 在另一種實施方式中,索引可被分割以創建多個可獨立運行的虛擬地址區域。索引的區域 可以是分支、次分支,甚至是節點,只要在更新區域時限制對區域的訪問不影響同時更新的 其他分區的數據完整性。在一種實施方式中,第一和第二存儲請求與將要替換數據段的至少一部分的數據 一起接收。在另一種實施方式中,同時接收第一和第二存儲請求中的一個或兩個,而沒有數 據。此外,可將相應的附加數據存儲請求在沒有數據的情況下發送到數據存儲設備106。例 如,存儲請求可不包括數據且可以初始化直接存儲器存取(DMA)進程和遠程直接存儲器存 取(RDMA)進程以將數據段的數據轉移到數據存儲設備106。同樣地,發送到數據存儲設備 106的附加數據存儲命令可指令數據存儲設備106建立DMA或RDMA進程以轉移數據。裝 置1200、1300具有足夠的靈活性以處理具有數據一個存儲請求、是恢復進程的一部分的另 一存儲請求和建立DMA和RDMA操作的又一存儲請求。本發明公開了附加/無效模塊1202、重組模塊1204和數據位置更新模塊1302的 例程是如何處理大約在同一時間接收到的影響單個數據段的請求,本領域技術人員會認識 到附加/無效模塊1202、重組模塊1204、數據位置更新模塊1302可處理其他影響單個數據 段的不同部分的多種存儲請求,也可處理影響兩個或多個分離的數據段的存儲請求。圖14是示出了根據本發明的用于協調存儲請求的方法1400的一種實施方式的示 意性流程圖。方法1400開始,在步驟1402,裝置1200接收第一存儲請求。在步驟1404,裝 置1200接收第二存儲請求。第一和第二存儲請求通過覆蓋數據段的至少一部分影響單個 數據段。此外,第一和第二數據請求覆蓋數據段為第一和第二存儲請求所共有的至少一個 重疊部分。
在步驟1406,附加/無效模塊1202的例程生成第一附加數據存儲命令以用第一數 據覆蓋數據段的至少一部分。在步驟1408,附加/無效模塊1202的例程還生成第二附加數 據存儲命令以用第二數據覆蓋數據段的至少一部分。在步驟1410,附加/無效模塊1202的 正在服務第一數據請求的例程通過無效數據段中被第一數據替換的數據更新索引。在步驟 1412,附加/無效模塊1202的正在服務第二數據請求的例程通過無效數據段中被第二數據 替換的數據也更新索引。在步驟1414,重組模塊1204的例程基于第一數據更新索引。在步驟1416,重組模 塊1204的例程還基于第二數據更新索引,方法1400結束。當附加/無效模塊1202或重組 模塊1204的任意例程更新索引時,模塊1202、1204的其他例程被阻止訪問索引。與附加/無效模塊1202和重組模塊1204的例程有關的步驟1406-1416的順序僅 僅是一種實施方式。步驟1406-1416的其他順序是可能的而且是本發明的重要特征,只要 在重組模塊1204服務第一存儲請求之前,附加/無效模塊1202服務第一存儲請求,而且在 重組模塊1204服務第二存儲請求之前,附加/無效模塊1202服務第二存儲請求。例如,附 加/無效模塊1202的例程和重組模塊1204的例程可以在附加/無效模塊1202的另一例 程服務第一存儲請求之前服務第二存儲請求。在下文中,相對于圖16所示出的實例更詳細 地論述了服務存儲請求的可能順序。圖15是示出了根據本發明的用于協調存儲請求的方法1500的一種實施方式的示 意性流程圖。方法1500是為協調上述的客戶端110、存儲控制器104或裝置1200、1300的 其他位置以及數據存儲設備106中的存儲請求而采取的步驟的實例。注意到方法1500描 述了三個設備中的動作,方法1500不意圖暗示本發明需要跨越不止一個設備,也不意圖暗 示模塊必須按圖12和13所示定位。本發明可以在存儲控制器104或與數據存儲設備106的存儲控制器104通信的其 他單個設備中實施,也可包括客戶端110、服務器108等中的驅動器的一部分。通常,客戶端 110和數據存儲設備106中所示的動作獨立于本發明,而且僅被用于展示一般在客戶端110 和數據存儲設備106中發生了什么以發送存儲請求和響應于存儲請求而存儲數據。盡管方法1500描繪了單個客戶端110,但通常,具有多個客戶端110,而且每個客 戶端110通過存儲控制器104的一個或多個的例程訪問數據存儲設備106。在步驟1502, 客戶端110初始化客戶端之間的鎖之時,方法1500開始,該鎖與其他客戶端110協調數據 的寫入,從而使得圖示的客戶端110是在特定時間發送具有寫入請求的存儲請求的唯一客 戶端110。寫入請求可以是寫入新數據的請求,或者是替換或修正現有數據段的請求。在服 務寫入新數據的寫入請求時阻止對索引的訪問是重要的,因此本發明在下述情況下特別有 用替換或修正現有數據段以確保在出現兩個或多個修正/替換相同數據段的請求時的數 據完整性。在該實施方式中,一旦客戶端之間的鎖就位以確保來自不止一個客戶端110的 寫入請求的同步性,則在步驟1504,客戶端110將寫入請求發送到存儲控制器104。在另一 種實施方式中,未利用客戶端之間的同步性,而且存儲請求沒有預定的順序。在所述的實施 方式中,寫入請求基本不具有數據并初始化DMA進程以將數據從客戶端110或其他位置轉 移到數據存儲設備106。在步驟1506,附加/無效模塊1202隨后通過“鎖定”索引阻止對索引的多重訪問。 在步驟1508,序列模塊1308隨后獲取序列號并將序列號與寫入請求關聯。在步驟1510,附加/無效模塊1202基于寫入請求創建附加數據存儲命令。附加數據存儲命令包括分配的 序列號并涉及數據段中由寫入請求要求覆蓋的數據。然后,在步驟1511,附加/無效模塊 1202或存儲控制器104內的其他模塊將附加數據存儲命令和序列號一起發送到數據存儲 設備106。附加數據存儲命令包括初始化DMA進程的命令,以將數據從客戶端110或其他位 置轉移到數據存儲設備106。此外,在步驟1512,附加/無效模塊1202通過將現有數據標記為無效更新索引。 現有數據是數據段的一部分的數據,并且將要被寫入請求中引用的數據替換。隨后,在步驟 1514,附加/無效模塊1202釋放索引中的塊,從而使得可以服務其他寫入請求。此外,在步 驟1515,客戶端110解鎖寫入請求的發送,從而另一客戶端110能夠將寫入請求發送給存儲 控制器104。在一種實施方式中,附加/無效模塊1202暫時地無效整個數據段,直到索引被 更新。在索引被更新之后,數據段的未被寫入請求影響的部分被標記為有效。在另一種實 施方式中,附加/無效模塊1202僅無效索引的與被覆蓋的數據相關聯的部分。注意到并行地示出了創建附加數據存儲命令(步驟1510)和無效數據(步驟 1513)。在另一種實施方式中,在無效數據(步驟151 和在索引中釋放鎖(步驟1514)之 后,附加/無效模塊1202創建附加數據存儲命令(步驟1510)。在優選實施方式中,數據存 儲設備106以序列號的順序存儲數據包。在一種實施方式中,通過將序列號與附加數據存 儲命令關聯(步驟1511),附加/無效模塊1202可獨立于無效數據(步驟151 和解鎖索 引(步驟151 創建附加數據存儲命令(步驟1510)。一旦數據存儲設備106接收到附加命令和序列號,在步驟1516,數據存儲設備106 初始化DMA進程以將與寫入請求關聯的數據轉移到數據存儲設備106。在步驟1518,數據 存儲設備106還阻止讀取將要被存儲的該數據并在步驟1520處理接收的數據。處理數據 可能包括在首部加包頭、壓縮數據、加密數據、創建糾錯碼(ECC)等。盡管只示出了單重DMA 轉移,但處理也可包括多重DMA轉移。隨后,數據存儲設備106完成用于與序列號關聯的附 加數據存儲命令的DMA,然后在步驟15M,數據存儲設備106完成附加數據存儲命令。在其他實施方式中,除創建附加數據存儲命令之外,附加/無效模塊1202還創建 與寫入請求關聯的其他命令,并將命令與序列號關聯。然后,存儲控制器104發送命令,其 中序列號附加到每個命令上。隨后在步驟15M中,數據存儲設備106完成與序列號關聯的 所有命令。本領域技術人員會認識到可生成用于服務寫入請求的、與寫入請求相關聯的其 他命令。一旦數據存儲設備106處理了通過DMA接收的數據(步驟1520),數據存儲設備 106存儲數據(步驟1526)并解除對讀取數據的阻止(步驟15 )。注意到數據的存儲(步 驟1526)是可能比其他進程消耗更多時間的進程。在優選實施方式中,存儲控制器104在 數據被存儲時將處理許多其他存儲請求。在附加/無效模塊1202解鎖索引(步驟1514)之后,重組模塊1204鎖定索引(步 驟1530)并在步驟1532中基于請求寫入的數據相對于從客戶端110接收的寫入請求更新 索引。隨后在步驟1534,重組模塊1204解鎖索引。一旦被解鎖,索引可被附加/無效模塊 1202和重組模塊1204的其他例程訪問。在一種實施方式中,作為對附加/無效模塊1202 解鎖索引(步驟1514)和重組模塊1204重新鎖定索引(步驟1530)的替代,索引在附加/ 無效模塊1202的無效過程和重組模塊1204的索引更新過程中保持鎖定狀態。一旦在步驟15 中,數據存儲設備106完成與序列號關聯的命令,則在步驟1536中,數據存儲設備106發送數據存儲設備106存儲關聯的數據(步驟15 )的一個或多個 物理地址。在一種實施方式中,一起發送命令完成15M與序列號1536。在優選實施方式 中,與命令完成15M—起被發送的序列號1536與最初發送給數據存儲設備106的序列號 1511相同。在步驟1538中,數據位置模塊1302鎖定索引并在步驟1540中更新索引以指向 數據存儲設備106在步驟15 中存儲數據的位置。在該實施方式中,附加/無效模塊1202 清除關聯的數據段的無效標志。在另一種實施方式中,附加/無效模塊1202無效與寫入請 求相關聯的整個數據段,而數據位置模塊1302清除數據中未受寫入請求影響的無效標志。 隨后在步驟1542中,數據位置模塊1302解鎖索引,在步驟1544中,存儲控制器104完成寫 入請求并將確認發送到客戶端110。然后在步驟1546中,客戶端110接收并處理確認,方法 1500結束。在一種實施方式中,每次索引被鎖定(步驟1506、1530、1538),整個索引被鎖定。 在另一種實施方式中,僅索引的一個部分被鎖定。例如,分支可以被鎖定,或者甚至是對應 于數據段的節點被鎖定。圖16(包括圖16A、16B和16C)是示出了根據本發明的用于協調存儲請求的裝置 1200、1300的實例1600的示意性框圖。在實例1600中,原始狀態的數據段1602被假定為 基于先前的存儲數據段的寫入請求而存儲在數據存儲設備106上。同樣在該實例中,裝置 1200、1300從兩個客戶端110接收兩個存儲請求客戶端A發送請求1而客戶端B發送請 求2。兩個存儲請求都試圖覆蓋數據段的一部分。來自客戶端A的請求1的接收早于來自 客戶端B的請求2的接收。接收請求的時間序列1604被示為表示如果存儲控制器104將數據存儲設備106 仿真為隨機存儲設備,客戶端110如何感知到對數據段的改變。數據段的原始狀態1602包 括五個標號為1-5的塊。原始狀態1602的塊被示為不具有斷面線。客戶端A發送與修正 塊2和塊3的第一數據相關聯的請求1。第一數據1606分別將塊2和塊3中的新數據示出 為2’和3’。具有第一數據1606的塊被示為具有水平斷面線。客戶端A發送與修正塊3和 塊4的第二數據相關聯的請求2。第二數據1608分別將塊3和塊4中的新數據示出為3” 和4”。具有第二數據1608的塊被示為具有從左上到右下的斜斷面線。最終狀態1610被示 出,其中,第一數據和第二數據覆蓋塊2、3和4。特別值得注意地是,在最終狀態1610中,塊3包括第二數據3”。這是由于請求2 在請求1之后到達。由于對于請求1來說,請求2在時間上居第二位,所以請求2被認為是 比請求1更符合當前情況。實例1600描述了為數據段更新索引的若干情況,從而索引的最 終狀態在每種情況下都是一樣的,而且第二數據比第一數據更符合當前情況。在實例1600中,一旦接收了數據,則將其在三個步驟內處理。首先,附加/無效模 塊1202的例程無效數據段中將要被寫入請求的數據替換的數據。其次,索引被假設為具有 B-樹、二進制樹或類似結構形式的正向映射1104,重組模塊1204的例程通過重組樹更新索 引。最后,數據位置模塊1302使用數據存儲設備106存儲數據的一個或多個位置更新索引。 例如,數據位置模塊1302可更新反向映射1122。用于請求A的這三個動作被示為Al、A2、 A3。用于請求B的這三個動作被示為B1、B2、B3。在另一種實施方式中,步驟Al和A2可結 合成單個步驟。類似的,A2和A3可以結合。重新布置和結合步驟或步驟中執行的進程符 合本發明的廣泛范圍。
實例1600描述了 10個不同序列(Sl-SlO)的樹基于與請求A和請求B相關聯的 動作的不同組合而更新樹的狀態。注意到全部10個可能的序列的最終狀態是一樣的,這正 是所期望的結果。序列Sl-Sio全部開始于步驟Al。這假設在請求1被接收之后,附加/無 效模塊1202馬上為來自客戶端A的請求1分配序列號并無效數據。在另一種實施方式中, 分配序列號和無效數據是分開進行的。在這種實施方式中,來自客戶端A的請求1的接收 早于來自客戶端B的請求2的接收,附加/無效模塊1202的一個或多個例程最初基于到達 的順序將序列號分配給每個請求,由于每個請求具有分配的序列號,可推遲在步驟Al中為 無效數據而進行的處理,可首先處理Bl以無效數據。在這種情況下,Bl先于Al (未示出) 的額外序列的最終狀態將與序列Sl-SlO所示出的最終狀態相同。第一序列Sl描述了樹中表示數據段的塊1-5的節點的原始狀態。(注意到表示 原始狀態的節點不具有斷面線以與在圖的上部示出的塊的原始狀態相匹配)。節點示出了 1-5(1:5)的范圍,對應于處于原始狀態1602的塊1-5。序列Sl的第一步是為了使附加/無 效模塊1202無效數據段的節點。這在步驟Al中描述,其中節點被示出為無效,并且節點下 的字母A指示請求A正在被服務以無效數據。無效的范圍以從右上到左下的斷面線示出, 節點下的字母指示哪個請求無效數據。為簡便起見,注意到在實例1600示出的序列Sl-SlO中,整個范圍1_5被示為無 效。然而,在優選實施方式中,只有被請求影響的塊才被無效。在無效進程期間,附加/無 效模塊1202鎖定索引的全部或部分。如A2所示,序列Sl的第二步是為了使重組模塊1204重組樹以分裂塊2和3,這將 指向2’和3’。在這個步驟中,塊1、4和5的鎖被釋放,且數據在原始狀態下保持可為讀取 進行訪問。塊2和3在樹的中間節點中被示為無效。如A3所示,序列Sl的第三步是為了 使數據位置模塊1302基于塊2’和3’存儲在數據存儲設備106的位置而更新樹。這被描 述為顯示新塊2’和3’的中間節點和具有水平斷面線的節點,具有水平斷面線的節點對應 于在步驟A3結束時塊的最終狀態,如上述的完成客戶端A的更新1606。這可以通過將正向 映射1104的節點中的指針更新為指向反向映射1122中的一個或多個條目來實現,其中,反 向映射1122中的條目具有第一數據的物理地址。在這種情況下,反向映射1122具有用于 2,和3,的物理地址。如Bl所示,序列Sl的第四步是為了使附加/無效模塊1202的例程無效樹中將要 被第二數據3”和4”覆蓋的節點。在這種情況下,第二節點O’ 3’)和第三節點(4:5)被 影響,所以這兩個節點被描述為無效(從右到左的斷面線)。如B2所示,序列Sl的第五步 是為了使重組模塊1204重組這兩個節點以形成指向2’的節點、指向3” 4”的節點和指向 塊5的節點。指向3” 4”的節點被示為無效。如B3所示,序列Sl的第六步對應于數據位置模塊1302的例程利用數據存儲設備 106存儲塊3”和4”的位置的物理地址信息更新索引。此時,表示3”和4”的節點被示為處 于最終狀態,并用從左到右的斷面線表示。步驟B3表明樹中表示處于最終狀態的塊1-5的 部分,其中塊1和5未被修正。塊2表明,其已被第一數據2’更新,塊3和4表明,它們已 被第二數據3”和4”更新。注意到塊3恰當地與第二數據3”一起示出,不管處理的順序如 何,描述的全部序列Sl-SlO的最終狀態都是一樣的。序列S2與序列Sl相同,除了交換步驟A3和Bl的處理順序。在步驟Bi,服務請求B的重組模塊1204的例程無效指向塊3和4的兩個節點。在步驟A3,服務請求A的數據位 置模塊1302的例程利用2’和3’存儲的位置更新索引,但第二節點O” 3”)和第三節點 (4:5)保持無效,這是因為服務請求B的重組模塊1204的例程還未從第二和第三節點中分 離出3和4。一旦重組模塊1204重組了節點以包括指向3” 4”且離開指向2’的節點和指 向5的節點,指向2’和5的節點處于最終狀態。在步驟B3(與序列Sl的步驟B3相同)之 后,序列S2的節點處于最終狀態并與序列Sl的最終狀態相匹配。圖16B和圖16C中示出的序列S3-S10完成類似序列Sl和S2的過程和分析,除 了將步驟重新排序。注意在在所有的序列Sl-Sio中,最終狀態都是相同的。有利地是,本 發明允許多處理器或多線程操作以訪問存儲在公共數據存儲設備106上的相同數據段或 在數據存儲設備106的陣列中被條帶化的數據段。有利地是,本發明允許多處理器或多線 程操作以使完成服務多重服務請求的時間不同,而同時保持數據的完整性。盡管示出了兩 個存儲請求,但本發明也可應用到當前訪問相同數據段的三個或更多個同時的存儲請求。 本領域技術人員會認識到本發明的其他好處和實施裝置1200、1300的模塊1202、1204、 1302-1308其他方法。本發明可采用其他指定形式實施而不脫離本發明的宗旨或本質特點。描述的實施 方式在各個方面被視為僅僅是示例性而不是限制性的。因此,本發明的范圍由附屬的權利 要求確定,而不是由上述說明書確定。在本發明的權利要求的含義和等同范圍內的所有改 變被包含在本發明的保護范圍內。
權利要求
1.一種協調存儲請求的裝置,該裝置包括附加/無效模塊,用于響應于第一存儲請求的接收生成第一附加數據存儲命令,第一 存儲請求包括用第一數據覆蓋存儲在數據存儲設備上的數據段的現有數據的請求,該附 加/無效模塊還用于響應于第二存儲請求的接收生成第二附加數據存儲命令,第二存儲請 求包括用第二數據覆蓋數據段的現有數據的請求,第一數據和第二數據至少包括將以相同 的偏移量存儲在數據段內的重疊數據的至少一部分,在第一存儲請求之后接收第二存儲請 求,該附加/無效模塊還用于響應于第一存儲請求通過將數據段的數據標記為無效來更新 索引,標記為無效的數據包括正被第一數據替換的數據,該附加/無效模塊還用于響應于 第二存儲請求通過將數據段的數據標記為無效來更新索引,標記為無效的數據包括正被第 二數據替換的數據;及重組模塊,用于基于第一數據更新索引并基于第二數據更新索引,其中,當在基于第二 數據更新索引之前基于第一數據索引更新索引時或在基于第一數據更新索引之前基于第 二數據更新索引時,組織被更新的索引以指示第二數據比第一數據更符合當前情況,其中,附加/無效模塊阻止對索弓I的訪問,直到附加/無效模塊已經完成更新索弓I,并 且重組模塊阻止對索引的訪問,直到重組模塊已經完成更新索引。
2.如權利要求1所述的裝置,還包括數據位置更新模塊,用于利用指示數據存儲設備 存儲第一數據的第一物理位置更新索引,并利用指示數據存儲設備存儲第二數據的第二物 理位置更新索引,從數據存儲設備接收數據存儲設備存儲第一數據和第二數據的物理位 置,其中,當在基于第二物理位置更新索引之前基于第一物理位置更新索引時或在基于第 一物理位置更新索引之前基于第二物理位置更新索引時,組織被更新的索引以指示第二物 理位置比第一物理位置更符合當前情況,并且數據位置更新模塊阻止對索引的訪問,直到 數據位置模塊已經完成更新索引。
3.如權利要求2所述的裝置,其中,附加/無效模塊處理存儲請求發生在重組模塊的處 理之前,并且重組模塊處理存儲請求發生在數據位置模塊的處理之前。
4.如權利要求3所述的裝置,其中附加/無效模塊、重組模塊和數據位置更新模塊中任 一個處理的第一存儲請求發生在附加/無效模塊、重組模塊和數據位置更新模塊中任一個 處理第二存儲請求之前或之后。
5.如權利要求2所述的裝置,其中,在兩個或多個線程內執行附加/無效模塊、重組模 塊和數據位置更新模塊中的每一個的例程,其中,附加/無效模塊、重組模塊和數據位置更 新模塊的每個例程阻止對索引的訪問,直到附加/無效模塊、重組模塊或數據位置更新模 塊已經完成更新索引。
6.如權利要求2所述的裝置,其中,在兩個或多個并行工作的處理器上執行附加/無效 模塊、重組模塊和數據位置更新模塊中的每一個的例程,其中,附加/無效模塊、重組模塊 和數據位置更新模塊的每個例程阻止對索引的訪問,直到附加/無效模塊、重組模塊或數 據位置更新模塊已經完成更新索引。
7.如權利要求2所述的裝置,其中,還包括讀取模塊,用于響應于包括讀取請求的存儲 請求讀取數據段的至少一部分,該裝置還包括讀取延遲模塊,用于推遲服務所請求的讀取, 直到第一存儲請求已由附加/無效模塊、重組模塊和數據位置更新模塊服務。
8.如權利要求7所述的裝置,其中,在第一存儲請求之后,在第二存儲請求之前,該裝置接收到讀取數據段的至少一部分的存儲請求,其中,讀取延遲模塊推遲服務讀取請求,直 到第一和第二存儲請求都已由附加/無效模塊、重組模塊和數據位置更新模塊服務。
9 如權利要求1所述的裝置,還包括序列編號模塊,用于將序列號與存儲請求關聯,分 配的序列號表示該裝置接收存儲請求的順序,并且重組模塊利用分配給第一存儲請求和第 二存儲請求中的每一個的序列號組織索引以指示第二數據比第一數據更符合當前情況。
10.如權利要求1所述的裝置,其中,組織索引以指示第二數據比第一數據更符合當前 情況包括利用第二數據更新索引的映射到重疊數據的一部分,并且如果重組模塊在基于第 一數據更新索引之前基于第二數據更新索引,則保留到第二數據的映射。
11.如權利要求1所述的裝置,其中,附加/無效模塊接收三個或更多覆蓋數據段的現 有數據的存儲請求,重組模塊基于存儲請求到達的順序利用存儲請求的數據組織索引,而 不考慮重組模塊利用存儲請求的數據更新索引的順序。
12.如權利要求1所述的裝置,其中,索引還被分割為兩個或多個區域,并且當附加/無 效模塊和重組模塊中的一個或多個的額外的例程在阻止對索引的第二區域的訪問時,涉及 索引的第一區域的存儲請求被服務,其中當附加/無效模塊和重組模塊中的一個或多個的 額外的例程在服務涉及第二區域的存儲請求時,阻止對索引的第二區域的訪問。
13.如權利要求1所述的裝置,其中,第一存儲請求發送自第一客戶端,第二存儲請求 發送自第二客戶端。
14.如權利要求1所述的裝置,其中,響應于第一存儲請求通過將數據段被替換的數據 標記為無效更新索引,還包括標記位圖的一個或多個位,位圖中的位對應于數據存儲設備 中由第一數據和第二數據替換的數據段的數據所駐留的一個或多個位置。
15.如權利要求1所述的裝置,其中,響應于第一存儲請求通過將數據段被替換的數 據標記為無效更新索引,還包括暫時地將整個數據段標記為無效直到重組模塊基于第一數 據和第二數據更新索引,并且隨后更新索引以指示數據段除了被替換的數據之外的數據有 效。
16.如權利要求1所述的裝置,其中,響應于第一存儲請求通過將數據段被替換的數據 標記為無效更新索引還包括生成表,該表指示數據段被第一數據和第二數據替換的部分為 無效,并指示數據段未被第一數據和第二數據替換的部分為有效。
17.如權利要求1所述的裝置,其中,在基本上沒有數據的情況下接收第一存儲請求和 第二存儲請求中的一個或多個。
18.如權利要求1所述的裝置,其中,在基本上沒有數據的情況下將第一附加數據存儲 命令和第二附加數據存儲命令中的一個或多個發送到數據存儲設備。
19.如權利要求1所述的裝置,其中,存儲請求和附加數據存儲命令中的至少一個初始 化直接存儲器存取(DMA)進程或遠程直接存儲器存取(RDMA)進程以將數據段的數據轉移 到數據存儲設備。
20.一種協調存儲請求的系統,該系統包括數據存儲設備;和控制數據存儲設備的存儲控制器,該存儲控制器包括附加/無效模塊,用于響應于第一存儲請求的接收生成第一附加數據存儲命令以用第 一數據覆蓋存儲在數據存儲設備上的數據段的現有數據,該附加/無效模塊還用于響應于第二存儲請求的接收生成第二附加數據存儲命令以用第二數據覆蓋數據段的現有數據的 請求,第一數據和第二數據至少包括將以相同的偏移量存儲在數據段內的重疊數據的至少 一部分,在第一存儲請求之后接收第二存儲請求,該附加/無效模塊還用于響應于第一存 儲請求通過將數據段的數據標記為無效來更新索引,標記為無效的數據包括正被第一數據 替換的數據,該附加/無效模塊還用于響應于第二存儲請求通過將數據段的數據標記為無 效來更新索引,標記為無效的數據包括正被第二數據替換的數據;及重組模塊,用于基于第一數據更新索引并基于第二數據更新索引,其中,當在基于第二 數據更新索引之前基于第一數據索引更新索引時或在基于第一數據更新索引之前基于第 二數據更新索引時,組織被更新的索引以指示第二數據比第一數據更符合當前情況;其中,附加/無效模塊阻止對索引的訪問,直到附加/無效模塊已經完成更新索引,并 且重組模塊阻止對索引的訪問,直到重組模塊已經完成更新索引。
21.如權利要求20所述的系統,其中,數據存儲設備包括固態存儲設備。
22.如權利要求20所述的系統,其中,第一存儲請求和第二存儲請求接收自分離的請 求設備,其中分離的請求設備包括客戶端和服務器中的一個或多個。
23.如權利要求22所述的系統,其中,至少一個請求設備包括客戶端,附加/無效模塊 和重組模塊獨立于客戶端運行。
24.如權利要求20所述的系統,還包括服務器,其中,存儲控制器位于服務器內。
25.—種包括計算機可讀媒體的計算機程序制品,該計算機可讀媒體具有計算機可用 的程序代碼,可執行該程序代碼以實現協調存儲請求的操作,該計算機程序制品的操作包 括響應于第一存儲請求的接收生成第一附加數據存儲命令,以用第一數據覆蓋存儲在數 據存儲設備上的數據段的現有數據;響應于第二存儲請求的接收生成第二附加數據存儲命令,以用第二數據覆蓋數據段的 現有數據,第一和第二數據至少包括將以相同的偏移量存儲在數據段內的重疊數據的至少 一部分,在第一存儲請求之后接收第二存儲請求;響應于第一存儲請求通過將數據段的數據標記為無效來更新索引,其中,標記為無效 的數據包括正被第一數據替換的數據;響應于第二存儲請求通過將數據段的數據標記為無效來更新索引,其中,標記為無效 的數據包括正被第二數據替換的數據,其中,對索引的訪問被阻止,直到為第一存儲請求和第二存儲請求中的一個生成了附 加數據存儲命令且通過將數據段的數據標記為無效為第一存儲請求和第二存儲請求中的 一個更新了索引;基于第一數據更新索引;及基于第二數據更新索引,其中,當在基于第二數據更新索引之前基于第一數據索引更 新索引時或在基于第一數據更新索引之前基于第二數據更新索引時,組織被更新的索引以 指示第二數據比第一數據更符合當前情況,其中,對索引的訪問被阻止,直到基于第一數據和第二數據中的一個更新了索引。
全文摘要
本發明公開了在多處理器/多線程環境下協調存儲請求的裝置、系統和方法。附加/無效模塊1202從第一存儲請求生成第一附加數據存儲命令并從第二存儲請求生成第二附加數據存儲命令,在第一存儲請求之后接收第二存儲請求。存儲請求用第一和第二數據覆蓋現有數據,第一和第二數據具有至少一部分重疊數據。附加/無效模塊1202通過將正被覆蓋的數據標記為無效更新索引。重組模塊1204基于第一數據更新索引并基于第二數據更新索引。組織被更新的索引以指示第二數據比第一數據更符合當前情況,而不考處理的順序。這些模塊阻止對索引的訪問,直到這些模塊已經完成更新索引。
文檔編號G06F3/06GK102084331SQ200980121143
公開日2011年6月1日 申請日期2009年4月6日 優先權日2008年4月6日
發明者喬納森·撒切爾, 大衛·弗林, 邁克爾·扎佩 申請人:喬納森·撒切爾, 大衛·弗林, 弗森-艾奧公司, 邁克爾·扎佩