專利名稱:用于使用滑動(dòng)寫入窗口機(jī)制寫入數(shù)據(jù)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般性地涉及計(jì)算機(jī),并且更具體地涉及在使用處理器設(shè)備的計(jì)算機(jī)環(huán)境中用于使用滑動(dòng)寫入窗口機(jī)制寫入數(shù)據(jù)的方法、系統(tǒng)以及計(jì)算機(jī)程序產(chǎn)品實(shí)施方式。
背景技術(shù):
在諸如可以在公司、政府機(jī)構(gòu)或其他實(shí)體中使用的企業(yè)數(shù)據(jù)處理布置中,信息經(jīng)常被存儲(chǔ)在服務(wù)器上并且由用戶例如通過(guò)網(wǎng)絡(luò)訪問(wèn)。該信息可以包括有關(guān)要處理的程序和 /或數(shù)據(jù)的任何類型的信息。使用他們的個(gè)人計(jì)算機(jī)、工作站等(一般為“計(jì)算機(jī)”)的用戶將使得他們的計(jì)算機(jī)能夠獲取要處理的信息,并且還在例如遠(yuǎn)程服務(wù)器上存儲(chǔ)信息。一般地,服務(wù)器在典型地包括數(shù)個(gè)盤存儲(chǔ)單元的大容量存儲(chǔ)子系統(tǒng)中存儲(chǔ)數(shù)據(jù)。 數(shù)據(jù)存儲(chǔ)在諸如文件之類的單元中。在服務(wù)器中,可以在一個(gè)盤存儲(chǔ)單元上存儲(chǔ)文件,或者可備選地可以在若干盤存儲(chǔ)單元上存儲(chǔ)文件的各部分。為了提供冗余并且提高性能,可以在獨(dú)立盤冗余陣列(RAID)拓?fù)渲信渲枚鄠€(gè)存儲(chǔ)設(shè)備,在該獨(dú)立盤冗余陣列(RAID)拓?fù)渲幸訰AID等級(jí)(rank)來(lái)組織存儲(chǔ)卷。企業(yè)的計(jì)算機(jī)網(wǎng)絡(luò)可以具有位于遠(yuǎn)離彼此并且遠(yuǎn)離企業(yè)用戶的的多個(gè)存儲(chǔ)網(wǎng)絡(luò)。存儲(chǔ)網(wǎng)絡(luò)也可以駐留(host)在不同類型的系統(tǒng)上。為了正確地執(zhí)行任務(wù),企業(yè)用戶可能要求對(duì)在全部存儲(chǔ)網(wǎng)絡(luò)中所包含的數(shù)據(jù)進(jìn)行快速和可靠的訪問(wèn)。由于實(shí)時(shí)發(fā)生對(duì)該數(shù)據(jù)的訪問(wèn),所以期望盡快發(fā)生存儲(chǔ)操作(比如寫或讀)。
發(fā)明內(nèi)容
鑒于本領(lǐng)域的當(dāng)前狀態(tài),存在對(duì)在計(jì)算機(jī)環(huán)境中將數(shù)據(jù)高效地寫入至存儲(chǔ)器的方法的需求,其中寫入器(例如線程/進(jìn)程)向存儲(chǔ)系統(tǒng)寫入序列數(shù)據(jù),并且寫入操作可以按照不同于它們生成的序列順序的順序而到達(dá)存儲(chǔ)系統(tǒng)。示例為如下系統(tǒng)其中寫入器在網(wǎng)絡(luò)上向存儲(chǔ)系統(tǒng)發(fā)送數(shù)據(jù),并且封裝寫入操作的網(wǎng)絡(luò)消息可以按照不同于它們的生成順序的順序而到達(dá)存儲(chǔ)系統(tǒng)。據(jù)此,提供了用于寫入數(shù)據(jù)的多種實(shí)施方式。在一個(gè)實(shí)施方式中,僅通過(guò)示例的方式,將布置在多個(gè)寫區(qū)間(interval)中的數(shù)據(jù)加載至多個(gè)緩存中,該多個(gè)緩存的總體被配置為適于移動(dòng)以適配寫區(qū)間的滑動(dòng)寫入窗口機(jī)制。數(shù)據(jù)可以不按序列順序而到達(dá)存儲(chǔ)系統(tǒng),并且通過(guò)將其恰當(dāng)?shù)丶虞d至該緩存中,數(shù)據(jù)在其被寫入至存儲(chǔ)媒介之前被序列地排序。當(dāng)滑動(dòng)寫入窗口的起始部分被寫入數(shù)據(jù)填充時(shí),該部分被沖刷(flush)至存儲(chǔ)媒介,并且窗口向前滑動(dòng)以適配由寫入器寫入的進(jìn)一步的數(shù)據(jù)。寫入器與由滑動(dòng)寫入窗口的當(dāng)前位置所反映的區(qū)間同步,并且它們僅在要寫入的數(shù)據(jù)匹配窗口的當(dāng)前區(qū)間的情況下發(fā)送該數(shù)據(jù)。除了上述示例方法實(shí)施方式之外,提供了其他示例性系統(tǒng)和計(jì)算機(jī)產(chǎn)品實(shí)施方式,并提供了相關(guān)的優(yōu)點(diǎn)。
為了使本發(fā)明的優(yōu)點(diǎn)容易被理解,將參照附圖中所圖示的具體實(shí)施方式
來(lái)呈現(xiàn)上面簡(jiǎn)要描述的本發(fā)明的更具體的描述。應(yīng)當(dāng)理解,這些圖描繪本發(fā)明的實(shí)施方式并且并不因此而被認(rèn)為限制其范圍,在此前提下,將通過(guò)使用附圖來(lái)額外具體和詳細(xì)地描述和解釋本發(fā)明,其中圖1為其中可以實(shí)施本發(fā)明的各方面的示例性計(jì)算環(huán)境的框示;圖2A為在其中可以實(shí)施本發(fā)明的各方面的計(jì)算機(jī)環(huán)境中的示例處理單元的框示;圖2B為在其中可以實(shí)施本發(fā)明的各方面的示例計(jì)算機(jī)環(huán)境中的附加的示例處理單元的框示;圖3為存儲(chǔ)系統(tǒng)中的示例性滑動(dòng)寫入窗口機(jī)制的框示;以及圖4A和4B為用于在存儲(chǔ)系統(tǒng)中使用滑動(dòng)寫入窗口機(jī)制寫入數(shù)據(jù)的示例性方法的流程示。
具體實(shí)施例方式貫穿以下描述和所請(qǐng)求保護(hù)的主題名稱,描述了與所圖示的實(shí)施方式相關(guān)的以下術(shù)語(yǔ)。“寫入器”或“單個(gè)寫入器”旨在表示通過(guò)生成和向存儲(chǔ)系統(tǒng)發(fā)布寫區(qū)間來(lái)向存儲(chǔ)系統(tǒng)寫入序列數(shù)據(jù)的線程或進(jìn)程。“寫區(qū)間”旨在表示來(lái)自由寫入器向存儲(chǔ)系統(tǒng)順序地寫入的數(shù)據(jù)集合的數(shù)據(jù)間隔。 寫區(qū)間由其在序列數(shù)據(jù)集合中的開(kāi)始偏移和尺寸來(lái)規(guī)定。當(dāng)被生成順序的寫入序列時(shí),寫區(qū)間彼此不相交。在寫入操作之間的寫區(qū)間的大小可以不同?!熬彺鎱^(qū)間”旨在指與滑動(dòng)寫入窗口中的存儲(chǔ)器緩沖相關(guān)聯(lián)并且表示根據(jù)被寫入的數(shù)據(jù)集合的緩存覆蓋的區(qū)間。緩存區(qū)間由其在序列數(shù)據(jù)集合中的開(kāi)始偏移和尺寸以及緩存上下文(context)來(lái)規(guī)定。一旦緩存區(qū)間變?yōu)楸惠斎霐?shù)據(jù)填充,它可以被沖刷至存儲(chǔ)器, 并且其緩存上下文可以被釋放并且在別處重新使用。緩存區(qū)間的邊界不相交,并且所有這種緩存區(qū)間具有相同的尺寸。緩存區(qū)間可以與寫區(qū)間相交。“塊區(qū)間”旨在表示緩存區(qū)間的部分,并且根據(jù)被寫入的數(shù)據(jù)集合的形式由其開(kāi)始偏移和尺寸來(lái)規(guī)定。塊區(qū)間可以用于在被沖刷至存儲(chǔ)器之間在存儲(chǔ)器緩存中所存儲(chǔ)的數(shù)據(jù)上執(zhí)行某些操作。在本申請(qǐng)中,基于輸入數(shù)據(jù)來(lái)計(jì)算系統(tǒng)循環(huán)冗余校驗(yàn)(CRC)并且基于塊區(qū)間來(lái)完成?!皼_刷器”旨在表示如下線程或進(jìn)程,該線程或進(jìn)程從滑動(dòng)寫入窗口收集輸入數(shù)據(jù)內(nèi)容已完整的存儲(chǔ)器緩存,并且將它們的內(nèi)容沖刷至存儲(chǔ)媒介、存儲(chǔ)設(shè)備、存儲(chǔ)環(huán)境或存儲(chǔ)介質(zhì)。單個(gè)寫入器可以適于變?yōu)闆_刷器以執(zhí)行沖刷器的該功能。“滑動(dòng)寫入窗口”旨在表示保持恒定數(shù)量的、每個(gè)與緩存區(qū)間相關(guān)聯(lián)的相繼的存儲(chǔ)器緩存。因此滑動(dòng)寫入窗口與聚集的窗口區(qū)間相關(guān)聯(lián),該聚集的窗口區(qū)間由其開(kāi)始偏移 (其所包含的緩存區(qū)間的開(kāi)始偏移中最低的那個(gè))和尺寸(其所包含的緩存的總尺寸)來(lái)規(guī)定。寫入器或單個(gè)寫入器發(fā)布與整體匹配窗口區(qū)間的寫區(qū)間相關(guān)聯(lián)的寫入操作(可能不是按順序發(fā)布的)。區(qū)間不整體匹配當(dāng)前窗口區(qū)間的寫入操作將直至窗口向前充分地滑動(dòng)時(shí)才被寫入器所發(fā)布。當(dāng)窗口中的一個(gè)或若干起始和相繼的緩存區(qū)間被輸入數(shù)據(jù)填充時(shí), 處理這些緩存以將緩存區(qū)間內(nèi)容沖刷至存儲(chǔ)媒介、存儲(chǔ)設(shè)備、存儲(chǔ)環(huán)境和/或存儲(chǔ)介質(zhì)。滑動(dòng)寫入窗口根據(jù)被沖刷的緩存的總尺寸來(lái)獲取空緩存,并且滑動(dòng)寫入窗口根據(jù)所沖刷的緩存的尺寸來(lái)向前滑動(dòng)(即其開(kāi)始偏移按所沖刷的緩存的尺寸遞增)?;瑒?dòng)寫入窗口將其邊界通告或通信至寫入器,以便于寫入器計(jì)算可允許的寫入操作。所圖示的實(shí)施方式的機(jī)制提供了用于向存儲(chǔ)環(huán)境寫入數(shù)據(jù)的滑動(dòng)寫入窗口機(jī)制的、高效的最小相互排除實(shí)施方式。由存儲(chǔ)系統(tǒng)利用的滑動(dòng)寫入窗口實(shí)質(zhì)上是存儲(chǔ)器緩存的集合,該存儲(chǔ)器緩存的集合被用于在輸入數(shù)據(jù)被寫入至存儲(chǔ)器之前存儲(chǔ)輸入的寫入數(shù)據(jù),并且對(duì)輸入數(shù)據(jù)適當(dāng)?shù)嘏判?。?dāng)滑動(dòng)寫入窗口的起始部分被寫入數(shù)據(jù)填充時(shí),該部分被沖刷至存儲(chǔ)器,并且窗口向前滑動(dòng)以適配由寫入器寫入的進(jìn)一步數(shù)據(jù)。寫入器與由滑動(dòng)寫入窗口的當(dāng)前位置所反映的間隔同步,并且寫入器僅在要寫入的數(shù)據(jù)匹配于窗口的當(dāng)前區(qū)間的情況下發(fā)送該數(shù)據(jù)。所圖示的實(shí)施方式的機(jī)制涉及滑動(dòng)寫入窗口的實(shí)施方式,其高效地將訪問(wèn)窗口的機(jī)制和緩存來(lái)插入寫入器的寫入數(shù)據(jù)的寫入器之間的相互排除最小化。從而,將用于訪問(wèn)滑動(dòng)寫入窗口的相互排除最小化,使得能夠顯著地減少在滑動(dòng)寫入窗口機(jī)制中出現(xiàn)瓶頸的機(jī)會(huì),并且使得能夠提高總體系統(tǒng)性能。滑動(dòng)寫入窗口機(jī)制在存儲(chǔ)系統(tǒng)的環(huán)境中的主要功能是,對(duì)來(lái)自可能在網(wǎng)絡(luò)上的寫入器的輸入寫入數(shù)據(jù)進(jìn)行排序,并且允許將足夠大的序列區(qū)間的數(shù)據(jù)沖刷至存儲(chǔ)器。所圖示的實(shí)施方式的機(jī)制將向滑動(dòng)寫入窗口機(jī)制發(fā)布數(shù)據(jù)的并行的寫入器之間的相互排除最小化,從而顯著地提高利用滑動(dòng)寫入窗口的存儲(chǔ)系統(tǒng)的性能。另外,所圖示的實(shí)施方式的機(jī)制促進(jìn)了基于塊區(qū)間的高效和并行的計(jì)算(例如循環(huán)冗余校驗(yàn)“CRC”的計(jì)算),從而進(jìn)一步提高性能?,F(xiàn)在轉(zhuǎn)向圖1,描繪了圖示其中可以實(shí)施本發(fā)明的各方面的示例性計(jì)算環(huán)境的框圖。提供圖1、2A和2B作為其中可以實(shí)施本發(fā)明的實(shí)施方式的數(shù)據(jù)處理環(huán)境的示例圖。應(yīng)當(dāng)理解,圖1、圖2A和圖2B僅是示例性的,并且并不旨在明示或暗示對(duì)于其中可以實(shí)施本發(fā)明的各方面或?qū)嵤┓绞降沫h(huán)境的任何限制。在不偏離本發(fā)明的精神或范圍的情況下,可以對(duì)所描繪的環(huán)境進(jìn)行多處修改。圖1描繪了其中可以實(shí)施本發(fā)明的各方面的數(shù)據(jù)處理系統(tǒng)的網(wǎng)絡(luò)的圖形表示。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100是其中可以實(shí)施本發(fā)明的實(shí)施方式的計(jì)算機(jī)網(wǎng)絡(luò)。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng) 100包含網(wǎng)絡(luò)102,該網(wǎng)絡(luò)102是用于在網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100內(nèi)、在連接一起的多種設(shè)備和計(jì)算機(jī)之間提供通信鏈路的媒介。網(wǎng)絡(luò)102可以包括諸如有線通信鏈路、無(wú)線通信鏈路或光纖電纜之類的連接。在所描繪的示例中,服務(wù)器104、服務(wù)器106以及存儲(chǔ)單元108連接到網(wǎng)絡(luò)102。另夕卜,客戶端110、112和114連接到網(wǎng)絡(luò)102。這些客戶端110、112和114例如可以是個(gè)人計(jì)算機(jī)或網(wǎng)絡(luò)計(jì)算機(jī)。在所描繪的示例中,服務(wù)器104向客戶端110、112和114提供諸如引導(dǎo)文件、操作系統(tǒng)圖像和應(yīng)用程序之類的數(shù)據(jù)。在該示例中客戶端110、112和114是服務(wù)器104的客戶端。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100可以包括附加的服務(wù)器、客戶端和其他未示出的設(shè)備。在所描繪的示例中,網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100是具有如下網(wǎng)絡(luò)102的因特網(wǎng),該網(wǎng)絡(luò) 102表示使用傳輸控制協(xié)議/因特網(wǎng)協(xié)議(TCP/IP)的協(xié)議套件來(lái)相互通信的世界范圍集合的網(wǎng)絡(luò)和網(wǎng)關(guān)。在因特網(wǎng)的核心處是由路由數(shù)據(jù)和消息的數(shù)千商業(yè)、政府、教育和其他計(jì)算機(jī)系統(tǒng)組成的主要節(jié)點(diǎn)或主機(jī)計(jì)算機(jī)之間的高速數(shù)據(jù)通信線路的骨干。當(dāng)然,網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100也可以實(shí)施為諸如例如內(nèi)聯(lián)網(wǎng)、局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)之類的數(shù)個(gè)不同類型的網(wǎng)絡(luò)。圖1旨在作為示例,而非作為本發(fā)明的不同實(shí)施方式的架構(gòu)限制。圖2A為圖示在其中可以實(shí)施本發(fā)明的各方面的示例性計(jì)算環(huán)境的部分200的框圖。數(shù)據(jù)處理系統(tǒng)200是諸如圖1中的服務(wù)器104或客戶端108之類的計(jì)算機(jī)的示例,實(shí)施本發(fā)明的實(shí)施方式的處理的計(jì)算機(jī)可用代碼或指令可以位于其中。在所描繪的示例中,數(shù)據(jù)處理系統(tǒng)200采用包括北橋和存儲(chǔ)器控制器集線器 (MCH) 208以及南橋和輸入/輸出(I/O)控制器集線器(ICH)210的集線器架構(gòu)。處理單元 202、主存儲(chǔ)器204和圖形處理器218連接到北橋和存儲(chǔ)器控制器集線器208。圖形處理器 218可以通過(guò)加速圖形端口(AGP)連接到北橋和存儲(chǔ)器控制器集線器208。在所描繪的示例中,局域網(wǎng)(LAN)適配器212、音頻適配器216、鍵盤和鼠標(biāo)適配器 220、調(diào)制解調(diào)器222、只讀存儲(chǔ)器(ROM) 224、硬盤驅(qū)動(dòng)器(HDD) 226、CD-ROM驅(qū)動(dòng)器230、通用串行總線(USB)端口和其他通信端口 232、以及PCI/PCIe設(shè)備234通過(guò)總線238連接到南橋和I/O控制器集線器210。PCI/PCIe設(shè)備例如可以包括以太網(wǎng)適配器、插入卡和用于筆記本計(jì)算機(jī)的PC卡。PCI使用卡總線控制器,而PCIe不使用。ROM 2 例如可以是閃存二進(jìn)制輸入/輸出系統(tǒng)(BIOS)。硬盤驅(qū)動(dòng)器2 和⑶-ROM驅(qū)動(dòng)器230通過(guò)總線240連接到南橋和1/0控制器集線器210。硬盤驅(qū)動(dòng)器2 和⑶-ROM驅(qū)動(dòng)器230例如可以使用電子集成驅(qū)動(dòng)器(IDE)或串行高級(jí)技術(shù)附件(SATA)接口。超級(jí)1/0(SIO)設(shè)備236可以連接到南橋和1/0控制器集線器 210。操作系統(tǒng)運(yùn)行在處理單元202上,并且協(xié)調(diào)和提供對(duì)圖2A和圖2B中的數(shù)據(jù)處理系統(tǒng)200內(nèi)的各種組件的控制。作為客戶端,操作系統(tǒng)可以是對(duì)本領(lǐng)域普通技術(shù)人員已知的商業(yè)可用的操作系統(tǒng)。作為服務(wù)器,數(shù)據(jù)處理系統(tǒng)200例如可以是運(yùn)行 Advanced Interactive Executive (AIX )操作系統(tǒng)或 LINUX 操作系統(tǒng)的IBM 必erverTMpSeries 計(jì)算機(jī)系統(tǒng)。數(shù)據(jù)處理系統(tǒng)200可以是在處理單元202中包括多個(gè)處理器的對(duì)稱多處理器(SMP)系統(tǒng)。備選地,可以采用單處理器系統(tǒng)。操作系統(tǒng)、面向?qū)ο缶幊滔到y(tǒng)以及應(yīng)用程序或程序的指令位于諸如硬盤驅(qū)動(dòng)器2 之類的存儲(chǔ)設(shè)備上,并且可以被加載至主存儲(chǔ)器204中以由處理單元202執(zhí)行。通過(guò)使用可以位于諸如主存儲(chǔ)器204、只讀存儲(chǔ)器2M之類的存儲(chǔ)器中、或位于一個(gè)或多個(gè)外圍設(shè)備2 和230中的計(jì)算機(jī)可用程序代碼,本發(fā)明的實(shí)施方式的處理由處理單元202來(lái)執(zhí)行。本領(lǐng)域普通技術(shù)人員將理解,圖1、圖2A和圖2B中的硬件可以根據(jù)實(shí)施方式而變化。除了圖1、圖2A和圖2B中所描繪的硬件之外、或替代圖1、圖2A和圖2B中所描繪的硬件,可以使用諸如閃存、等效的非易失性存儲(chǔ)器或光盤驅(qū)動(dòng)器等之類的其他內(nèi)部硬件或外圍設(shè)備。并且,本發(fā)明的處理還可以應(yīng)用于多處理器數(shù)據(jù)處理系統(tǒng)。作為某些例示性示例, 數(shù)據(jù)處理系統(tǒng)200可以是利用閃存來(lái)配置以提供用于存儲(chǔ)操作系統(tǒng)文件和/或用戶生成文件的非易失性存儲(chǔ)器的個(gè)人數(shù)字助理(PDA)??偩€系統(tǒng)可以由諸如圖2中所示的總線238或總線240之類的一個(gè)或多個(gè)總線組成。當(dāng)然,可以使用提供附接于構(gòu)造或架構(gòu)的不同的組件或設(shè)備之間的數(shù)據(jù)傳輸?shù)娜魏晤愋偷耐ㄐ艠?gòu)造或架構(gòu)來(lái)實(shí)施總線系統(tǒng)。通信單元可以包括諸如圖2A的調(diào)制解調(diào)器222或者網(wǎng)絡(luò)適配器212之類的用于發(fā)送和接收數(shù)據(jù)的一個(gè)或多個(gè)設(shè)備。存儲(chǔ)器例如可以是諸如在圖2中的北橋和存儲(chǔ)器控制器集線器208中所找到的主存儲(chǔ)器204、只讀存儲(chǔ)器2M或高速緩存存儲(chǔ)器。圖1、圖2A和圖2B中所描繪的示例以及上面所描述的示例并不意味著暗示了架構(gòu)限制。例如,除了采取PDA的形式之外,數(shù)據(jù)處理系統(tǒng)200也可以是平板計(jì)算機(jī)、膝上計(jì)算機(jī)或電話設(shè)備?,F(xiàn)在轉(zhuǎn)向圖2B,在其中可以實(shí)施本發(fā)明的各方面的示例計(jì)算環(huán)境的部分50的框示。在所圖示的環(huán)境中,部分50包括處理器52和諸如隨機(jī)存取存儲(chǔ)器(RAM)之類的存儲(chǔ)器54。部分50可以操作地耦合到為便利起見(jiàn)未圖示的若干組件,該未圖示的若干組件包括但不限于在圖形用戶界面上向用戶呈現(xiàn)諸如窗口之類的圖像的顯示器、鍵盤、鼠標(biāo)、打印機(jī)等。當(dāng)然,本領(lǐng)域技術(shù)人員將知曉,上述組件,或任何數(shù)量的不同的組件、外圍設(shè)備以及其他設(shè)備的任何組合可以用于圖2B。在所圖示的實(shí)施方式中,圖2B在存儲(chǔ)在存儲(chǔ)器M中的操作系統(tǒng)(OS) 56 (例如 AIX、z/0S、OS/2、LINUX、UNIX、WINDOWS、MAC OS)的控制下操作,并且與用戶接口通信以接受輸入和命令以及呈現(xiàn)結(jié)果。在本發(fā)明的一個(gè)實(shí)施方式中,OS 56促進(jìn)了根據(jù)本發(fā)明的功能。為此,OS 56包括寫入模塊22和讀取模塊62,其可以適于執(zhí)行所描述的示例性方法中的多種處理和機(jī)制。寫入模塊22、讀取模塊62和單個(gè)寫入器65可以執(zhí)行命令以讀取和寫入被從網(wǎng)絡(luò)發(fā)送的數(shù)據(jù),以及讀取和寫入通過(guò)生成和向存儲(chǔ)系統(tǒng)發(fā)布寫區(qū)間而向存儲(chǔ)系統(tǒng)寫入序列數(shù)據(jù)的線程或進(jìn)程。可以配置和設(shè)計(jì)寫入模塊22、讀取模塊62和單個(gè)寫入器65從而使得滑動(dòng)寫入窗口 304 (后文的圖3)在滑動(dòng)寫入窗口 304的緩存64中存儲(chǔ)輸入寫入數(shù)據(jù),并且當(dāng)滑動(dòng)寫入窗口 304中的一個(gè)或多個(gè)起始和相繼緩存64 (例如從滑動(dòng)寫入窗口 304中的第一緩存64開(kāi)始的緩存的序列)被數(shù)據(jù)完全填充時(shí),滑動(dòng)寫入窗口 304將該信息傳遞至單個(gè)寫入器65,該單個(gè)寫入器65繼而擔(dān)任沖刷器的角色,如在圖3中將描述的那樣。緩存64還可以適于執(zhí)行所描述的示例方法中的多種處理和機(jī)制。緩存64可以用于存儲(chǔ)輸入寫入數(shù)據(jù)以及寫區(qū)間,并且在輸入數(shù)據(jù)被寫入至存儲(chǔ)媒介或存儲(chǔ)環(huán)境之前將其適當(dāng)?shù)嘏判?,并將在后文的圖3中描述功能。在一個(gè)實(shí)施方式中,在計(jì)算機(jī)可讀介質(zhì)中有形地體現(xiàn)實(shí)施操作系統(tǒng)56、寫入模塊 22、讀取模塊、單個(gè)寫入器65和緩存64的指令,該計(jì)算機(jī)可讀介質(zhì)可以包括一個(gè)或多個(gè)固定的或可拆卸的數(shù)據(jù)存儲(chǔ)設(shè)備,諸如zip驅(qū)動(dòng)器、盤、硬盤驅(qū)動(dòng)器、DVD/⑶-ROM、數(shù)字磁帶、 固態(tài)驅(qū)動(dòng)器(SSD)等。進(jìn)一步地,操作系統(tǒng)56、寫入模塊22、讀取模塊和緩存64包括指令, 該指令當(dāng)被計(jì)算存儲(chǔ)環(huán)境讀取和執(zhí)行時(shí)執(zhí)行實(shí)施和/或使用本發(fā)明所必須的步驟。操作系統(tǒng)56、寫入模塊22、讀取模塊、單個(gè)寫入器65和緩存64還可以在存儲(chǔ)器M中實(shí)體地體現(xiàn)和/或經(jīng)由多個(gè)組件通過(guò)圖1中所描述的網(wǎng)絡(luò)發(fā)送、或由圖1中所描述的網(wǎng)絡(luò)訪問(wèn)。這樣, 如這里可能使用的術(shù)語(yǔ)“制造品”、“程序存儲(chǔ)設(shè)備,,和“計(jì)算機(jī)程序產(chǎn)品,,旨在包括從任何計(jì)算機(jī)可讀設(shè)備或媒介可訪問(wèn)和/或可操作的計(jì)算機(jī)程序。所圖示的實(shí)施方式的機(jī)制可以包括一個(gè)或多個(gè)相關(guān)聯(lián)的軟件應(yīng)用程序58,該軟件應(yīng)用程序例如包括用于管理諸如如前所述的SAN或NAS之類的、包括計(jì)算設(shè)備的網(wǎng)絡(luò)的分布式計(jì)算機(jī)系統(tǒng)的功能。于是,處理器52可以包括一個(gè)或多個(gè)存儲(chǔ)管理處理器(SMP)。應(yīng)用程序58可以在單個(gè)計(jì)算機(jī)內(nèi)操作,或作為包括計(jì)算機(jī)設(shè)備的網(wǎng)絡(luò)的分布式計(jì)算機(jī)系統(tǒng)的部分而操作。網(wǎng)絡(luò)可以包含經(jīng)由局域網(wǎng)和/或因特網(wǎng)連接(其可以是公共的或安全的, 例如通過(guò)虛擬專網(wǎng)(VPN)連接)、或經(jīng)由光纖信道SAN或本領(lǐng)域普通人員將理解的其他已知網(wǎng)絡(luò)類型而連接的一個(gè)或多個(gè)計(jì)算機(jī)。圖3為并入了所圖示的實(shí)施方式的多種方面的示例性滑動(dòng)寫入窗口功能300的框圖?;瑒?dòng)寫入窗口 304以寫區(qū)間302的形式將輸入寫入數(shù)據(jù)寫入至與緩存區(qū)間306相關(guān)聯(lián)的緩存64中(圖2B)。如前文所述,緩存區(qū)間由它們的序列數(shù)據(jù)集合中的開(kāi)始偏移和尺寸以及緩存上下文來(lái)規(guī)定。于是,每個(gè)緩存區(qū)間306部分地由所示出的緩存上下文308規(guī)定。 再次如前所述,塊區(qū)間是緩存區(qū)間的部分,并且以被寫入的數(shù)據(jù)集合的形式由其開(kāi)始偏移和尺寸規(guī)定。塊區(qū)間310是每個(gè)緩存區(qū)間306的部分(作為單個(gè)緩存區(qū)間的示例而示出)。當(dāng)一個(gè)或多個(gè)起始和相繼的緩存64 (即從窗口中的第一緩存開(kāi)始的緩存的序列) 被數(shù)據(jù)填充時(shí),滑動(dòng)寫入窗口 304將該信息傳遞至單個(gè)寫入器(圖2B,22),該單個(gè)寫入器繼而可以擔(dān)任沖刷器的角色。沖刷器進(jìn)入關(guān)鍵部分,沖刷器在該關(guān)鍵部分中收集盡可能多的可用的完整緩存,按照緩存64的適當(dāng)?shù)捻樞驅(qū)?duì)這些緩存(64)或緩存區(qū)間的引用插入至沖刷序列中,并且結(jié)束該關(guān)鍵部分。然后沖刷器64從沖刷序列(按照緩存64的順序)取得緩存64的引用,并且將所引用的緩存64的內(nèi)容沖刷至存儲(chǔ)媒介或存儲(chǔ)介質(zhì)。然后,沖刷器獲取空緩存64,進(jìn)入關(guān)鍵部分,并且將這些緩存64添加至滑動(dòng)寫入窗口 304。在以下操作之間應(yīng)用相互排除將緩存 64加進(jìn)和移出滑動(dòng)寫入窗口的操作、和計(jì)算在滑動(dòng)寫入窗口 304中寫入輸入數(shù)據(jù)的位置、 然后指示滑動(dòng)寫入窗口 304和組成滑動(dòng)寫入窗口的緩存64被填充的等級(jí)的操作。從而,相互排除被最小化從而使得在關(guān)鍵部分內(nèi)只執(zhí)行快速存儲(chǔ)器操作。本發(fā)明的機(jī)制使得能夠消除滑動(dòng)寫入窗口機(jī)制304中的瓶頸,并且提高存儲(chǔ)系統(tǒng)的總體性能。現(xiàn)在轉(zhuǎn)向圖4A和圖4B,呈現(xiàn)了圖示作為滑動(dòng)寫入窗口機(jī)制的高效的最小相互排除實(shí)施方式的用于寫入數(shù)據(jù)示例性方法500的流程圖。方法500起始(步驟501)并且從網(wǎng)絡(luò)向?qū)憛^(qū)間加載數(shù)據(jù)(步驟50幻。方法進(jìn)入關(guān)鍵部分504。方法(步驟506)向滑動(dòng)窗口機(jī)制提供寫區(qū)間,該滑動(dòng)窗口機(jī)制計(jì)算并返回其應(yīng)當(dāng)適配給定的寫區(qū)間的緩存區(qū)間,然后退出關(guān)鍵部分(步驟508)。然后方法(步驟509)將考慮第一所返回的緩存區(qū)間。根據(jù)緩存區(qū)間的開(kāi)始偏移,寫區(qū)間的數(shù)據(jù)將被拷貝至緩存上下文中(步驟510)。接下來(lái),方法 (步驟51 將考慮緩存區(qū)間中的第一塊區(qū)間。方法(步驟514)將按被寫入至所考慮的塊區(qū)間的尺寸來(lái)自動(dòng)遞增所考慮的塊區(qū)間中的被占據(jù)的字節(jié)的數(shù)量。方法(步驟516)確定所考慮的塊區(qū)間中的被占據(jù)的字節(jié)的新的數(shù)量是否等于塊尺寸。如果所考慮的塊區(qū)間中的被占據(jù)的字節(jié)的新的數(shù)量不等于塊尺寸,則方法(步驟528)檢查緩存中的額外的塊區(qū)間。 如果在緩存中存在額外的塊區(qū)間,則方法(步驟528)向回循環(huán),并且按被寫入至所考慮的塊區(qū)間的尺寸來(lái)自動(dòng)遞增所考慮的塊區(qū)間中的被占據(jù)的字節(jié)的數(shù)量(步驟514)。如果所考慮的塊區(qū)間中的被占據(jù)的字節(jié)的新的數(shù)量等于塊尺寸(步驟516),則方法(步驟518)計(jì)算該塊的CRC值,并且將所計(jì)算的值分配至所考慮的塊區(qū)間的屬性中。方法(步驟520)再一次進(jìn)入關(guān)鍵部分。在關(guān)鍵部分中(步驟520),該方法(步驟 521)將所考慮的緩存區(qū)間的完整塊區(qū)間的數(shù)量遞增加一。方法(步驟52 確定緩存區(qū)間中的完整塊區(qū)間的數(shù)量的新值是否等于緩存區(qū)間中的塊區(qū)間的數(shù)量,以及所考慮的緩存區(qū)間是否滑動(dòng)寫入窗口區(qū)間中的第一個(gè)。如果步驟522中的條件不成立,則方法(步驟526)退出關(guān)鍵部分。如果步驟522中的條件成立,則方法(524)將設(shè)置標(biāo)記,該標(biāo)記將由恰好一個(gè)線程設(shè)置,其指示第一緩存區(qū)間準(zhǔn)備就緒并且準(zhǔn)備好用于沖刷,并且繼而關(guān)鍵部分退出 (步驟526)。接下來(lái),如前所述,該方法(528)確定緩存區(qū)間中是否存在額外的塊區(qū)間。如果緩存區(qū)間中存在額外的塊區(qū)間,則該方法(5 )向回循環(huán)并且將所考慮的塊區(qū)間中的被占據(jù)的字節(jié)的數(shù)量自動(dòng)遞增被寫入至所考慮的塊區(qū)間的尺寸(步驟514)。如果在緩存區(qū)間中不存在額外的塊區(qū)間,則該方法確定是否存在額外的緩存區(qū)間(步驟530)。如果存在額外的緩存區(qū)間,則根據(jù)緩存區(qū)間開(kāi)始偏移,寫區(qū)間的數(shù)據(jù)將被拷貝至緩存上下文中(步驟 510)。如果不存在額外的緩存區(qū)間(步驟530),則方法(532)確定是否設(shè)置了指示第一緩存區(qū)間完整的標(biāo)記,以及如果沒(méi)有設(shè)置,則方法(532)結(jié)束。當(dāng)設(shè)置了標(biāo)記時(shí)(步驟53 ,該方法進(jìn)入關(guān)鍵部分(534)。在滑動(dòng)寫入窗口中掃描緩存區(qū)間(步驟536),并且基于滑動(dòng)寫入窗口內(nèi)的所處順序,向沖刷隊(duì)列添加對(duì)從第一緩存起的完整的相繼緩存區(qū)間的引用。通過(guò)將開(kāi)始偏移遞增從滑動(dòng)寫入窗口提取的緩存區(qū)間的總尺寸,來(lái)將滑動(dòng)寫入窗口向前移動(dòng)(步驟538)。該方法退出關(guān)鍵部分(步驟M0)。 基于緩存區(qū)間順序,從沖刷隊(duì)列提取緩存區(qū)間(步驟討幻。所提取的緩存區(qū)間的數(shù)量等于被當(dāng)前的執(zhí)行線程插入至沖刷隊(duì)列中的緩存區(qū)間的數(shù)量(步驟。獲取新的空緩存區(qū)間 (步驟M4)。所獲取的緩存區(qū)間的數(shù)量是由當(dāng)前的執(zhí)行線程沖刷的緩存區(qū)間的數(shù)量。方法進(jìn)入關(guān)鍵部分(546),并且所獲取的緩存區(qū)間被添加至滑動(dòng)寫入窗口。如果在滑動(dòng)寫入窗口內(nèi)存在任何緩存區(qū)間,則所獲取的緩存區(qū)間按照順序放置并跟隨在現(xiàn)存緩存區(qū)間之后。 據(jù)此,滑動(dòng)寫入窗口的尺寸增加了所添加的緩存區(qū)間的總尺寸。方法退出關(guān)鍵部分(步驟 550)并且方法結(jié)束(步驟552)。在所圖示的實(shí)施方式的一方面中,單個(gè)寫入器進(jìn)入關(guān)鍵部分,并且向滑動(dòng)寫入窗口提供單個(gè)寫入器的寫區(qū)間,并且滑動(dòng)寫入窗口計(jì)算并返回將要適配所給定的寫區(qū)間的緩存區(qū)間。由滑動(dòng)寫入窗口執(zhí)行的用于返回緩存區(qū)間的高速計(jì)算在關(guān)鍵部分內(nèi)完成,這是因?yàn)榛瑒?dòng)寫入窗口可以并行地向前滾動(dòng)。然后退出關(guān)鍵部分。對(duì)于所返回的每個(gè)緩存區(qū)間,所圖示的實(shí)施方式的機(jī)制可以執(zhí)行關(guān)鍵部分之外的操作。根據(jù)緩存區(qū)間開(kāi)始偏移,單個(gè)寫入器將單個(gè)寫入器的寫區(qū)間的數(shù)據(jù)寫入或拷貝至緩存上下文中。因?yàn)閿?shù)據(jù)拷貝是較冗長(zhǎng)的操作,所以其在關(guān)鍵部分之外執(zhí)行。單個(gè)寫入器向滑動(dòng)寫入窗口通知完成將單個(gè)寫入器的寫區(qū)間寫入至滑動(dòng)寫入窗口的給定的緩存區(qū)間中。 單個(gè)寫入器在緩存區(qū)間內(nèi)的塊區(qū)間上迭代,并且針對(duì)每個(gè)塊區(qū)間,自動(dòng)地更新被向該塊區(qū)間寫入的尺寸占據(jù)的字節(jié)數(shù)量的值(該值事先被初始化為零)。在特定操作的持續(xù)時(shí)間中利用瞬時(shí)鎖定來(lái)實(shí)施原子(atomic)操作。如果新的值達(dá)到恒定塊尺寸,則計(jì)算該塊的循環(huán)冗余校驗(yàn)“CRC”值。這是在關(guān)鍵部分之外完成的較冗長(zhǎng)的操作。計(jì)算的結(jié)果被設(shè)置在相關(guān)塊區(qū)間的屬性中。在已經(jīng)執(zhí)行了關(guān)鍵部分之外的若干操作的情況下,所圖示的實(shí)施方式的機(jī)制可以重新建立或重新進(jìn)入關(guān)鍵部分?,F(xiàn)在將相關(guān)緩存區(qū)間的完整塊區(qū)間的數(shù)量遞增一個(gè)因子。 如果完整的塊區(qū)間的數(shù)量的新值達(dá)到緩存區(qū)間中的塊區(qū)間的恒定數(shù)量,并且如果相關(guān)聯(lián)的緩存區(qū)間是當(dāng)前滑動(dòng)窗口中的第一個(gè),則操作將設(shè)置被提供至單個(gè)寫入器的、指示第一緩存區(qū)間對(duì)沖刷準(zhǔn)備就緒的標(biāo)記。恰好一個(gè)單個(gè)寫入器將接收第一緩存區(qū)間對(duì)沖刷就緒的指示,這是因?yàn)閷憛^(qū)間不相交。然后退出關(guān)鍵部分。
在已經(jīng)處理了由滑動(dòng)寫入窗口機(jī)制提供的全部緩存區(qū)間的情況下,單個(gè)寫入器然后檢查是否設(shè)置了指示第一緩存區(qū)間完整的標(biāo)記,并且如果如此,則單個(gè)寫入器繼續(xù)并擔(dān)任沖刷器的角色,再次進(jìn)入關(guān)鍵部分。沖刷器掃描滑動(dòng)寫入窗口中的緩存區(qū)間,并且按照緩存在滑動(dòng)寫入窗口中所處的順序,向沖刷隊(duì)列添加對(duì)從第一緩存開(kāi)始的完整的(即它們?nèi)康膲K區(qū)間是完整的)相繼的緩存區(qū)間的引用。在處理中的該點(diǎn)處,將存在至少一個(gè)完整的緩存區(qū)間。接著,通過(guò)將滑動(dòng)寫入窗口的開(kāi)始偏移遞增從滑動(dòng)寫入窗口提取的緩存區(qū)間的總尺寸,來(lái)將滑動(dòng)窗口向前移動(dòng)。在該階段滑動(dòng)寫入窗口的尺寸減少,這是因?yàn)檫€沒(méi)有對(duì)任何新緩存的獲取。然后退出關(guān)鍵部分。在關(guān)鍵部分之外,從沖刷隊(duì)列中提取緩存區(qū)間。當(dāng)前的執(zhí)行線程提取的緩存區(qū)間的數(shù)量等于被當(dāng)前的執(zhí)行線程插入至沖刷隊(duì)列中的緩存區(qū)間的數(shù)量。按照緩存區(qū)間被放置在沖刷隊(duì)列中的順序而從沖刷隊(duì)列提取緩存區(qū)間。并且,對(duì)于數(shù)個(gè)緩存區(qū)間中的每一個(gè),緩存區(qū)間內(nèi)容可以被沖刷至存儲(chǔ)媒介,并且它們的塊的CRC值被存儲(chǔ)(用于將來(lái)的讀取操作的驗(yàn)證)。在仍在關(guān)鍵部分之外時(shí),獲取空緩存區(qū)間。所獲取的緩存區(qū)間的數(shù)量是由當(dāng)前的執(zhí)行線程沖刷的緩存的數(shù)量。所圖示的實(shí)施方式的機(jī)制可以再一次進(jìn)入關(guān)鍵部分。所獲取的空緩存區(qū)間被添加至滑動(dòng)寫入窗口,放置在該窗口中的任何現(xiàn)有的緩存之后。滑動(dòng)寫入窗口的尺寸據(jù)此增加。 然后退出關(guān)鍵部分。如本領(lǐng)域技術(shù)人員將理解的那樣,可以作為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品來(lái)體現(xiàn)本發(fā)明的各方面。據(jù)此,本發(fā)明的各方面可以采取可以在這里全部被一般地稱作“電路”、 “模塊”或“系統(tǒng)”的完全硬件實(shí)施方式、完全軟件實(shí)施方式(包括固件、常駐軟件、微代碼等)、或組合軟件和硬件方面的實(shí)施方式的形式。進(jìn)一步地,本發(fā)明的各方面可以采取在具有在其上體現(xiàn)的計(jì)算機(jī)可讀程序代碼的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)中體現(xiàn)的計(jì)算機(jī)程序產(chǎn)品的形式??梢岳靡粋€(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)的任何組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號(hào)介質(zhì)或計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是但不限于電、磁、 光、電磁、紅外或半導(dǎo)體系統(tǒng)、裝置或設(shè)備、或上述的任何合適的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的示例(非窮盡的列表)將包括以下具有一個(gè)或多個(gè)線纜的電連接、便攜式計(jì)算機(jī)軟盤、硬盤、隨機(jī)訪問(wèn)存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦除可編程只讀存儲(chǔ)器(EPR0M 或閃存)、光纖、便攜式壓縮光盤只讀存儲(chǔ)器(CD-ROM)、光存儲(chǔ)設(shè)備、磁性存儲(chǔ)設(shè)備或上述的任何合適的組合。在該文檔的上下文中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是可以包含或存儲(chǔ)由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與指令執(zhí)行系統(tǒng)、裝置或設(shè)備聯(lián)系使用的程序的任何實(shí)體介質(zhì)??梢允褂萌魏吻‘?dāng)?shù)慕橘|(zhì)來(lái)傳輸在計(jì)算機(jī)可讀介質(zhì)上體現(xiàn)的程序代碼,該介質(zhì)包括但不限于無(wú)線、有線、光纖線纜、RF等,或上述的任何合適的組合??梢砸砸环N或多種編程語(yǔ)言的任何組合來(lái)編寫用于執(zhí)行本發(fā)明的各方面的操作的計(jì)算機(jī)程序代碼,該一種或多種編程語(yǔ)言包括諸如JaVa、Smalltalk、C++等之類的面向?qū)ο缶幊陶Z(yǔ)言、以及諸如“C”編程語(yǔ)言或類似的編程語(yǔ)言之類的傳統(tǒng)的過(guò)程編程語(yǔ)言??梢酝耆谟脩舻挠?jì)算機(jī)上、部分地在用戶的計(jì)算機(jī)上、作為獨(dú)立軟件包、部分地在用戶的計(jì)算機(jī)上而部分地在遠(yuǎn)程計(jì)算機(jī)上、或完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行程序代碼。在后一種情境下,遠(yuǎn)程計(jì)算機(jī)可以通過(guò)包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)的任何類型的網(wǎng)絡(luò)連接到用戶的計(jì)算機(jī),或者該連接可以是對(duì)外部計(jì)算機(jī)(例如使用因特網(wǎng)服務(wù)提供商通過(guò)因特網(wǎng))進(jìn)行。已經(jīng)參照根據(jù)本發(fā)明的實(shí)施方式的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程示和/或框圖來(lái)描述本發(fā)明的各方面。將理解,流程示和/或框圖的每個(gè)塊、以及流程示和/或框圖的塊的組合可以通過(guò)計(jì)算機(jī)程序指令來(lái)實(shí)施??梢韵蛲ㄓ糜?jì)算機(jī)、 專用計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置的處理器提供這些計(jì)算機(jī)程序指令以產(chǎn)生機(jī)器,從而使得經(jīng)由計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置執(zhí)行的指令創(chuàng)建用于實(shí)施流程圖和/或框圖的一個(gè)或多個(gè)塊中所規(guī)定的功能/動(dòng)作的部件。也可以在計(jì)算機(jī)可讀介質(zhì)中存儲(chǔ)這些計(jì)算機(jī)程序指令,該計(jì)算機(jī)程序指令可以指導(dǎo)計(jì)算機(jī)、其他可編程數(shù)據(jù)處理裝置或其他設(shè)備以特定的方式工作,以使得存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的指令產(chǎn)生制造品,該制造品包括實(shí)施在流程圖和/或框圖的一個(gè)或多個(gè)塊中所規(guī)定的功能/動(dòng)作的指令。計(jì)算機(jī)程序指令也可以被加載至計(jì)算機(jī)、其他可編程數(shù)據(jù)處理裝置或其他設(shè)備上以導(dǎo)致將在計(jì)算機(jī)、其他可編程裝置或其他設(shè)備上執(zhí)行的一系列操作步驟,以產(chǎn)生計(jì)算機(jī)實(shí)施的處理,以使得在計(jì)算機(jī)或其他可編程裝置上執(zhí)行的指令提供用于實(shí)施在流程圖和/或框圖的一個(gè)或多個(gè)塊中所規(guī)定的功能/動(dòng)作的處理。以上各圖中的流程圖和框示了根據(jù)本發(fā)明的多種實(shí)施方式的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能的實(shí)施方式的架構(gòu)、功能和操作。對(duì)此,流程圖或框圖中的每個(gè)塊可以表示包括用于實(shí)施所規(guī)定的邏輯功能的一個(gè)或多個(gè)可執(zhí)行指令的模塊、分段、或代碼部分。 還應(yīng)當(dāng)注意,在一些備選實(shí)施方式中,塊中所注明的功能可以不按圖中所注明的順序而發(fā)生。例如,取決于所涉及的功能,相繼示出的兩個(gè)塊可以實(shí)際上大體上并行地執(zhí)行,或該塊有時(shí)可以按相反順序執(zhí)行。還將注意,可以通過(guò)執(zhí)行所規(guī)定的功能或動(dòng)作的專用的基于硬件的系統(tǒng)或?qū)S糜布陀?jì)算機(jī)指令的組合來(lái)實(shí)施框圖和/或流程示的每個(gè)塊以及框圖和/或流程示中的塊的組合。盡管已經(jīng)詳細(xì)闡釋了本發(fā)明的一個(gè)或更多的實(shí)施方式,但技術(shù)人員將理解可以對(duì)這些實(shí)施方式進(jìn)行修改或調(diào)整而不偏離如所附權(quán)利要求陳述的本發(fā)明的范圍。
權(quán)利要求
1.一種用于使用處理器設(shè)備寫入數(shù)據(jù)的方法,其包括將布置在多個(gè)寫區(qū)間中的數(shù)據(jù)加載至多個(gè)緩存中,所述多個(gè)緩存的總體被配置為適于移動(dòng)以適配所述多個(gè)寫區(qū)間的滑動(dòng)寫入窗口機(jī)制,其中所述數(shù)據(jù)可以不按序列順序到達(dá)所述多個(gè)緩存,但被順序排列至所述滑動(dòng)寫入窗口機(jī)制中的所述多個(gè)緩存中;并且一旦按序列存儲(chǔ)于所述滑動(dòng)寫入窗口機(jī)制中的所述多個(gè)緩存中的至少一個(gè)中被填充數(shù)據(jù)后,將所述滑動(dòng)寫入窗口機(jī)制中的數(shù)據(jù)傳遞至單個(gè)寫入器,所述單個(gè)寫入器適于通過(guò)使用引用信息將數(shù)據(jù)的序列區(qū)間從所述滑動(dòng)寫入窗口機(jī)制沖刷至存儲(chǔ)環(huán)境,來(lái)?yè)?dān)任作為沖刷機(jī)制的功能性角色。
2.如權(quán)利要求1所述的方法,其中在所述滑動(dòng)寫入窗口機(jī)制內(nèi),僅在以下操作之間應(yīng)用經(jīng)由關(guān)鍵部分的相互排除包括添加和移除緩存的操作的改變所述滑動(dòng)寫入窗口的結(jié)構(gòu)的操作、和計(jì)算在所述滑動(dòng)寫入窗口機(jī)制中寫入輸入數(shù)據(jù)的位置的操作。
3.如權(quán)利要求2所述的方法,其中所述單個(gè)寫入器和滑動(dòng)寫入窗口機(jī)制通過(guò)執(zhí)行以下中的至少一個(gè)來(lái)進(jìn)入關(guān)鍵部分中的一個(gè)向所述滑動(dòng)寫入窗口機(jī)制提供所述多個(gè)寫區(qū)間,其中所述滑動(dòng)寫入窗口機(jī)制計(jì)算并返回多個(gè)緩存區(qū)間以適配所述多個(gè)寫區(qū)間,所述多個(gè)緩存區(qū)間對(duì)應(yīng)于所述多個(gè)緩存,將所述多個(gè)緩存區(qū)間中相關(guān)的一個(gè)的多個(gè)完整塊區(qū)間的數(shù)量遞增一個(gè)因子,以及執(zhí)行將所述多個(gè)緩存區(qū)間中的至少一個(gè)添加至所述滑動(dòng)寫入窗口機(jī)制或從所述滑動(dòng)寫入窗口機(jī)制移除其中之一,其中所述多個(gè)緩存區(qū)間中的空白的一個(gè)的添加可以按序列順序跟隨在所述多個(gè)緩存區(qū)間中現(xiàn)存的一個(gè)之后,當(dāng)添加所述多個(gè)緩存區(qū)間中的一個(gè)時(shí),所述滑動(dòng)寫入窗口機(jī)制的尺寸增加,當(dāng)移除所述多個(gè)緩存區(qū)間中的一個(gè)時(shí),所述滑動(dòng)寫入窗口機(jī)制的尺寸減小。
4.如權(quán)利要求3所述的方法,其中如果所述多個(gè)完整塊區(qū)間的新值達(dá)到所述多個(gè)緩存區(qū)間中的一個(gè)中的恒定數(shù)量,并且所述多個(gè)緩存區(qū)間中的一個(gè)是所述滑動(dòng)寫入窗口機(jī)制中的第一個(gè),則設(shè)置向所述單個(gè)寫入器提供的、指示第一緩存區(qū)間針對(duì)沖刷準(zhǔn)備就緒的標(biāo)記。
5.如權(quán)利要求4所述的方法,進(jìn)一步包括其中如果所述指示所述第一緩存區(qū)間的標(biāo)記已完成,則由所述單個(gè)寫入器執(zhí)行以下中的至少一個(gè)在所述滑動(dòng)寫入窗口機(jī)制中掃描所述多個(gè)緩存區(qū)間,向其中所述多個(gè)塊區(qū)間全部完整的、起始于所述多個(gè)緩存區(qū)間中的第一個(gè)的所述多個(gè)緩存區(qū)間中的相繼的下一個(gè)添加多個(gè)引用,按照基于所述多個(gè)緩存區(qū)間在所述滑動(dòng)寫入窗口機(jī)制中所處的順序的恰當(dāng)?shù)捻樞?,將所述多個(gè)緩存區(qū)間放置在沖刷隊(duì)列中,以及通過(guò)將開(kāi)始偏移遞增從滑動(dòng)寫入窗口機(jī)制移除的所述多個(gè)緩存區(qū)間中一個(gè)的尺寸,來(lái)將滑動(dòng)寫入窗口機(jī)制向前移動(dòng)。
6.如權(quán)利要求2所述的方法,進(jìn)一步包括針對(duì)在所述關(guān)鍵部分的一個(gè)期間所獲得的多個(gè)緩存區(qū)間中的所返回的一個(gè)中的每一個(gè),在所述關(guān)鍵部分中的一個(gè)之外執(zhí)行以下中的至少一個(gè)基于所述多個(gè)緩存的開(kāi)始偏移而將來(lái)自所述多個(gè)寫區(qū)間的數(shù)據(jù)拷貝至緩存上下文中,由所述單個(gè)寫入器向所述滑動(dòng)寫入窗口機(jī)制通知已完成將所述多個(gè)寫區(qū)間寫入至所述多個(gè)緩存區(qū)間中,由所述單個(gè)寫入器在所述多個(gè)緩存區(qū)間內(nèi)的多個(gè)塊區(qū)間上迭代,其中針對(duì)所述多個(gè)塊區(qū)間中的每一個(gè),在特定操作的持續(xù)時(shí)間中利用瞬時(shí)鎖定來(lái)實(shí)施原子操作,自動(dòng)更新被向所述多個(gè)塊區(qū)間寫入的尺寸所占據(jù)的字節(jié)的數(shù)量的值,并且所述值被初始化為零,由當(dāng)前的執(zhí)行線程按照在所述沖刷隊(duì)列中的放置順序,而將所述多個(gè)緩存區(qū)間中被放置在所述沖刷隊(duì)列中的數(shù)個(gè)從所述沖刷隊(duì)列沖刷,其中所述多個(gè)緩存區(qū)間內(nèi)容被沖刷至所述存儲(chǔ)環(huán)境,并且在基于所述多個(gè)塊區(qū)間的輸入數(shù)據(jù)的基礎(chǔ)上計(jì)算循環(huán)冗余校驗(yàn)(CRC),以及獲取從沖刷中清空的所述多個(gè)緩存區(qū)間,所獲取的所述多個(gè)緩存區(qū)間的數(shù)量為由當(dāng)前的執(zhí)行線程沖刷的所述多個(gè)緩存的數(shù)量。
7.如權(quán)利要求1所述的方法,進(jìn)一步包括將所述單個(gè)寫入器與由滑動(dòng)寫入窗口機(jī)制的當(dāng)前位置所反映的所述多個(gè)寫區(qū)間同步,其中當(dāng)要寫入的數(shù)據(jù)匹配所述滑動(dòng)寫入窗口機(jī)制的當(dāng)前區(qū)間時(shí),所述單個(gè)寫入器向所述滑動(dòng)寫入窗口機(jī)制發(fā)送所述數(shù)據(jù)。
8.一種用于在計(jì)算機(jī)環(huán)境中寫入數(shù)據(jù)的系統(tǒng),包括可操作于計(jì)算機(jī)環(huán)境中的至少一個(gè)處理器設(shè)備,其中所述至少一個(gè)處理器設(shè)備適于將布置在多個(gè)寫區(qū)間中的數(shù)據(jù)加載至多個(gè)緩存中,所述多個(gè)緩存的總體被配置為適于移動(dòng)以適配所述寫區(qū)間的滑動(dòng)寫入窗口機(jī)制,其中所述數(shù)據(jù)可以不按序列順序到達(dá)所述多個(gè)緩存,但被順序排列至所述滑動(dòng)寫入窗口機(jī)制中的所述多個(gè)緩存中;并且一旦在按序列存儲(chǔ)于所述滑動(dòng)寫入窗口機(jī)制中的所述多個(gè)緩存中的至少一個(gè)中填充數(shù)據(jù)后,將所述滑動(dòng)寫入窗口機(jī)制中的數(shù)據(jù)傳遞至單個(gè)寫入器,所述單個(gè)寫入器適于通過(guò)使用引用信息將數(shù)據(jù)的序列區(qū)間從所述滑動(dòng)寫入窗口機(jī)制沖刷至存儲(chǔ)環(huán)境,來(lái)?yè)?dān)任作為沖刷機(jī)制的功能性角色。
9.如權(quán)利要求8所述的系統(tǒng),其中在所述滑動(dòng)寫入窗口機(jī)制內(nèi),僅在以下操作之間應(yīng)用經(jīng)由關(guān)鍵部分的相互排除包括添加和移除緩存的操作的改變所述滑動(dòng)寫入窗口的結(jié)構(gòu)的操作、和計(jì)算在所述滑動(dòng)寫入窗口機(jī)制中寫入輸入數(shù)據(jù)的位置的操作。
10.如權(quán)利要求9所述的系統(tǒng),其中所述至少一個(gè)處理器設(shè)備進(jìn)一步適于促使所述單個(gè)寫入器和所述滑動(dòng)寫入窗口機(jī)制通過(guò)執(zhí)行以下中的至少一個(gè)來(lái)進(jìn)入所述關(guān)鍵部分中的一個(gè)向所述滑動(dòng)寫入窗口機(jī)制提供多個(gè)寫區(qū)間,其中所述滑動(dòng)寫入窗口機(jī)制計(jì)算并返回多個(gè)緩存區(qū)間以適配所述多個(gè)寫區(qū)間,將所述多個(gè)緩存區(qū)間中相關(guān)的一個(gè)的多個(gè)完整塊區(qū)間的數(shù)量遞增一個(gè)因子,以及執(zhí)行將所述多個(gè)緩存區(qū)間中的至少一個(gè)添加至所述滑動(dòng)寫入窗口機(jī)制或從所述滑動(dòng)寫入窗口機(jī)制移除其中之一,其中所述多個(gè)緩存區(qū)間中的空白的一個(gè)的添加可以按序列順序跟隨在所述多個(gè)緩存區(qū)間中現(xiàn)存的一個(gè)之后,當(dāng)添加所述多個(gè)緩存區(qū)間中的一個(gè)時(shí),所述滑動(dòng)寫入窗口機(jī)制的尺寸增加,當(dāng)移除所述多個(gè)緩存區(qū)間中的一個(gè)時(shí),所述滑動(dòng)寫入窗口機(jī)制的尺寸減小。
11.如權(quán)利要求10所述的系統(tǒng),其中所述至少一個(gè)處理器設(shè)備進(jìn)一步適于如果所述多個(gè)完整塊區(qū)間的新值達(dá)到所述多個(gè)緩存區(qū)間中的一個(gè)中的恒定數(shù)量,并且所述多個(gè)緩存區(qū)間中的一個(gè)是所述滑動(dòng)寫入窗口機(jī)制中的第一個(gè),則設(shè)置向所述單個(gè)寫入器提供的、指示第一緩存區(qū)間對(duì)沖刷準(zhǔn)備就緒的標(biāo)記。
12.如權(quán)利要求11所述的系統(tǒng),其中所述至少一個(gè)處理器設(shè)備進(jìn)一步適于如果所述指示第一緩存區(qū)間的標(biāo)記已完成,則由所述單個(gè)寫入器執(zhí)行以下中的至少一個(gè)在所述滑動(dòng)寫入窗口機(jī)制中掃描所述多個(gè)緩存區(qū)間,向其中所述多個(gè)塊區(qū)間全部完整的、起始于所述多個(gè)緩存區(qū)間中的第一個(gè)的所述多個(gè)緩存區(qū)間中的相繼的下一個(gè)添加多個(gè)引用,按照基于所述多個(gè)緩存區(qū)間在所述滑動(dòng)寫入窗口機(jī)制中所處的順序的恰當(dāng)?shù)捻樞?,將所述多個(gè)緩存區(qū)間放置在沖刷隊(duì)列中,以及通過(guò)將開(kāi)始偏移遞增從滑動(dòng)寫入窗口機(jī)制移除的所述多個(gè)緩存區(qū)間中一個(gè)的尺寸,將滑動(dòng)寫入窗口機(jī)制向前移動(dòng)。
13.如權(quán)利要求9所述的系統(tǒng),其中所述至少一個(gè)處理器設(shè)備進(jìn)一步適于針對(duì)在所述關(guān)鍵部分中的一個(gè)期間所獲得的多個(gè)緩存區(qū)間中的所返回的一個(gè)中的每一個(gè),在所述關(guān)鍵部分中的一個(gè)之外執(zhí)行以下中的至少一個(gè)基于所述多個(gè)緩存的開(kāi)始偏移而將來(lái)自所述多個(gè)寫區(qū)間的數(shù)據(jù)拷貝至緩存上下文中,由所述單個(gè)寫入器向所述滑動(dòng)寫入窗口機(jī)制通知已完成將所述多個(gè)寫區(qū)間寫入至所述多個(gè)緩存區(qū)間中,由所述單個(gè)寫入器在所述多個(gè)緩存區(qū)間內(nèi)的多個(gè)塊區(qū)間上迭代,其中針對(duì)所述多個(gè)塊區(qū)間中的每一個(gè),在特定操作的持續(xù)時(shí)間中利用瞬時(shí)鎖定來(lái)實(shí)施原子操作,自動(dòng)更新被向所述多個(gè)塊區(qū)間寫入的尺寸所占據(jù)的字節(jié)的數(shù)量的值,并且所述值被初始化為零,由當(dāng)前的執(zhí)行線程按照在所述沖刷隊(duì)列中的放置順序,而將所述多個(gè)緩存區(qū)間中被放置在所述沖刷隊(duì)列中的數(shù)個(gè)從所述沖刷隊(duì)列沖刷,其中所述多個(gè)緩存區(qū)間內(nèi)容被沖刷至所述存儲(chǔ)環(huán)境,并且在基于所述多個(gè)塊區(qū)間的輸入數(shù)據(jù)的基礎(chǔ)上計(jì)算循環(huán)冗余校驗(yàn)(CRC),以及獲取從沖刷中清空的所述多個(gè)緩存區(qū)間,所獲取的所述多個(gè)緩存區(qū)間的數(shù)量為由當(dāng)前的執(zhí)行線程沖刷的所述多個(gè)緩存的數(shù)量。
14.如權(quán)利要求8所述的系統(tǒng),其中所述至少一個(gè)處理器設(shè)備進(jìn)一步適于將所述單個(gè)寫入器與由滑動(dòng)寫入窗口機(jī)制的當(dāng)前位置所反映的所述多個(gè)寫區(qū)間同步,其中當(dāng)要寫入的數(shù)據(jù)匹配所述滑動(dòng)寫入窗口機(jī)制的當(dāng)前區(qū)間時(shí),所述單個(gè)寫入器向所述滑動(dòng)寫入窗口機(jī)制發(fā)送所述數(shù)據(jù)。
全文摘要
本發(fā)明涉及一種用于使用滑動(dòng)寫入窗口機(jī)制寫入數(shù)據(jù)的方法和系統(tǒng)。提供了寫入數(shù)據(jù)的多個(gè)實(shí)施方式。在一個(gè)實(shí)施方式中,將布置在多個(gè)寫區(qū)間中的數(shù)據(jù)加載至多個(gè)緩存中,該多個(gè)緩存的總體被配置為適于移動(dòng)以適配該寫區(qū)間的滑動(dòng)寫入窗口機(jī)制。該數(shù)據(jù)可以不按序列順序而到達(dá)存儲(chǔ)系統(tǒng),并且通過(guò)將其恰當(dāng)?shù)丶虞d至該緩存中,該數(shù)據(jù)在其被寫入至存儲(chǔ)媒介之前被序列地排序。當(dāng)滑動(dòng)寫入窗口的起始部分被寫入數(shù)據(jù)填充時(shí),該部分被沖刷至存儲(chǔ)媒介,并且窗口向前滑動(dòng)以適配由寫入器寫入的進(jìn)一步的數(shù)據(jù)。寫入器與由滑動(dòng)寫入窗口的當(dāng)前位置所反映的區(qū)間同步,并且它們僅在要寫入的數(shù)據(jù)匹配窗口的當(dāng)前區(qū)間的情況下發(fā)送該數(shù)據(jù)。
文檔編號(hào)G06F12/08GK102479160SQ20111026577
公開(kāi)日2012年5月30日 申請(qǐng)日期2011年9月1日 優(yōu)先權(quán)日2010年11月23日
發(fā)明者A·克雷迪, A·施賴伯, L·阿羅諾維奇 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司