專利名稱:對于數(shù)據(jù)存儲的寫通信的聚集的制作方法
對于數(shù)據(jù)存儲的寫通信的聚集
背景技術:
當順序地寫數(shù)據(jù)時,諸如例如盤驅(qū)動器和基于閃存的存儲等的數(shù)據(jù)存儲是最有效的,而當寫隨機離散的數(shù)據(jù)時,該數(shù)據(jù)存儲是效率很低的。此外,當讀順序數(shù)據(jù)時盤驅(qū)動器是最有效的,而當讀隨機離散的數(shù)據(jù)時,盤驅(qū)動器是效率很低的。典型的現(xiàn)代盤驅(qū)動器在盤驅(qū)動器尋找盤上的任意位置所花費的時間內(nèi)能夠大約移動700千字節(jié)(KB)的數(shù)據(jù)。隨著技術進步,盤驅(qū)動器能夠在相同的時間段內(nèi)移動更大的數(shù)據(jù)量。大多數(shù)數(shù)據(jù)轉(zhuǎn)移遠遠小于700KB。結(jié)果,盤驅(qū)動器在非空閑時間段期間花費大量時間來尋找盤上的位置。
發(fā)明內(nèi)容
提供本概述是為了以簡化的形式介紹將在以下詳細描述中進一步描述的一些概念。本概述并不旨在標識出所要求保護的主題的關鍵特征或必要特征,也不旨在用于限定所要求保護的主題的范圍。提供用于順序地將原始要被寫入隨機存取介質(zhì)的卷中的數(shù)據(jù)聚集到的寫日志的處理設備和機器實現(xiàn)的方法。該處理設備可確定數(shù)據(jù)是否適于寫到寫日志。如果確定數(shù)據(jù)適于寫到寫日志,那么處理設備可順序地將數(shù)據(jù)聚集、或?qū)懙綄懭罩尽7駝t,數(shù)據(jù)可被寫到原始預期目的地。在多個條件中的至少一個發(fā)生時,寫日志的條目被排空到原始預期目的地。條件可包括但不限于寫日志處于其中新的日志條目不被允許的狀態(tài);關于寫日志駐留在其上的隨機存取介質(zhì)的輸入或輸出活動的缺乏;寫日志處于至少第一預定量的滿;寫日志處于至少第二預定量的滿,而不管隨機存取介質(zhì)的輸入或輸出活動;以及大于預定大小的重映射樹。重映射樹可將隨機存取介質(zhì)的地址范圍映射到寫日志的一個或多個條目。在某些實施例中,可按時間間隔將相應的檢查點寫到寫日志。相應的檢查點中的各個檢查點包括描述寫日志內(nèi)容的信息,使得重映射樹可在臟關閉(dirty shutdown)后被重建。包括在相應的檢查點內(nèi)的信息可從重映射樹的節(jié)點中獲得。附圖為了描述能夠獲得上述和其他優(yōu)點和特征的方式,以下將描述并通過參考附圖中示出的各具體實施例來呈現(xiàn)更為具體的描述??梢岳斫?,這些附圖僅描述各典型實施例, 從而不被認為是對其范圍的限制,將通過使用附圖用附加特征和細節(jié)來描述和說明各個實現(xiàn)。
圖1是示出可用于實現(xiàn)與本發(fā)明主題相一致的各實施例的示例性處理設備的功能框圖。圖2示出了與本發(fā)明的主題相一致的各實施例的用于存儲寫日志的示例性循環(huán)存儲。圖3示出了在隨機存取介質(zhì)的卷中的示例性寫日志。圖4示出了在圖3中顯示的示例性寫日志更詳細的視圖。圖5示出了與本發(fā)明的主題相一致的重映射樹的示例性結(jié)構。
圖6示出了重寫存儲在隨機存取介質(zhì)中的數(shù)據(jù)的影響,所述數(shù)據(jù)被映射到寫日志的一個條目。圖7和圖8是示出了用于處理對于寫到隨機存取介質(zhì)的接收到的寫請求、關于寫到寫日志的完成寫的指示的示例性過程的流程圖。圖9示出了在寫日志中的示例性條目以及條目的轉(zhuǎn)儲清除。圖10和圖11是示出了用于跟蹤寫日志的被轉(zhuǎn)儲清除的條目的示例性過程的流程圖。圖12是用于寫到寫日志以及基于寫日志變得有多滿來改變寫日志狀態(tài)的示例性過程的流程圖。圖13是用于確定是否排空寫日志的示例性過程的流程圖。圖14-16是用于生成排空寫計劃以有效地將寫日志排空到隨機存取介質(zhì)的示例性過程的流程圖。圖17是用于按規(guī)則的時間段來將檢查點寫到寫日志的示例性過程的流程圖。圖18是用于在臟關閉后恢復寫日志的示例性過程的流程圖。
具體實施例方式以下詳細討論各實施例。盡管討論各個具體實現(xiàn),但應當理解,這僅是出于說明的目的。相關領域的技術人員將認識到,可以使用其他組件和配置而不背離本發(fā)明的主題的精神和范圍。概覽提供了用于接收對諸如例如盤、基于閃存的存儲、或其他隨機存取介質(zhì)等的隨機存取介質(zhì)寫的請求的方法和系統(tǒng)。然后可分析該對于寫的請求以確定該請求是否適于向?qū)懭罩卷樞虻鼐奂.斦埱笫轻槍ο螂S機存儲介質(zhì)寫小于預定量的數(shù)據(jù)時,該請求被確定為適于向?qū)懭罩卷樞虻鼐奂?。在某些請求寫的實施例中,對于隨機存取介質(zhì),小于700KB的可調(diào)節(jié)閾值數(shù)據(jù)量可被確定為適于向?qū)懭罩卷樞虻鼐奂?。寫日志可駐留在隨機存取介質(zhì)的與原始預期目的地相同的卷內(nèi)、駐留在隨機存儲介質(zhì)的與原始預期目的地不同的卷內(nèi)、或駐留在與原始預期目的地不同的隨機存取介質(zhì)的不同卷內(nèi)。寫日志可包括多個條目,各個條目具有描述相應條目的元數(shù)據(jù)以及對應的載荷數(shù)據(jù)。當將數(shù)據(jù)寫到隨機存取介質(zhì)的請求被確定為適于寫到寫日志時,數(shù)據(jù)可被添加到寫日志的末尾。重映射樹可將寫日志外部的隨機存取介質(zhì)的位置映射到寫日志對應的條目, 并且反之亦然。排空是將寫日志中的條目移動到隨機存儲介質(zhì)的卷的預期目的地的過程。在多個條件下,寫日志可被排空到隨機存儲介質(zhì)的預期目的地。例如,在某些實施例中,條件可包括寫日志處于其中對于寫日志的新條目不被允許的狀態(tài);寫日志大于第一預定量的滿; 沒有關于隨機存取介質(zhì)的輸入/輸出活動以及寫日志大于第二預定量的滿,其中第二預定量小于第一預定量;以及重映射樹大于第三預定大小。在排空期間,鄰近的寫可被合并成單個排空寫并且排空寫可被排序以最小化尋找時間。在某些實施例中,可按可調(diào)節(jié)時間間隔將檢查點寫到寫日志。檢查點可包括概括寫日志內(nèi)容的信息。臟關閉可以是非預期的關閉或系統(tǒng)故障。在臟關閉或系統(tǒng)的正常關閉后,包括在被寫到寫日志的最后檢查點中的信息可被用以通過重建重映射樹來從臟關閉或正常關閉中恢復。示例性處理設備圖1是示出可用于實現(xiàn)與本發(fā)明的主題相一致的各實施例的示例性處理設備100 的功能框圖。處理設備100可以是臺式個人計算機(PC)、筆記本或膝上型PC、服務器、或其它處理設備。處理設備100可包括總線110、存儲器130、只讀存儲器(ROM) 140、處理器120 以及存儲設備150??偩€110可以準許處理設備100的各組件之間的通信。處理器120可以包括解釋和執(zhí)行指令的至少一個常規(guī)處理器或微處理器。存儲器 130可以是隨機存取存儲器(RAM)或存儲供處理器120執(zhí)行的信息和指令的另一種類型的動態(tài)存儲設備。存儲器130還可以存儲在處理器120執(zhí)行指令期間使用的臨時變量或其他中間信息。ROM 140可以包括常規(guī)ROM設備或為處理器120存儲靜態(tài)信息和指令的另一種類型的靜態(tài)存儲設備。存儲設備150可包括硬盤以及對應的驅(qū)動器、基于閃存的存儲設備、 或用于存儲用于處理器120的數(shù)據(jù)和/或指令的其他類型的隨機存取數(shù)據(jù)存儲設備或介質(zhì)。處理設備100可響應于處理器120執(zhí)行諸如例如存儲器130、ROM 140、存儲設備 150或其他介質(zhì)等有形機器可讀介質(zhì)中所包含的指令序列來執(zhí)行這些功能。這些指令可從另一機器可讀介質(zhì)或經(jīng)由通信接口(未示出)從單獨的設備讀入存儲器130中。寫日志在與本發(fā)明的主題相一致的實施例中,用于順序地聚集旨在用于隨機存儲介質(zhì)的寫的寫日志可以是諸如例如盤或其他隨機存儲介質(zhì)等的隨機存儲介質(zhì)內(nèi)的循環(huán)存儲區(qū)域。 圖2示出了示例性寫日志200。寫日志200可包括多個條目,包括開始條目202和結(jié)束條目 204。開始條目202可以是寫日志200最舊的條目,而結(jié)束條目204可以是寫日志200最新的條目。即,新的條目被附加到寫日志200的結(jié)束條目204后,并且結(jié)束條目204可被更新以對應于最新的附加的條目。圖3示出了與本發(fā)明的主題相一致的可存儲在隨機存儲介質(zhì)300上的示例性結(jié)構。隨機存儲介質(zhì)300可包括塊存儲結(jié)構302以及記錄在隨機存取介質(zhì)300上的寫日志 304。塊存儲結(jié)構302可包括關于隨機存儲介質(zhì)300不被文件系統(tǒng)使用的區(qū)域的信息。該區(qū)域可對應于為寫日志304順序地聚集旨在用于隨機存儲介質(zhì)300的卷的數(shù)據(jù)而保留的區(qū)域。在某些實施例中,寫日志304可被包括在隨機存儲介質(zhì)300的與原始預期目的地不同的卷中,或被包括在不同的隨機存儲介質(zhì)的不同的卷中。寫日志304可包括第一控制區(qū)域306和第二控制區(qū)域308,其可分別位于寫日志 304的開始和結(jié)束處。第一和第二控制區(qū)域可包括關于寫日志304的信息,該信息包括但不限于,關于寫日志304的開始條目的信息以及關于包裝日志304的物理結(jié)束的信息。在某些實施例中,關于開始條目的信息可包括寫日志304的開始日志序列號(LSN),并且關于寫日志304的物理結(jié)束的信息可包括包裝LSN。某些實施例可包括諸如關于第一控制區(qū)域 306和第二控制區(qū)域308內(nèi)最后的檢查點的位置的指針或其他信息等的信息。寫日志304的各個條目對應于一 LSN。LSN可包括包裝計數(shù)部分和偏移部分。包裝計數(shù)部分可以是發(fā)生包裝回寫日志304的物理開始處的次數(shù)。偏移部分可以是扇區(qū)內(nèi)或某些其他測量單位內(nèi)離開寫日志304的物理開始處的偏移。包裝LSN可以是以其包裝到寫日志304的物理開始處并且可發(fā)生包裝計數(shù)的增加的LSN。例如,如果包裝LSN是 < 包裝計數(shù)>.400,其中400是離開寫日志304的物理開始處的偏移,那么當達到當前的LSN時,例如,2. 400,發(fā)生到寫日志304的物理開始處的包裝并且當前的LSN可變?yōu)?. 0。寫日志304可以包括多個條目。如圖4中示出的,各個條目可包括條目元數(shù)據(jù)402 以及條目載荷數(shù)據(jù)404。條目元數(shù)據(jù)402可包括關于相應的條目的信息。例如,條目元數(shù)據(jù) 402可包括關于相應的條目大小的信息、和隨機存儲介質(zhì)300的卷內(nèi)的預期目的地的邏輯塊地址(LBA)以及不同的或其他信息。此外,條目元數(shù)據(jù)402可包括校驗和或指示相應的條目是否是有效的其他數(shù)據(jù)。在某些實施例中,條目元數(shù)據(jù)402以及條目載荷數(shù)據(jù)404可以是扇區(qū)對齊的。重映射樹可被維護在諸如例如存儲器或RAM等的動態(tài)存儲中。重映射樹可將諸如例如隨機存儲介質(zhì)的卷中的LBA等的預期目的地映射到寫日志中的條目,并且反之亦然。 重映射樹可被結(jié)構化為AVL樹。AVL樹是自平衡二叉搜索樹,其中任一節(jié)點的子子樹高度上的不同不超過一。圖5示出了示例性重映射樹。如可在示例性重映射樹中看到的,所有子子樹的高度與開始于相同分層的其他子子樹的高度上的不同不超過一。當然,在其他實施例中,重映射樹可以是不同的數(shù)據(jù)結(jié)構。重映射樹的各個節(jié)點可包括諸如例如預期目的地的LBA、寫日志內(nèi)對應的LSN等的信息、描述條目類別的信息、以及其他或不同的信息。如果隨機存儲介質(zhì)的LBA被寫了兩次,那么第二寫使第一寫無效。類似地,如果對于LBA的第一寫被重定向到寫日志并且對于LBA的第二寫也被重定向到寫日志,那么寫日志內(nèi)對應于第一寫的條目可由寫日志內(nèi)對應于第二寫的條目取代。這也可被稱為內(nèi)部重寫。然而,如果第一寫被重定向到寫日志的同時第二寫被直接寫到隨機存儲介質(zhì)的卷內(nèi)的LBA,那么寫日志內(nèi)對應于第一寫的條目不再有效。指示對應于第一寫的條目不再有效的無效記錄可被附加到寫日志。圖6示出了隨機存儲介質(zhì)的卷600。寫日志602可被包括在卷600中。第一寫可被重定向到寫日志602并被記錄為寫日志602的條目604。第一寫可具有對應于卷600內(nèi)的目的地608的預期目的地。第二寫606可被直接寫到目的地608。由此,條目604現(xiàn)在是無效的。無效記錄610可被附加到寫日志602以指示條目604現(xiàn)在是無效的。稍后,當寫日志602的條目要被排空到卷600的相應的預期目的地時,條目604不被排空到目的地 608,因為這么做將重寫目的地608并且損環(huán)目的地608的內(nèi)容。相反,條目604僅被丟棄。示例性處理圖7是示出用于確定接收到的寫請求是否適合于順序地聚集到寫日志,并且如果是,則將寫請求重定向到寫日志的示例性過程的流程圖。該過程可開始于處理設備確定接收到的寫請求是否適于順序地聚集到寫日志(動作704)。圖8是示出用于執(zhí)行圖7的動作704的一個示例性過程的流程圖。過程可開始于處理設備確定接收到的寫請求是否是用于流的(動作802;圖8)。處理設備可通過監(jiān)視讀和寫請求的卷偏移以確定讀和寫模式是否是順序的來檢測流。如果讀和寫模式被確定為順序的,那么處理設備檢測到了流并且不將流轉(zhuǎn)向?qū)懭罩?。如果檢測到流,處理設備可指示接收到的寫請求不適于重定向到寫日志(動作808)并且過程可結(jié)束。
如果在動作802,處理設備確定接收到的寫請求不用于流,那么處理設備可確定要被寫的數(shù)據(jù)或數(shù)據(jù)集是否小于預定的大小,諸如700KB或另一大小(動作804)。如果數(shù)據(jù)或數(shù)據(jù)集不小于預定的大小,那么處理設備可指示寫請求不適于重定向到寫日志(動作808) 并且過程結(jié)束。如果在動作804,處理設備確定要被寫的數(shù)據(jù)或數(shù)據(jù)集小于預定的大小,那么處理設備可指示寫請求適于重定向到寫日志(動作806)。隨后該過程可以完成。返回到圖7,如果在動作704處理設備確定寫請求適于順序地聚集到寫日志,那么處理設備可確定寫日志的狀態(tài)是否是僅僅無效的,指示僅僅無效記錄可被寫到寫日志(動作706)。如果寫日志的狀態(tài)不是僅僅無效的,那么處理設備將數(shù)據(jù)或數(shù)據(jù)集寫入到寫日志的條目(動作708)。如果對于寫日志的寫成功地完成,那么處理設備可更新將隨機存儲介質(zhì)的卷內(nèi)的預期目的地映射到寫日志內(nèi)的條目的重映射樹(動作716)。如果在動作704,處理設備確定要被寫的數(shù)據(jù)或數(shù)據(jù)集不適于順序地聚集到寫日志,那么數(shù)據(jù)或數(shù)據(jù)集可被寫到隨機存儲介質(zhì)的卷內(nèi)的預期目的地(動作710)。處理設備可接著通過參考重映射樹來確定預期目的地的任意LBA是否對應于寫日志的一個或多個條目(動作712)。如果預期目的地的任意LBA對應于寫日志的一個或多個條目,那么一個或多個無效記錄可被附加到寫日志以指示對應于寫日志的一個或多個條目的預期目的地的無效(動作714)。對于寫日志的寫可被無序地完成。例如,圖9示出了寫日志的條目以及各個條目相應的LSN。打上陰影的條目對應于不具有待決寫的條目(即,用于條目的對于寫日志的相應的寫已經(jīng)完成)未打上陰影的條目對應于具有待決寫的條目。因此,根據(jù)圖9,由LSN 0. 256指示的條目具有待決的寫。被轉(zhuǎn)儲清除的LSN是對應于寫日志的條目的LSN,使得在該對應條目之前的寫日志的所有條目不具有待決寫。開始LSN是對應于要被考慮用于排空或要被包括在檢查點內(nèi)的寫日志的第一條目的LSN。均在以下討論的寫日志的排空以及檢查點的創(chuàng)建可不考慮超過被轉(zhuǎn)儲清除的LSN的條目。轉(zhuǎn)儲清除LSN是對應于用于轉(zhuǎn)儲清除的目標條目的LSN。結(jié)束LSN是對應于寫日志的邏輯結(jié)束的LSN。圖10和圖11是示出了用于跟蹤寫日志內(nèi)的被轉(zhuǎn)儲清除的LSN的示例性過程的流程圖。過程可開始于處理器設備在發(fā)生對于日志的任何寫之前,將轉(zhuǎn)儲清除LSN初始化為結(jié)束LSN(動作1002),并將被轉(zhuǎn)儲清除的LSN初始化為開始LSN(動作1004)。當前的轉(zhuǎn)儲清除計數(shù)可以是在轉(zhuǎn)儲清除LSN之前的發(fā)出的對于寫日志的未完成的寫的數(shù)量。當前的轉(zhuǎn)儲清除計數(shù)可被初始化為0 (動作1006)。下一轉(zhuǎn)儲清除計數(shù)可以是在轉(zhuǎn)儲清除LSN之后的發(fā)出的對于寫日志的未完成的寫的數(shù)量。下一轉(zhuǎn)儲清除計數(shù)可被初始化為0(動作1008)。接著,可接收到關于對于寫日志的寫的寫完成(動作1010)。處理設備可確定寫完成是否用于在轉(zhuǎn)儲清除LSN之前的寫日志條目(動作1012)。如果不是,那么處理設備可遞減下一轉(zhuǎn)儲清除計數(shù),其可指示關于在轉(zhuǎn)儲清除LSN之后的條目的待決寫的數(shù)量。處理設備然后可重復動作1010-1012。如果在動作1012,處理設備確定寫完成是用于在對應于轉(zhuǎn)儲清除LSN的條目之前的寫日志條目,那么處理設備可遞減當前的轉(zhuǎn)儲清除計數(shù)(動作1016)。
處理設備可接著確定當前的轉(zhuǎn)儲清除計數(shù)是否等于0,其指示在對應于轉(zhuǎn)儲清除 LSN的條目之前的所有寫日志條目完成(動作1102;圖11)。如果當前的轉(zhuǎn)儲清除計數(shù)等于 0,那么處理設備可將被轉(zhuǎn)儲清除的LSN設為轉(zhuǎn)儲清除LSN(動作1104)。處理設備可接著將轉(zhuǎn)儲清除LSN設為等于結(jié)束LSN(動作1106)?;蛘?,處理設備可將轉(zhuǎn)儲清除LSN設為等于不是結(jié)束LSN的LSN,諸如例如,對應于在被轉(zhuǎn)儲清除的LSN之后不大于預定數(shù)量的條目的LSN。處理設備可接著將當前的轉(zhuǎn)儲清除計數(shù)設為等于下一轉(zhuǎn)儲清除計數(shù)(動作1108)。 下一轉(zhuǎn)儲清除計數(shù)可被設為0(動作1110)?;蛘撸绻D(zhuǎn)儲清除LSN被設為不是結(jié)束LSN 的LSN,那么下一轉(zhuǎn)儲清除計數(shù)可被設為指示在對應于轉(zhuǎn)儲清除LSN的條目之前的條目的待決寫的數(shù)量的值。處理設備可再次執(zhí)行動作1010(圖10)。圖12是用于寫到寫日志的示例性過程的流程圖。過程可開始于處理設備發(fā)出對寫日志在對應于結(jié)束LSN的條目處寫的寫請求(動作1202)。接著,轉(zhuǎn)儲清除計數(shù)可被遞增 (動作1204)并且結(jié)束LSN可被更新(動作1206)。處理設備接著確定寫日志是否大于預定量的滿或重映射樹是否大于預定的大小(動作1208)。如果是,那么寫日志的狀態(tài)可被設為禁用(動作1210)。如果寫日志不大于預定量的滿,那么寫日志的狀態(tài)可被設為啟用,這樣,包括無效記錄以及其他類型的條目可被添加到寫日志(動作1212)。圖13是用于開始寫日志的排空的示例性過程的流程圖。過程可開始于處理設備確定處理設備是否運行在電池電源上(動作1302)。如果是,為了節(jié)省電力,可不執(zhí)行排空并且過程可結(jié)束。如果在動作1302,處理設備確定處理設備沒有運行在電池電源上,那么處理設備可確定寫日志的狀態(tài)是否是僅僅無效或禁用的(動作1304)。如果寫日志的狀態(tài)是僅僅無效或被禁用的,那么處理設備可將寫日志排空到隨機存儲介質(zhì)的預期目的地(動作1314)。如果在動作1304,處理設備確定寫日志的狀態(tài)不是僅僅無效或不是被禁用的,那么處理設備可確定寫日志是否大于第一預定量的滿(動作1308)。在某些實施例中,第一預定量的滿可以是67%的滿。在其他實施例中,第一預定量的滿可以另一合適的值。如果寫日志大于第一預定量的滿,那么處理設備可排空寫日志(動作1314)。如果寫日志不大于第一預定量的滿,那么處理設備可確定是否不存在關于隨機存取介質(zhì)的輸入/輸出以及寫日志是否大于第二預定量的滿,使得第二預定量的滿小于第一預定量的滿(動作1310)。如果處理設備確定不存在關于隨機存取介質(zhì)的輸入/輸出并且寫日志大于第二預定量的滿,那么處理設備可排空寫日志(動作1314)。如果處理設備確定存在關于隨機存取介質(zhì)的輸入/輸出活動或者寫日志不大于第二預定量的滿,那么處理設備可確定重映射樹是否大于第三預定大小(動作1312)。如果重映射樹大于第三預定大小,那么處理設備可排空寫日志(動作1314)。圖14-16是示出與本發(fā)明主題相一致的實施例中的用于排空寫日志的示例性過程的流程圖。過程可開始于處理設備掃描對應于寫日志條目的重映射樹的要排空的節(jié)點集 (動作1402)。處理設備可接著確定在寫日志開始處的記錄是否已經(jīng)被無效(動作1404)。 如果在寫日志開始處的記錄已經(jīng)被無效,那么處理設備可將開始LSN提前到重映射樹內(nèi)沒有被無效的最低的LSN(動作1406)。處理設備可接著讀取重映射樹的多個節(jié)點(例如,20個節(jié)點或另一合適數(shù)量的節(jié)點)并且可生成排空寫計劃(動作1408)。只有對應于在被轉(zhuǎn)儲清除的LSN之前的LSN的寫日志的條目被排空。處理設備可接著確定排空寫是否與活動的卷寫重疊(動作1410)。 當排空寫和活動的卷寫是對于隨機存儲介質(zhì)的至少一個相同的LBA時,排空寫與活動的卷寫重疊。當檢測到重疊時,處理設備可等待卷寫完成(動作141 并且處理設備可通過重新執(zhí)行動作1402再次開始過程。如果在動作1410,處理設備確定排空寫不與活動的卷寫重疊,那么處理設備可將鄰近的排空寫合并到單個排空寫以減少關于隨機存取介質(zhì)的輸入和輸出(動作1502 ;圖 15)。處理設備可接著按卷偏移依序執(zhí)行排空寫以最小化尋找時間(動作1504)。在完成排空寫后,處理設備可更新開始LSN和重映射樹(動作1506)。接著,處理設備可確定排空是否是因為寫日志被禁用而發(fā)生的(動作1508)。如果是,那么處理設備可確定寫日志是否是空的(動作1510)。如果寫日志是空的,那么過程可結(jié)束。否則,處理設備可再次執(zhí)行動作1402。如果在動作1508,處理設備確定排空不是由于寫日志被禁用而發(fā)生,那么處理設備可確定排空是否是因為沒有關于隨機存取介質(zhì)的輸入/輸出活動而發(fā)生(動作1512)。 如果是,處理設備可確定除了涉及寫日志的排空的活動,是否還有關于隨機存取介質(zhì)的任何輸入/輸出活動(動作1514)。如果是,那么過程結(jié)束。否則,處理設備可確定寫日志是否是相對空的(動作1516)。當寫日志小于預定量的滿時,諸如例如,10%或另一合適的值, 寫日志可被確定為相對空的。如果在步驟1516,處理設備確定寫日志不是相對空時,那么處理設備可再次執(zhí)行動作1402 (圖14)。如果在步驟1512,處理設備確定排空不是由于沒有關于隨機存取介質(zhì)的輸入/輸出活動而發(fā)生,那么處理設備可確定重映射樹的大小是否小于預定量(動作1602 ;圖16)。 如果是,那么過程可結(jié)束。否則,處理設備可再次執(zhí)行動作1402(圖14)。圖17是用于將檢查點寫到寫日志的示例性過程的流程圖。檢查點可包括按時間間隔的描述寫日志的所有條目的信息。完整的檢查點可以是大的。寫大量的數(shù)據(jù)可減緩處理設備并可在檢查點的寫期間負面地影響用戶的體驗。在某些實施例中,完整的檢查點可被劃分成一組較小的遞增檢查點。各個遞增檢查點可指向先前的遞增檢查點。遍歷先前的遞增檢查點可實際上提供對應于完整的檢查點的信息。先前檢查點的遍歷在對應于開始 LSN的寫日志條目處結(jié)束,因為在對應于開始LSN的寫日志條目之前不存在寫日志條目。在鏈接的檢查點列表內(nèi)只有一個節(jié)點的情況下,完整的檢查點可等同于遞增檢查點。在以下上下文中,由于完整的檢查點可被視為遞增檢查點的特殊情況,檢查點指代遞增檢查點。過程可開始于處理設備等待合適的時刻來將檢查點寫到寫日志,檢查點描述在被轉(zhuǎn)儲清除的LSN之前、先前的檢查點之后的日志范圍(動作1702)。例如,可基于自先前檢查點以來沒有檢查點的寫日志空間、是否啟動關閉、在沒有檢查點的寫日志空間內(nèi)存在的壞扇區(qū)、或其他條件來確定合適的時刻。接著,處理設備可掃描重映射樹,該重映射樹將隨機存取介質(zhì)的卷的LBA映射到寫日志內(nèi)的條目(動作1704)。處理設備可接著創(chuàng)建概括重映射樹的檢查點,可將該檢查點寫到寫日志的對應于結(jié)束LSN的條目,并可更新結(jié)束LSN(動作1706)。處理設備然后可重復動作1702-1706。注意的是,只有關于在被轉(zhuǎn)儲清除的LSN 之前的寫日志的條目的信息才被記錄在檢查點內(nèi)。臟關閉可以是非預期的關閉或系統(tǒng)崩潰。圖18是用于從臟關閉恢復的示例性過程的流程圖。在某些實施例中,可以以對待臟關閉相同的方式對待正常關閉,除了可在正常系統(tǒng)關閉之前寫檢查點以最小化要在重新啟動之后掃描的日志空間量之外。過程可開始于處理設備從寫日志的第一控制區(qū)域或第二控制區(qū)域獲得開始LSN, 并確定開始LSN是否是有效的(動作1802)。處理設備可通過讀取對應于開始LSN的寫日志條目以及確定該寫日志條目的校驗和是否是有效的、通過檢查該寫日志條目的另一字段是否有期望的值或預期的值、或通過其他方式來確定開始LSN是否是有效的。如果開始LSN被確定為不是有效的,那么寫日志可被考慮為不可恢復的并且可提供針對該影響的通知(動作 1804)。如果開始LSN被確定為有效的,那么處理設備可確定在寫日志中是否存在任何檢查點(動作1806)。在某些實施例中,對于最后的檢查點的指針可被存儲在寫日志的第一控制區(qū)域以及第二控制區(qū)域。在這樣的實施例中,可獲得該指針并且可讀取并驗證檢查點鏈的最后的檢查點。在其他實施例中,處理設備可從對應于開始LSN的條目開始掃描寫日志以搜索檢查點條目,直到?jīng)]有找到寫日志的其他有效條目。如果在寫日志內(nèi)存在至少一個檢查點,那么處理設備可尋找寫日志內(nèi)檢查點鏈的最后的檢查點(動作1808)。處理設備可接著通過遍歷所有檢查點直到找到對應于開始LSN 的寫日志條目來基于檢查點鏈重建重映射樹。(動作1810)。掃描LSN接著可被設為對應于沒有被任何檢查點描述的第一寫日志條目(動作1811)。如果在動作1806,處理設備確定寫日志內(nèi)不存在檢查點,那么處理設備可將掃描 LSN設為開始LSN(動作1820)。在執(zhí)行動作1810或動作1820后,處理設備可接著讀取在對應于掃描LSN的條目之后的下一有效條目(動作1812)。在某些實施例中,寫日志的一個或多個無效條目可在寫日志的有效條目之間存在。處理設備可接著確定是否找到有效條目 (動作1814)。如果找到有效條目,那么處理設備可更新重映射樹(動作1816)并可再次執(zhí)行動作1812-1814。如果在動作1814,處理設備確定沒有找到寫日志的有效條目,那么處理設備可將結(jié)束LSN設為對應于最后找到的寫日志的有效條目(動作1818)。隨后該過程可以完成。結(jié)論盡管用對結(jié)構特征和/或方法動作專用的語言描述了本主題,但可以理解,所附權利要求書中的主題不必限于上述具體特征或動作。相反,上述具體特征和動作是作為實現(xiàn)權利要求的示例形式公開的。雖然以上描述可能包含具體細節(jié),但決不應將其解釋為是對權利要求的限制。所述各實施例的其他配置也是本發(fā)明的范圍的一部分。此外,根據(jù)本發(fā)明的主題的各個實現(xiàn)可以具有參考圖7、8以及10-18比所描述的更多或更少動作,或者可以按與所示出的順序不同的順序來實現(xiàn)各個動作。因此,附權利要求書及其合法的等效技術方案定義本發(fā)明,而非任何給出的具體示例。
權利要求
1.一種用于順序地聚集在隨機存儲介質(zhì)上的寫日志內(nèi)的數(shù)據(jù)集的機器實現(xiàn)的方法,所述機器實現(xiàn)的方法包括確定所述數(shù)據(jù)集是否適于順序聚集到所述寫日志(704);當確定所述數(shù)據(jù)集適于順序聚集時,順序地將所述數(shù)據(jù)集寫到所述寫日志,而不是寫到所述隨機存取介質(zhì)上的預期目的地(708);維護將所述寫日志內(nèi)的條目映射到所述隨機存取介質(zhì)的卷內(nèi)的邏輯塊地址的重映射樹(716);在檢測到多個條件中的任意一個時,將所述寫日志的條目排空到所述隨機存取介質(zhì)上相應的預期目的地(1314),所述多個條件包括所述寫日志的禁用(1304)、關于所述隨機存取介質(zhì)的輸入/輸出活動的缺乏以及所述寫日志大于第一預定量的滿(1310)、所述寫日志是至少第二預定量的滿而不管關于所述隨機存取介質(zhì)的輸入/輸出活動、所述第二預定量大于所述第一預定量(1308)以及所述重映射樹大于第三預定大小(1312)。
2.如權利要求1所述的機器實現(xiàn)的方法,其中確定所述數(shù)據(jù)聚是否適于順序聚集到所述寫日志進一步包括確定所述數(shù)據(jù)集是否小于預定大?。灰约爱敶_定所述數(shù)據(jù)集小于預定大小時,確定所述數(shù)據(jù)集適于順序聚集到所述寫日志。
3.如權利要求1所述的機器實現(xiàn)的方法,其特征在于,還包括在特定時間將相應的完整的檢查點或相應的遞增檢查點寫到所述寫日志,各個相應的完整檢查點或各個相應的遞增檢查點包括描述所述寫日志內(nèi)容的信息。
4.如權利要求1所述的機器實現(xiàn)的方法,其特征在于,還包括 在臟關閉后恢復所述寫日志,所述恢復進一步包括確定是否至少一個檢查點被包括在所述寫日志中,至少一個檢查點中的各個檢查點包括描述所述寫日志內(nèi)容的信息;當確定至少一個檢查點被包括在所述寫日志中,尋找所述寫日志內(nèi)最后的檢查點; 至少部分地基于所述最后的檢查點來重建所述重映射樹;從所述寫日志中讀取對應于不具有被包括在任意檢查點內(nèi)的對應信息的所述寫日志的第一條目的條目,直到?jīng)]有找到所述寫日志其他有效的條目; 當找到所述寫日志的有效條目時,更新所述重映射樹;以及基于最后找到的所述寫日志的有效條目,設置所述寫日志的結(jié)束日志序列號。
5.如權利要求4所述的機器實現(xiàn)的方法,其中當對于是否至少一個檢查點被包括在所述寫日志內(nèi)的確定是確定沒有檢查點被包括在所述寫日志內(nèi),所述寫日志的恢復進一步包括從所述寫日志的開始處讀取所述寫日志,直到?jīng)]有找到所述寫日志其他的有效條目;以及基于所述寫日志的找到的有效條目,更新所述重映射樹。
6.如權利要求1所述的機器實現(xiàn)的方法,其特征在于,還包括將無效記錄寫到所述寫日志的至少一個條目,所述無效記錄指示所述寫日志的所述至少一個條目是無效的,其中,所述寫日志的無效條目不被排空到所述隨機存取介質(zhì)上相應的預期目的地。
7.如權利要求1所述的機器實現(xiàn)的方法,其中所述寫日志被包括<0}在所述隨機存取介質(zhì)的所述卷內(nèi)、所述隨機存取介質(zhì)不同的卷內(nèi)、或不同的隨機存取介質(zhì)的不同卷內(nèi)。
8.如權利要求1至7任一所述的機器實現(xiàn)的方法,其中有形機器可讀介質(zhì)包括用于至少一個處理器的指令以實現(xiàn)所述機器實現(xiàn)的方法。
9.一種用于順序地聚集駐留在盤上的寫日志內(nèi)的數(shù)據(jù)集的系統(tǒng),所述系統(tǒng)包括 至少一個處理器(120);以及連接到所述至少一個處理器的存儲器(130),所述存儲器進一步包括 用于當數(shù)據(jù)集的大小小于預定大小時,確定所述數(shù)據(jù)集是否適于順序地寫到所述寫日志的指令(704、804、806);用于當確定所述數(shù)據(jù)集適于順序?qū)憰r,順序地將所述數(shù)據(jù)集寫到所述寫日志,而不是寫到所述盤上的預期目的地的指令(708);用于維護用于在所述寫日志內(nèi)的條目與所述盤的卷內(nèi)的邏輯塊地址之間映射的重映射樹的指令(716),以及用于當檢測到關于所述盤的輸入/輸出活動的缺乏以及所述寫日志是至少預定量的滿時,將所述寫日志排空到所述盤上相應的預期目的地的指令(1310)。
10.如權利要求9所述的系統(tǒng),其特征在于,所述存儲器還包括用于將無效記錄寫到所述寫日志的指令,所述無效記錄指示用于所述寫日志的一個或多個條目的所述盤的邏輯塊地址是無效的。
11.如權利要求10所述的系統(tǒng),其特征在于,所述存儲器還包括用于僅僅將所述寫日志條目的未被無效的條目排空到所述盤上相應的預期目的地的指令。
12.如權利要求9所述的系統(tǒng),其中所述重映射樹是avl樹。
13.如權利要求9所述的系統(tǒng),其特征在于,所述存儲器還包括用于按時間間隔將相應的完整的檢查點或相應的遞增檢查點寫到所述寫日志,各個相應的完整檢查點或相應的遞增檢查點包括描述在各個相應的完整檢查點或相應的遞增檢查點被寫時刻的所述寫日志內(nèi)容的信息。
14.如權利要求9所述的系統(tǒng),其特征在于,所述存儲器還包括用于確定臟關閉后是否至少一個檢查點被包括在所述寫日志中的指令; 用于當確定至少一個檢查點被包括在所述寫日志中,尋找所述寫日志內(nèi)最后的檢查點的指令;用于至少部分地基于所述最后的檢查點來重建所述重映射樹的指令; 用于從所述寫日志中讀取對應于不具有被包括在任意檢查點內(nèi)的信息的所述寫日志的第一條目的條目,直到?jīng)]有找到所述寫日志其他有效的條目的指令;以及用于在找到所述寫日志的有效條目后,更新所述重映射樹的指令。
15.如權利要求9所述的系統(tǒng),其特征在于,所述存儲器還包括用于確定預期要被寫到所述盤上的預期目的地的數(shù)據(jù)集是否被包括在流中的指令;以及用于當確定所述數(shù)據(jù)集被包括在流中時,確定所述數(shù)據(jù)集不適于被寫到所述寫日志的指令。
全文摘要
提供了用于順序地將數(shù)據(jù)聚集到包括在隨機存儲介質(zhì)的卷內(nèi)的寫日志的方法和處理設備。當接收到的寫請求的數(shù)據(jù)被確定為適于順序地聚集到寫日志時,數(shù)據(jù)可被寫到寫日志,并且用于將隨機存取介質(zhì)上的原始預期目的地映射到寫日志內(nèi)一個或多個對應的條目的重映射樹可被維護并更新。按時間段,檢查點可被寫到寫日志。檢查點可包括描述寫日志條目的信息。一個或多個檢查點可被用以至少部分地,在臟關閉之后恢復寫日志。在多個條件中的一個發(fā)生時,寫日志的條目被排空到相應的原始預期目的地。
文檔編號G06F9/06GK102160030SQ200980137190
公開日2011年8月17日 申請日期2009年8月27日 優(yōu)先權日2008年9月19日
發(fā)明者D·G·莫斯, K·梅拉, S·叢, S·布朗代, S·維爾馬, W·R·蒂普頓 申請人:微軟公司