本發(fā)明的實施方式一般涉及數(shù)據(jù)存儲系統(tǒng)。更特別地,本發(fā)明的實施方式涉及使用客戶端分配的對象描述符訪問數(shù)據(jù)對象。
背景技術(shù):
典型地,文件系統(tǒng)具有這樣的架構(gòu),其中執(zhí)行用于存儲和獲取數(shù)據(jù)的操作的存儲層使用存儲后端的文件名和目錄名。文件系統(tǒng)能夠通過使用在存儲后端的到數(shù)據(jù)的文件路徑訪問是文件或目錄的數(shù)據(jù)。當(dāng)文件在文件系統(tǒng)中被創(chuàng)建時,一些文件系統(tǒng)生成用于文件的文件句柄。文件句柄是獨立于文件名的文件標(biāo)識符且能夠用于訪問該文件。客戶端能夠保留該文件句柄并使用該文件句柄用于后續(xù)的訪問文件的請求。
例如,文件系統(tǒng)(fs)客戶端關(guān)于文件訪問請求與fs服務(wù)器通信。fs服務(wù)器接著關(guān)于文件訪問請求與文件系統(tǒng)中的存儲子系統(tǒng)通信。一般來說,在存儲級,存儲子系統(tǒng)使用該文件的文件描述符來執(zhí)行操作(例如打開文件操作),而不是使用文件句柄。文件描述符是包含打開文件的細節(jié)的常駐核心的數(shù)據(jù)結(jié)構(gòu)中的項的索引。在便攜式操作系統(tǒng)界面(posix)系統(tǒng)中,數(shù)據(jù)結(jié)構(gòu)可以成為文件描述符表。通常,fs服務(wù)器不讀/寫訪問包含用于打開文件的文件描述符的文件描述符表。典型地,文件描述符由運行該文件系統(tǒng)的操作系統(tǒng)的核指派且該核將該指派記錄到文件描述符表中。
傳統(tǒng)地,當(dāng)fs服務(wù)器從fs客戶端接收文件句柄時,fs服務(wù)器必須請求該文件被打開以讓該核指派文件描述符給文件。常規(guī)地,fs服務(wù)器進行系統(tǒng)調(diào)用來請求該核打開該文件。響應(yīng)于該系統(tǒng)調(diào)用,該核可以打開該文件,對該文件進行文件描述符指派,且將該文件描述符返回給fs服務(wù)器。fs服 務(wù)器然后可以使用從核返回的該文件描述符來發(fā)出讀取調(diào)用到存儲子系統(tǒng)以執(zhí)行對文件的讀取操作。當(dāng)讀取操作完成時,fs服務(wù)器發(fā)出關(guān)閉調(diào)用。
在提供存儲服務(wù)給許多客戶端的存儲服務(wù)器且每個客戶端可以訪問許多文件或?qū)ο笾?,核?或fs服務(wù)器可以必須處理為許多線程或進程分配和管理許多文件描述符的操作。在直接服務(wù)一個或多個客戶端或fs服務(wù)器的核(或核模擬)內(nèi),可以有負責(zé)管理或使用文件描述符狀態(tài)的多個線程或?qū)嶓w。在這些線程/實體之間的同步是冗長和/或復(fù)雜的,這能夠?qū)е螺^低的性能。
附圖說明
在附圖中通過示例且非限制的方式示出本發(fā)明的實施方式,其中相同的附圖標(biāo)記表示相似的元件。
圖1是示出根據(jù)本發(fā)明的一個實施方式的存儲系統(tǒng)的框圖;
圖2是示出根據(jù)本發(fā)明的一個實施方式的存儲系統(tǒng)的框圖;
圖3是示出根據(jù)本發(fā)明的一個實施方式的使用客戶端分配的對象描述符創(chuàng)建或打開對象的過程的流程圖;
圖4是示出根據(jù)本發(fā)明的一個實施方式的使用客戶端分配的對象描述符訪問對象的過程的流程圖;
圖5是示出根據(jù)本發(fā)明的一個實施方式的終止使用客戶端分配的對象描述符訪問對象的會話的過程的流程圖;
圖6a-6d是示出根據(jù)本發(fā)明的某些實施方式的存儲設(shè)施示例的框圖;
圖7是示出根據(jù)本發(fā)明的一個實施方式的通信架構(gòu)(fabric)的示例的框圖;
圖8是示出根據(jù)本發(fā)明的一個實施方式的存儲模塊的示例的框圖。
具體實施方式
參考下面描述的細節(jié)來描述本發(fā)明的各種實施方式和方面,且附圖將示出各種實施方式。下面的描述和附圖是解釋本發(fā)明的且不理解為限制本發(fā)明。描述了許多特定細節(jié)來提供對本發(fā)明的各種實施方式的全面理解。但是,在某些情況中,沒有描述公知或常規(guī)細節(jié)以提供本發(fā)明的實施方式的簡潔描述。
說明書中對“一個實施方式”或“一實施方式”的引用是指結(jié)合實施方式描述的特定特征、結(jié)構(gòu)或特性能夠被包括在本發(fā)明的至少一個實施方式中。本說明書中不同地方出現(xiàn)的短語“在一個實施方式中”不必都指同一個實施方式。
根據(jù)一些實施方式,不是文件系統(tǒng)(fs)服務(wù)器部件,例如操作系統(tǒng)(os)的核,文件系統(tǒng)的客戶端部件負責(zé)生成或分配文件系統(tǒng)對象的對象描述符(或od)(也稱為文件描述符),用于訪問文件系統(tǒng)對象。具體地,當(dāng)文件系統(tǒng)客戶端訪問文件系統(tǒng)提供的對象時,文件系統(tǒng)客戶端初始分配或生成新對象描述符用于特定訪問會話或過程。文件系統(tǒng)客戶端經(jīng)由文件系統(tǒng)服務(wù)應(yīng)用編程接口(api)進行到文件系統(tǒng)的系統(tǒng)調(diào)用以通過傳遞目標(biāo)對象的對象描述符和對象標(biāo)識符(oid)(例如路徑/名稱)來創(chuàng)建或打開目標(biāo)對象。作為響應(yīng),文件系統(tǒng)服務(wù)器部件檢查對象描述符以確定對象描述符是否有效。如果確定對象描述符有效,則文件系統(tǒng)服務(wù)器部件更新與該特定訪問會話或過程相關(guān)聯(lián)的對象描述符表(odt)。該odt可以包括將對象描述符映射到oid標(biāo)識的目標(biāo)對象的對象結(jié)構(gòu)的odt項。當(dāng)訪問會話或過程被終止時,文件系統(tǒng)服務(wù)器部件能夠從對象描述符表移除相應(yīng)的對象描述符。在對象存儲環(huán)境中,每個對象由對象描述符唯一標(biāo)識。在一個實施方式中,不是對象存儲的核或?qū)ο蟠鎯Φ姆?wù)器部件,而是客戶端負責(zé)分配對象描述符用于訪問存儲在對象存儲(objectstore)中的相應(yīng)對象。
在具有冗余或默認容忍能力的存儲系統(tǒng)中,多個控制模塊可以被部署以 處理來自多個客戶端的針對訪問存儲資源的請求,例如存儲在一個或多個存儲模塊中的數(shù)據(jù)對象或文件。控制模塊的每一個(例如作為存儲控制器來操作)可以為每個客戶端過程或訪問會話保留對象描述符表的副本,以用于訪問存儲在存儲系統(tǒng)中的對象。這些控制模塊必須周期同步其各自的對象描述符表以提供服務(wù)給客戶端,因為客戶端能夠通過控制模塊的任意一個訪問相同的對象。通過使能或配置客戶端生成或分配對象描述符,用于分配對象描述符和同步對象描述符的控制模塊的負擔(dān)能夠很大降低,因為存儲系統(tǒng)的控制模塊可以同時提供服務(wù)給許多客戶端。
根據(jù)一個實施方式,存儲系統(tǒng)包括通過通信架構(gòu)通信耦合到客戶端設(shè)備和存儲模塊的第一控制模塊(cm)和第二cm,而第一cm和第二cm通過處理器間鏈路(也稱為處理器互連)彼此耦合。cm的一個可以作為主cm來操作,而另一個cm可以作為輔助cm來操作??蛻舳嗽O(shè)備包括od生成器或分配器,用于生成或分配對象描述符。當(dāng)客戶端設(shè)備嘗試訪問對象(例如文件對象)時,客戶端生成對象描述符并發(fā)送具有該對象描述符的請求給控制模塊,在該示例中,控制模塊是第一cm。響應(yīng)于該請求,第一cm檢查該對象描述符以確定對象描述符是否有效。第一cm可以基于客戶端創(chuàng)建的對象描述符來更新其對象描述符表。如果對象描述符是有效的,則第一cm允許客戶端訪問目標(biāo)對象。此外,第一cm可以通過處理器間鏈路傳送控制信號給第二cm以允許第二cm關(guān)于該對象描述符同步其對象描述符表。
圖1是示出根據(jù)本發(fā)明的一個實施方式的存儲系統(tǒng)的框圖。存儲系統(tǒng)100可以代表任何存儲服務(wù)器,例如云存儲服務(wù)器、內(nèi)容服務(wù)器等。參考圖1,存儲系統(tǒng)100包括一個或多個客戶端設(shè)備101(也簡稱為客戶端),其經(jīng)由一個或多個集線器或交換設(shè)備104a-104b通信耦合到控制模塊102a-102b和一個或多個存儲模塊110。雖然示出了僅一個客戶端101,但是能夠使用多個客戶端。類似地,雖然示出了僅一個存儲模塊110,但應(yīng)使 用多個存儲模塊且除了cm102a-102b還能夠使用更多cm。此外,cm102a-102b的每一個可以包括處理器和本地存儲器,例如cm存儲設(shè)備105a-105b(統(tǒng)稱為cm存儲設(shè)備105)。cm存儲設(shè)備105可以是任意類型的易失性存儲設(shè)備,例如動態(tài)隨機存取存儲器(dram)、同步dram、sdrsdram或ddrsdram。
在一個實施方式中,客戶端101經(jīng)由通信架構(gòu)耦合到cm102a-102b和存儲模塊110,而cm102a和cm102b經(jīng)由處理器間鏈路(也稱為處理器互連)彼此耦合。在該示例中,為了圖示目的,通信架構(gòu)由部件101-104b和110之間的實線或連接來表示,而處理器間鏈路106由虛線或虛連接來表示。在該示例中實線表示的通信架構(gòu)和集線器/交換設(shè)備104a-104b可以是全網(wǎng)格通信架構(gòu),其允許部件101-104b和110的每一個彼此通信并訪問彼此的資源(例如存儲、處理資源)。
在一個實施方式中,存儲系統(tǒng)100可以是服務(wù)器或服務(wù)器簇的部分,用于通過網(wǎng)絡(luò)(例如因特網(wǎng))給遠程設(shè)備提供內(nèi)容服務(wù)或數(shù)據(jù)存儲。例如,客戶端設(shè)備101可以是耦合到由cm102a-102b和存儲模塊110表示的后端存儲設(shè)施的前端服務(wù)器部件(例如網(wǎng)頁服務(wù)器、內(nèi)容服務(wù)器或云服務(wù)器)。在這樣的配置中,客戶端101作為服務(wù)器來操作以通過因特網(wǎng)提供服務(wù)給遠程設(shè)備,而客戶端101作為客戶端來通過通信架構(gòu)操作到cm102a-102b和存儲模塊110表示的存儲設(shè)施。cm102a-102b(也統(tǒng)稱為cm102)可以操作作為存儲設(shè)施的存儲控制器或服務(wù)器部件。
在一個實施方式中,存儲系統(tǒng)100可以在電子設(shè)備架內(nèi)被實施。例如,客戶端101可以被實施為插入到代表通信架構(gòu)(其由實連接和集線器/交換設(shè)備104a-104b表示)的背板的客戶端刀片(blade)或板(plane)的部分。cm102a-102b可以被實施為插入到背板的控制刀片或控制板的部分。存儲模塊110可以被實施為插入到該背板的存儲刀片(或存儲板或數(shù)據(jù)板)的部 分。因此,所有的這些刀片使用各種合適的通信協(xié)議經(jīng)由通信架構(gòu)彼此耦合,而cm102a-102b在控制刀片內(nèi)經(jīng)由處理器間鏈路106彼此耦合。其他配置也是可以的。
在一個實施方式中,存儲模塊110包括一個或多個隨機存取存儲器(ram)設(shè)備和一個或多個持久存儲設(shè)備(未示出),其可以被存儲模塊控制器120控制或管理。存儲模塊110的ram設(shè)備和持久存儲設(shè)備可以邏輯上或物理上被劃分成存儲分區(qū)125a-125b(統(tǒng)稱為存儲分區(qū)125)。存儲分區(qū)125a-125b可以分別被分配用于cm102a-102b。存儲分區(qū)125a-125b的每一個包括相應(yīng)的ram區(qū),例如ram區(qū)121a-121b(統(tǒng)稱為ram121)。ram設(shè)備能夠是任意類型的易失性存儲設(shè)備,例如動態(tài)隨機存取存儲器(dram)、同步dram、sdrsdram、或ddrsdram。類似地,存儲分區(qū)125a-125b的每一個包括相應(yīng)的持久存儲或儲存區(qū),例如持久存儲區(qū)122a-122b(統(tǒng)稱為持久存儲區(qū)122)。持久存儲區(qū)122能夠是任意類型的非易失性存儲設(shè)備,例如固態(tài)存儲器設(shè)備(例如閃存設(shè)備)。cm102a-102b可以通過通信架構(gòu)與存儲模塊控制器120通信以訪問存儲分區(qū)125的存儲位置。
在一個實施方式中,存儲模塊控制器120被配置成接收請求以從cm120a-102b讀取數(shù)據(jù)和/或?qū)?shù)據(jù)寫入到該cm120a-102b。此外,存儲模塊控制器120被配置成使用存儲分區(qū)125a-125b服務(wù)該讀取和寫入請求。此外,存儲模塊控制器120可以包括直接存儲訪問(dma)引擎,用于在存儲分區(qū)125、cm存儲設(shè)備105和客戶端101的客戶端存儲器(未示出)之間移動或復(fù)制數(shù)據(jù)。
在一個實施方式中,通信架構(gòu)能夠是任意類型的高速通信架構(gòu),例如pcte、以太網(wǎng)、光纖信道或infinibandtm架構(gòu)。處理器間鏈路106可以是因特爾quickpathtm互連或其他點對點通信鏈路。處理器間鏈路106可以是cm 102a-102b之間的專用私密連接,或可替換地,其可以被實施為該通信架構(gòu)的部分。
客戶端101可以是包括發(fā)送讀取請求給存儲設(shè)施和/或發(fā)送寫入請求給存儲設(shè)施的功能的任意系統(tǒng)??蛻舳?01可以包括客戶端處理器和客戶端存儲器(未示出)。在一個實施方式中客戶端101被配置成使用各種通信協(xié)議與存儲設(shè)施(被表示為控制模塊102a-102b和一個或多個存儲模塊110)通信,該通信協(xié)議例如是外圍部件互連(pci)、快速外圍部件互連(pci-express,pcie)、擴展快速外圍部件互連(pci-extended,pci-x)、快速非易失性存儲(nvme)、通過pcie架構(gòu)的快速非易失性存儲(nvme)、通過以太網(wǎng)架構(gòu)的快速非易失性存儲(nvme)以及通過infiniband架構(gòu)的快速非易失性存儲(nvme)。
在一個實施方式中,在客戶端101、cm102a-102b和存儲模塊110之間交換的命令和響應(yīng)/應(yīng)答可以經(jīng)由保存在與這些部件相關(guān)聯(lián)的各種存儲器中的相應(yīng)提交隊列和完成隊列來交換。例如,cm存儲器105a-105b的每一個可以包含用于客戶端101和存儲模塊110的各自或分開的提交隊列和完成隊列。類似地,客戶端101的客戶端存儲器可以保存用于cm102a-102b的每一個的提交隊列和完成隊列。提交隊列由端點使用來通過通信架構(gòu)提交命令給另一端點以用于特定操作。完成隊列由端點使用來設(shè)置對之前經(jīng)由提交隊列提交的命令的應(yīng)答或響應(yīng)。
例如,當(dāng)客戶端110發(fā)起讀取請求到cm102a時,客戶端101可以在保持在存儲器105a中的與cm102a相關(guān)聯(lián)的提交隊列中設(shè)置讀取請求命令。通過在提交隊列中設(shè)置命令,cm102a例如經(jīng)由中斷(例如門鈴中斷)被通知。類似地,當(dāng)cm102a完成從客戶端101發(fā)出的命令時,cm102a會在與客戶端101相關(guān)聯(lián)的完成隊列中設(shè)置應(yīng)答,其可以被保存在客戶端101的客戶端存儲器中。然后可以響應(yīng)于該應(yīng)答例如經(jīng)由中斷來通知客戶端101。
cm102a可以具有對其存儲分區(qū)125a的讀取和寫入訪問權(quán)利或特權(quán)并具有對存儲分區(qū)125b的僅讀取訪問權(quán)利或特權(quán)。類似地,cm102b可以具有對存儲分區(qū)125b的讀取和寫入訪問權(quán)利和對存儲分區(qū)125a的僅讀取訪問權(quán)利??商鎿Q地,cm102a-102b可以具有對所有存儲區(qū)和儲存區(qū)的讀取和寫入訪問權(quán)利,只要存儲模塊控制器120能夠管理或控制訪問爭用和/或沖突/相干。在一個實施方式中,cm102a-102b的每一個能夠直接訪問存儲分區(qū)125a-125b的任意而不用涉及存儲模塊控制器120。
典型地,客戶端101能夠經(jīng)由通過cm102a的第一通信路徑訪問存儲在與cm102a相關(guān)聯(lián)的存儲區(qū)中的數(shù)據(jù)。同樣地,客戶端101能夠經(jīng)由通過cm102b的第二通信路徑訪問存儲在與cm102b相關(guān)聯(lián)的存儲區(qū)中的數(shù)據(jù)。這兩個路徑可以同時可用于客戶端101以為了更好的帶寬??商鎿Q地,一條路徑可以是另一條路徑的冗余或保護路徑。當(dāng)一條路徑(例如通過102b的路徑)不可用時,客戶端101能夠經(jīng)過另一條路徑(例如通過cm102a的路徑)來從與故障路徑相關(guān)聯(lián)的存儲區(qū)讀取數(shù)據(jù)或向其寫入數(shù)據(jù)。關(guān)于客戶端101、cm102a-102b和存儲模塊110以及通信架構(gòu)的進一步信息將在下面參考圖6a-6d和7-8進一步詳細描述。
再參考圖1,如上所述,客戶端101可以通過網(wǎng)絡(luò)(例如因特網(wǎng))作為前端服務(wù)器(例如網(wǎng)頁服務(wù)器)操作到許多遠程設(shè)備(未示出),同時客戶端101作為客戶端操作到控制模塊102a、102b。遠程設(shè)備可以使用各種協(xié)議例如網(wǎng)絡(luò)文件系統(tǒng)(nfs)協(xié)議來訪問存儲系統(tǒng)100的存儲資源。當(dāng)遠程設(shè)備訪問例如文件的存儲資源時,該遠程設(shè)備通過網(wǎng)絡(luò)發(fā)送請求(例如創(chuàng)建或打開請求)給客戶端101。該請求可以被攜帶或包含在使用各種網(wǎng)絡(luò)協(xié)議的一個或多個網(wǎng)絡(luò)分組中??蛻舳?01可以生成文件句柄并將該文件句柄返回給遠程設(shè)備以用于之后訪問該文件。然后客戶端101使用代表與被訪問的文件相關(guān)聯(lián)的文件系統(tǒng)對象的對象描述符(也稱為文件描述符)與存儲系統(tǒng) 100的下層文件系統(tǒng)或?qū)ο蟠鎯?在該示例中是cm102a-102b)通信。也就是說,遠程設(shè)備使用文件句柄或?qū)ο缶浔c客戶端101通信,而客戶端101使用對象描述符與cm102a-102b通信。出于示例的目的,在本說明書中,術(shù)語“對象描述符”和“文件描述符”是可互換的術(shù)語。類似地,術(shù)語“對象描述符表”和“文件描述符表”是可互換的術(shù)語。術(shù)語“對象句柄”和“文件句柄”是可互換的術(shù)語。
客戶端101可以保存將遠程設(shè)備使用的對象句柄與在客戶端101和cm102之間使用的對象描述符進行映射的信息,以用于特定的訪問會話或訪問過程。當(dāng)客戶端101訪問特定對象時,客戶端101必須創(chuàng)建或打開目標(biāo)對象,例如使用唯一標(biāo)識該對象的對象標(biāo)識符(oid)。對象也可以基于對象的存儲路徑和名稱(路徑/名稱)的組合被訪問。在常規(guī)系統(tǒng)中,客戶端101可以通過傳遞作為參數(shù)的目標(biāo)對象的對象標(biāo)識符來經(jīng)由文件系統(tǒng)api進行系統(tǒng)調(diào)用(例如創(chuàng)建、打開)。作為響應(yīng),文件系統(tǒng)或操作系統(tǒng)的核(在該示例中是cm102)可以生成或分配對象描述符并將該新分配的對象描述符返回給客戶端101??蛻舳?01然后使用該對象描述符用于對目標(biāo)對象的后續(xù)操作(例如讀取、寫入)。
根據(jù)一個實施方式,客戶端包括od生成器130(也稱為od分配器),被配置成生成或分配對象描述符。當(dāng)客戶端101嘗試(例如響應(yīng)于從遠程設(shè)備接收的請求)訪問存儲模塊110保存的對象時,客戶端101的od生成器130生成或分配唯一標(biāo)識在訪問會話或過程的當(dāng)前實例內(nèi)訪問的對象的對象描述符。該嘗試可以寫入要被存儲在存儲模塊110中的新對象,或可替換地,其可以嘗試打開已有的對象用于讀取和/或?qū)懭氩僮?。od生成器130可以將調(diào)用到具有預(yù)定算法(未示出)的庫的預(yù)定api,以生成唯一對象描述符。
客戶端101然后與cm102a(在該示例中作為主cm)通信以通過傳遞作為參數(shù)的對象描述符打開新訪問會話。例如,如果客戶端101想要創(chuàng)建新 對象,則客戶端101可以調(diào)用創(chuàng)建函數(shù),例如create(od,oid)。如果客戶端101想要訪問已有的對象,則客戶端101可以調(diào)用打開函數(shù),例如open(od,oid)。在這些示例中,od被客戶端101創(chuàng)建或分配,而不是在常規(guī)系統(tǒng)中由cm102創(chuàng)建或分配。
響應(yīng)于該請求(例如創(chuàng)建或打開),cm102a檢測從系統(tǒng)調(diào)用接收的od以確定該od關(guān)于在cm102a保存在cm存儲器105a中的odt135a是否是有效的od。如果確定od是有效的,則cm102a允許客戶端101進行訪問目標(biāo)對象的后續(xù)動作(例如讀取、寫入),其中客戶端101使用od作為參考用于該特定會話。cm102a更新保存在cm存儲器105a中與cm102a相關(guān)聯(lián)的odt135a。odt135a被cm102a使用來認證和/或授權(quán)客戶端101用于訪問存儲在存儲模塊110中的對象。類似地,odt135b被cm102b使用來認證和/或授權(quán)客戶端101用于訪問存儲模塊110。
此外,cm102a通過處理器間鏈路106與cm102b通信以允許cm102b將cm存儲器105b中保存的odt135b與與cm102a相關(guān)聯(lián)的odt135a同步。結(jié)果是,由于cm102a-102b不是必須生成或分配od,且它們提供服務(wù)給許多客戶端,如果cm102a-102b要分配od,則這樣的配置明顯降低可能的相干、競爭情況和/或odt同步問題。
在一個實施方式中,cm102a可以經(jīng)由處理器間鏈路106傳送新odt項的信息給cm102b??商鎿Q地,cm102a可以使用共享的存儲模塊110來傳送新odt項的信息給cm102b。例如,cm102a可以例如經(jīng)由存儲模塊控制器120將odt項和/或整個odt存儲到存儲模塊110的預(yù)定存儲位置。該預(yù)定存儲位置是之前在cm102a-102b之間達成的存儲位置。在響應(yīng)中,cm102b能夠從該預(yù)定存儲位置獲取odt項和/或odt信息并更新其odt135b。例如,cm102a可以將該odt項信息存儲在ram區(qū)121a的預(yù)定存儲位置,并經(jīng)由處理器間鏈路106向cm102b發(fā)送通知。該通知可 以包括指示odt項信息存儲或位于哪個位置的信息。響應(yīng)于該通知,cm102b從ram區(qū)121a獲取該信息并將該信息復(fù)制到ram區(qū)121b且然后復(fù)制到cm存儲器105b的odt135b。
注意系統(tǒng)100關(guān)于多個cm102a-102b被描述??梢岳斫獗菊f明書中描述的技術(shù)的益處也能夠適用于具有單個cm的系統(tǒng)。即使沒有第二cm,也有益處,因為多個或許多線程運行在一個cm中,正常需要更多和/或明顯同步是cm實施od分配。通過將od分配移到客戶端,幾乎完全不需要該同步。換句話講,在每個cm上有多個或許多線程,其od的分配能夠隱式公布,不需要初始接收線程執(zhí)行的以外的同步或誤差檢查。
圖2是示出根據(jù)本發(fā)明的另一實施方式的存儲系統(tǒng)的框圖。存儲系統(tǒng)200可以代表圖1的存儲系統(tǒng)100。參考圖2,存儲系統(tǒng)200包括但不限于通過如上所述的通信架構(gòu)通信耦合到與一個或多個存儲模塊(例如圖1的存儲模塊110)相關(guān)聯(lián)的控制模塊102的客戶端101。雖然僅示出了一個客戶端,但是多個客戶端能夠耦合到控制模塊102以訪問保存在存儲模塊中的存儲資源。類似地,雖然僅示出了一個控制模塊,但是多個控制模塊可以被部署。例如,控制模塊102可以表示圖1的控制模塊102a-102b的任意。
如上所述,客戶端101可以包括其自己的處理器和存儲器用于提供客戶端應(yīng)用201a-201b和od生成器130。客戶端應(yīng)用201a-201b可以是任意類型的軟件應(yīng)用,例如備份軟件、或網(wǎng)頁服務(wù)器軟件,用于向遠程設(shè)備提供服務(wù)。根據(jù)一個實施方式,當(dāng)應(yīng)用201a嘗試在控制模塊102管理的存儲模塊中讀取或?qū)懭雽ο?例如響應(yīng)于從遠程設(shè)備接收的請求)時,應(yīng)用201a調(diào)用od生成器130來生成新對象描述符,以用于與應(yīng)用201a相關(guān)聯(lián)的特定讀取或?qū)懭霑捇蜻^程。
應(yīng)用201a可以調(diào)用預(yù)定api來調(diào)用od生成器,其中api可以由庫提供。od生成器130可以運行在與客戶端101相關(guān)聯(lián)的操作系統(tǒng)的核中。例 如,od生成器130可以與運行在客戶端101的操作系統(tǒng)內(nèi)的文件系統(tǒng)或核集成或與其通信耦合,其中文件系統(tǒng)或核被配置成生成對象描述符。od生成器130能夠生成唯一od,其標(biāo)識運行過程或作為過程被執(zhí)行的應(yīng)用201a的特定訪問會話。
一旦應(yīng)用201a得到新對象描述符,應(yīng)用201a經(jīng)由系統(tǒng)調(diào)用(例如nfs調(diào)用)使用該新對象描述符發(fā)送用于訪問對象的請求給控制模塊102。該請求可以由文件系統(tǒng)或?qū)ο蟠鎯Ψ?wù)器部件202接收,其可以是文件系統(tǒng)或?qū)ο蟠鎯υL問接口的部分。例如,如果應(yīng)用201a嘗試寫入新的對象,其可以進行系統(tǒng)調(diào)用來創(chuàng)建新對象,例如create(od,oid)。如果應(yīng)用201a嘗試讀取已有的對象,其可以進行系統(tǒng)調(diào)用來打開已有的對象,例如open(od,oid)。能夠基于相應(yīng)對象的路徑/名稱來形成oid。注意在本申請中系統(tǒng)api的名稱和相關(guān)聯(lián)的調(diào)用協(xié)議僅用于示例的目的被描述。也可以使用其他的名稱或標(biāo)識符和調(diào)用協(xié)議。
在這些示例中,od生成器130在客戶端101處生成od且該od從客戶端101作為參數(shù)被傳遞給文件系統(tǒng)服務(wù)器部件202。響應(yīng)于該系統(tǒng)調(diào)用(例如創(chuàng)建或打開),文件系統(tǒng)服務(wù)器202調(diào)用od管理器203來確定從客戶端101傳遞的od是否有效。如果確定od有效,則od管理器203更新與應(yīng)用201a相關(guān)聯(lián)的odt(在該示例中是odt204),并允許請求的動作被執(zhí)行。此外,根據(jù)一個實施方式,od管理器203可以通過處理器間鏈路與另一cm(例如冗余cm)通信以同步其odt的更新。如果確定od是無效的,則文件系統(tǒng)服務(wù)器202拒絕該請求。
注意odt204是每過程的odt,其中當(dāng)前與cm102具有打開會話的過程的每一個與odt相關(guān)聯(lián)。換句話說,odt204可以代表多個odt,一個用于當(dāng)前具有與cm102提供的文件系統(tǒng)的打開會話的過程的每一個。在該示例中,odt204包括用于與應(yīng)用201a相關(guān)聯(lián)的第一過程的第一odt 和用于與應(yīng)用201b相關(guān)聯(lián)的第二過程的第二odt。每個odt包括對應(yīng)于相應(yīng)過程當(dāng)前打開的對象的odt項。對象描述符是用于odt中的項的索引或標(biāo)識符。odt項包括用于被訪問的對象的從客戶端101傳遞的od,其將該od映射到與被訪問的對象相關(guān)聯(lián)的對象表(在該示例中是對象表205)的項。對象能夠是文件、一個或多個文件的目錄或其他存儲資源。
對象表205可以是所有過程打開的系統(tǒng)級的對象表,其包含一個或多個項,每個項對應(yīng)于打開的對象的一個。對象表205的項可以在對應(yīng)對象首次被創(chuàng)建或打開時被創(chuàng)建。對象表205的項可以基于客戶端提供的對象的oid(例如路徑/名稱)被標(biāo)識。對象表205的項紀(jì)錄已經(jīng)打開對象(或其他資源)所用的模式,例如讀取、寫入或讀-寫。對象表205的項包括指向物理對象的索引節(jié)點(inode)206的指針。索引節(jié)點206包括描述實際對象的信息或元數(shù)據(jù)。例如,索引節(jié)點206包括對象被創(chuàng)建的日期、對象大小和存儲設(shè)備中對象的存儲位置以及對象的其他元數(shù)據(jù)(例如上一次修改時間、屬性)。索引節(jié)點406中關(guān)于對象的存儲位置的信息用于定位該對象,由此進程能夠?qū)υ搶ο髨?zhí)行動作(例如讀取、寫入、復(fù)制、刪除)。
如果文件系統(tǒng)是虛擬文件系統(tǒng),則對象表205可以指向虛擬節(jié)點(vnode)207,其代表虛擬文件系統(tǒng)的開放虛擬節(jié)點。而虛擬節(jié)點207指向索引節(jié)點206??梢杂幸盟饕?jié)點206的多個虛擬節(jié)點207。虛擬文件系統(tǒng)是物理文件系統(tǒng)上的抽象層。虛擬文件系統(tǒng)在核和物理文件系統(tǒng)之間提供接口或契約。虛擬節(jié)點是代表虛擬文件系統(tǒng)中的開放對象的抽象物。
在一個實施方式中,響應(yīng)于創(chuàng)建或打開調(diào)用,odt管理器203檢查與應(yīng)用201a相關(guān)聯(lián)的odt(在該示例中用于示例的目的odt是odt204)以確定odt204是否包含匹配從應(yīng)用201a傳遞的od的odt項。如果odt204已經(jīng)包含匹配該od的odt項,則這意味著該對象已經(jīng)存在或已經(jīng)被打開,且因此該od是無效的。在一個實施方式中,如果odt204沒有包含匹 配odt項,則odt管理器203在odt204中創(chuàng)建新odt項以存儲從應(yīng)用201a傳遞的od并如上所述將該od映射到相應(yīng)對象表。之后,成功狀態(tài)被返回到應(yīng)用201a,指示該系統(tǒng)調(diào)用已經(jīng)成功被服務(wù)。
此外,根據(jù)一個實施方式中,一旦已經(jīng)創(chuàng)建了新odt項,odt管理器203被配置成經(jīng)由處理器間鏈路與該系統(tǒng)中的其他cm通信以允許其他cm關(guān)于該新odt項同步它們的odt。再參考圖1,假定cm102a從客戶端101接收創(chuàng)建或打開調(diào)用,cm102a在odt135a中創(chuàng)建新odt項,cm102a的odt管理器向cm102b的od管理器傳送信號以允許cm102b更新其odt135b從而包含該新odt項。結(jié)果是,客戶端101能夠通過cm102b訪問相同的對象。cm102b可以基于其odt135b認證并授權(quán)客戶端101。
再參考圖2,一旦odt204已經(jīng)被更新并與其他cm同步,則客戶端101的應(yīng)用201a能夠使用該od來經(jīng)由例如讀取或?qū)懭胝{(diào)用訪問該對象。當(dāng)應(yīng)用201a終止該訪問會話時,其可以進行關(guān)閉調(diào)用。響應(yīng)于該關(guān)閉調(diào)用,od管理器在與應(yīng)用201a相關(guān)聯(lián)的odt204中進行查找以定位匹配該od的odt項并將該odt項從odt204移除。此外,od管理器203經(jīng)由處理器間鏈路與其他cm通信以允許其他cm通過移除相應(yīng)odt項來同步其各自的odt。在該示例中,客戶端101的od生成器130的責(zé)任是解除分配該od。注意部件202-207可以以軟件、硬件或其組合來實施。在該實施方式中,部件202-207可以被提供在cm存儲器105中并由一個或多個處理器210來執(zhí)行。
圖3是示出了根據(jù)本發(fā)明的一個實施方式的使用客戶端分配的對象描述符創(chuàng)建或打開對象的過程的流程圖。過程300可以由處理邏輯來執(zhí)行,該處理邏輯包括硬件(例如,電路、專用邏輯等)、軟件(例如包含在非暫態(tài)計算機可讀介質(zhì)中),或其組合。例如,過程300可以由如圖1-2所示的存儲 系統(tǒng)的任意來執(zhí)行。參考圖3,在框301,客戶端生成或分配用于特定會話的對象描述符以訪問存在存儲系統(tǒng)中的特定存儲資源(例如對象)。在框302,客戶端經(jīng)由預(yù)定api的集合(例如創(chuàng)建或打開)通過傳遞作為參數(shù)的對象描述符與主cm(例如操作作為存儲控制器的第一cm)通信。在框303,主cm確定客戶端提供的od是否有效。在一個實施方式中,主cm檢查其odt(例如主odt)來確定odt是否包含匹配客戶端提供的od的odt項。如果確定在odt中有已有的odt項,這意味著該對象已經(jīng)被另一過程創(chuàng)建或打開,且因此該od是無效的。響應(yīng)于確定該od是無效的,在框307,主cm通過返回失敗狀態(tài)給客戶端來拒絕該請求。
如果在框303確定沒有匹配該od的odt項,且因此od是有效的,則在框304主cm在其odt中創(chuàng)建新odt項以存儲從客戶端傳遞的od以及標(biāo)識要被訪問的對象標(biāo)識符(例如對象的路徑/名稱)。odt項將該od映射到與該對象相關(guān)聯(lián)的對象結(jié)構(gòu)或表。在框305,主cm可選地發(fā)送請求到輔助cm(例如第二cm操作作為冗余或保護cm)以在與輔助cm相關(guān)聯(lián)的輔助odt中同步該新的odt項。在框306,主cm從輔助cm接收指示odt已經(jīng)被同步的應(yīng)答。響應(yīng)于該應(yīng)答,在框307,主cm返回狀態(tài)(例如成功狀態(tài))到客戶端。
圖4是示出根據(jù)本發(fā)明的一個實施方式的使用客戶端分配的對象描述符訪問對象的過程的流程圖。過程400可以由處理邏輯來執(zhí)行,該處理邏輯包括硬件(例如電路、專用邏輯等)、軟件(例如包含在非暫態(tài)計算機可讀介質(zhì)中)或其組合。例如,過程400可以由如圖1-2中示出的存儲系統(tǒng)的任意來執(zhí)行。參考圖4,在框401,主cm從客戶端接收用于訪問對象的請求(例如讀取、寫入),其中該請求包括從客戶端提供的od。當(dāng)客戶端創(chuàng)建或打開該對象時該od被客戶端創(chuàng)建或分配。在框402,主cm檢查其odt以確定od是否有效。在一個實施方式中,主cm檢查odt包含匹配從客戶端 接收的od的odt項。如果確定od有效,則在框403,主cm允許執(zhí)行與請求相關(guān)聯(lián)的操作。在框404,主cm基于該操作返回狀態(tài)給客戶端。如果在框402確定od是無效的,則在框404主cm通過返回失敗狀態(tài)給客戶端來拒絕該請求。
圖5是示出根據(jù)本發(fā)明的一個實施方式的終止使用客戶端分配的對象描述符訪問對象的會話的過程的流程圖。過程500可以由處理邏輯來執(zhí)行,該處理邏輯包括硬件(例如電路、專用邏輯等)、軟件(例如包含在非暫態(tài)計算機可讀介質(zhì)中)或其組合。例如,過程500可以由如圖1-2中示出的存儲系統(tǒng)的任意來執(zhí)行。參考圖5,在框501,主cm從客戶端接收用于終止訪問對象的會話的請求,其中該請求包括客戶端創(chuàng)建或分配的od。響應(yīng)于該請求,在框502,主cm檢查主odt來確定od是否有效。具體地,主cm檢查該主odt來確定主odt是否包含匹配該od的odt項。如果確定od有效,則在框503,主cm從該主odt移除該匹配odt項。在框504,主cm可選地例如通過處理器間鏈路向輔助cm發(fā)送請求,以請求輔助cm通過移除相應(yīng)odt項來同步其odt。在框505,主cm從輔助cm接收指示已經(jīng)執(zhí)行該同步的應(yīng)答。響應(yīng)于該應(yīng)答,在框506,主cm返回成功狀態(tài)給客戶端。另一方面,如果在框502確定od是無效的(例如沒有匹配odt項),則主cm在框506拒絕該請求。
圖6a-6d是示出根據(jù)本發(fā)明的某些實施方式的存儲設(shè)施的示例的框圖。存儲設(shè)施可以代表上述的存儲設(shè)施。參考圖6a,存儲設(shè)施包括控制模塊1200和存儲模塊組1202??刂颇K1200可以表示上述控制模塊的任意。在一個實施方式中,控制模塊1200被配置成管理來自一個或多個客戶端或客戶端設(shè)備1380的讀取和寫入請求的服務(wù)(service)。這里的客戶端可以代表上述的客戶端或客戶端設(shè)備的任意。在一個實施方式中,控制模塊1200被配置成經(jīng)由通信架構(gòu)1350從一個或多個客戶端1380接收請求,處理該請求(其 可以包括向存儲模塊發(fā)送該請求),以及在該請求被服務(wù)之后向客戶端1380提供響應(yīng)。
在一個實施方式中,控制模塊1200包括輸入/輸出模塊(iom)1204、交換架構(gòu)1206、處理器1208、存儲器1210以及可選地場可編程門陣列(fpga)1212。在一個實施方式中,iom1204是客戶端與存儲設(shè)施中的其他部件之間的物理接口。iom1204支持多種通信協(xié)議,例如pci、pcie、pci-x、以太網(wǎng)(包含但不限于在ieee802.3a-802.3bj下定義的各種標(biāo)準(zhǔn))、infiniband、以及通過匯聚以太網(wǎng)的遠程直接存儲訪問(rdma)(roce)。
在一個實施方式中,交換架構(gòu)1206包括一個或多個互連的交換機。如果交換架構(gòu)1206包括多個交換機,每個交換機可以連接到每個其他交換機,可以連接到交換架構(gòu)中的交換機的子集,或可以僅連接到交換架構(gòu)中的一個其他交換機。在一個實施方式中交換架構(gòu)1206中的交換機的每一個是硬件和邏輯(例如使用集成電路實施)的組合(如根據(jù)交換架構(gòu)實施的協(xié)議所定義),被配置成在存儲設(shè)施中將各種部件連接一起并在各種連接的部件之間路由分組(使用該邏輯)。在一個實施方式中,交換架構(gòu)1206物理地連接到iom1204、處理器1208、存儲模塊組1202,以及fpga1212(如果有的話)。在一個實施方式中,控制模塊1200中的所有部件間的通信(除了處理器1208與存儲器1210之間的)經(jīng)過交換架構(gòu)1206。此外,控制模塊1200與存儲模塊組1202之間的所有通信經(jīng)過交換架構(gòu)1206。在一個實施方式中,使用pci協(xié)議(例如pci、pcie、pci-x或另一pci協(xié)議)來實施交換架構(gòu)1206。在這樣的實施方式中,通過交換架構(gòu)1206的所有通信使用對應(yīng)的pci協(xié)議。
在一個實施方式中,如果交換架構(gòu)1206實施pci協(xié)議,則交換架構(gòu)1206包括用于處理器的端口(或更具體地,用于集成在處理器1208中的根復(fù)合(rootcomplex)體的端口或用于連接到處理器的根復(fù)合體的端口)、用于存儲模塊組1202中的存儲模塊1214a至1214n的一個或多個端口、用于fpga 1212(如果有的話)的端口、以及用于iom1204的端口。存儲模塊1214a-1214n的每一個可以代表上述的存儲模塊的任意。在一個實施方式中,上述端口的每一個可以被配置為透明橋或不透明橋。本領(lǐng)域技術(shù)人員可以理解雖然參考pci實施來描述交換架構(gòu)1206,但是可以使用其他協(xié)議來實施交換架構(gòu)1206而不背離本發(fā)明的實施方式。
在一個實施方式中,交換架構(gòu)1206中的至少一個交換機被配置成實施組播。更具體地,在一個實施方式中,處理器1208被配置成生成組播群組,其中該組播群組包括兩個或更多個成員,每個成員指定存儲器1210和/或存儲模塊1214a-1214n中的地址。當(dāng)創(chuàng)建了組播群組時,該組播群組與組播地址相關(guān)聯(lián)。為了實施該組播,交換架構(gòu)中的至少一個交換機被配置為當(dāng)接收到將該組播地址指定為目的地地址的寫操作時,該交換機被配置成生成用于該組播群組中的每一個成員的新寫入操作,并將該寫入發(fā)送給存儲設(shè)施中的合適地址。在一個實施方式中,用于交換機生成的每一個寫入的地址通過向該組播地址添加特定偏移來確定。
處理器1208可以是具有單核或多核的電子電路的群組,被配置成執(zhí)行指令。在一個實施方式中,處理器1208可以使用復(fù)雜指令集(cisc)架構(gòu)或精簡指令集(risc)架構(gòu)被實施。在一個實施方式中,處理器1208包括根復(fù)合體(如pcie協(xié)議定義的)。在一個實施方式中,如果控制模塊1200包括根復(fù)合體(其可以集成到處理器1208),則處理器1210經(jīng)由該根復(fù)合體被耦合到處理器1208??商鎿Q地,存儲器1210使用點對點連接機制直接連接到處理器1208。在一個實施方式中,存儲器1210可以是任意易失性存儲器,包括但不限于動態(tài)隨機存取存儲器(dram)、同步dram、sdrsdram、以及ddrsdram。
在一個實施方式中,處理器1208被配置成創(chuàng)建和更新存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)(未示出),其中存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)被存儲在存儲器1210中。在一個實施 方式中,存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)包括在存儲模塊的集合中的物理存儲地址和邏輯地址之間的映射(直接或間接)。在一個實施方式中,邏輯地址是從客戶端的角度來看數(shù)據(jù)看起來所在的地址。在一個實施方式中,邏輯地址是(或包括)通過對n元組(tuple)應(yīng)用哈希(hash)函數(shù)(例如sha-1、md-5)等生成哈希值。在一個實施方式中,n元組是<對象id,偏移id>,其中對象id定義文件且偏移id定義相對于文件的起始地址的位置。在該技術(shù)的另一實施方式中,n元組是<對象id,偏移id,生成時間>,其中生成時間對應(yīng)于文件(使用對象id標(biāo)識的)被創(chuàng)建的時間??商鎿Q地,邏輯地址可以包括邏輯對象id和邏輯字節(jié)地址、或邏輯對象id和邏輯地址偏移。在該技術(shù)的另一實施方式中,邏輯地址包括對象id和偏移id。本領(lǐng)域技術(shù)人員可以理解多個邏輯地址可以被映射到單個物理地址以及邏輯地址不限于上述實施方式。
在一個實施方式中,物理地址可以對應(yīng)于(1)存儲器1210中的位置,(ii)圓頂(vaulted)存儲器中的位置,或(iii)固態(tài)存儲器模塊中的位置。在一個實施方式中,如果在存儲設(shè)施中有多個數(shù)據(jù)副本,則存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)可以將單個哈希值映射到多個物理位置。
在一個實施方式中,存儲器1210包括以下的一者或多者:用于處理器1208的提交隊列、用于處理器1208的完成隊列、用于存儲設(shè)施中的存儲模塊1214a-1214n的每一個的提交隊列、以及用于存儲設(shè)施中的存儲模塊1214a-1214n的每一個的完成隊列。在一個實施方式中,用于處理器1208的提交隊列用于發(fā)送命令(例如讀取請求、寫入請求)到處理器1208。在一個實施方式中,用于處理器1208的完成隊列用于用信號通知處理器1208其發(fā)送到另一實體的命令已經(jīng)完成。用于存儲模塊的提交和完成隊列功能類似。
在一個實施方式中,處理器1208(經(jīng)由交換架構(gòu))被配置成將各種類型的處理卸載給fpga1212。在一個實施方式中,fpga1212包括用于計算被 寫入到存儲模塊的數(shù)據(jù)和/或從存儲模塊讀取的數(shù)據(jù)的校驗和的功能。此外,fgpa1212可以包括為了在存儲模塊中使用raid方案(例如raid2-raid6)存儲數(shù)據(jù)計算p和/或q奇偶校驗信息的功能和/或執(zhí)行恢復(fù)崩潰的使用raid方案(raid2-raid6)存儲的數(shù)據(jù)所需的各種計算的功能。在一個實施方式中,存儲模塊組1202包括一個或多個存儲模塊(1214a-1214n),每一個被配置成存儲數(shù)據(jù)。
在一個實施方式中,處理器1208被配置成編程(program)該系統(tǒng)中的一個或多個dma引擎。例如,處理器1208被配置成編程在客戶端交換機中的dma引擎。處理器1208還可以被配置成編程在存儲模塊中的dma引擎。在一個實施方式中,編程客戶端交換機中的dma引擎可以包括創(chuàng)建組播群組并生成針對組播群組中的每一個成員的描述符。
在一個實施方式中,通信架構(gòu)1350能夠是高速通信架構(gòu)的任意,例如pcte、以太網(wǎng)、光纖信道、或infinibandtm架構(gòu)??蛻舳?380可以是任意系統(tǒng),其包括發(fā)送讀取請求給存儲設(shè)施和/或發(fā)送寫入請求給存儲設(shè)施的功能??蛻舳?380可以包括客戶端處理器1381和客戶端存儲器1382。在一個實施方式中客戶端1380被配置成使用各種通信協(xié)議與存儲設(shè)施1355通信,該協(xié)議例如外圍部件互連(pci)、pci-express(pcie)、pci-extended(pci-x)、非易失性存儲快速(nvme)、通過pci-express架構(gòu)的非易失性存儲快速(nvme)、通過以太網(wǎng)架構(gòu)的非易失性存儲快速(nvme)、以及通過infiniband架構(gòu)的非易失性存儲快速(nvme)。
在一個實施方式中,如果客戶端1380實施pci、pci-express或nvme,則客戶端1380可以包括根復(fù)合體(未示出)。根復(fù)合體是將客戶端1380(包括其客戶端處理器和客戶端存儲器)連接到pcie架構(gòu)的設(shè)備。在一個實施方式中,pcie架構(gòu)包括經(jīng)由交換機連接的根復(fù)合體和端點。端點是根復(fù)合體以外的設(shè)備或能夠發(fā)起pci事務(wù)(例如讀取請求、寫入請求)或是pci事務(wù) 的目標(biāo)的交換機。一個或多個客戶端和一個或多個存儲設(shè)施可以被集成作為pcie架構(gòu)的部分。此外,如果存儲設(shè)施內(nèi)的單獨部件使用pcie通信且客戶端1380中的單獨部件使用pcie通信,則存儲設(shè)施和客戶端1380中的所有部件可以被認為是單個pcie架構(gòu)的部分。
客戶端存儲器1382可以包括用于客戶端處理器的提交隊列(sq)和用于客戶端處理器的完成隊列(cq)。在本發(fā)明的一個實施方式中,例如存儲器設(shè)備1210的存儲設(shè)施存儲器包括客戶端通過通信架構(gòu)可見的用于客戶端處理器的一個或多個提交隊列??蛻舳舜鎯ζ?382包括存儲設(shè)施通過通信架構(gòu)可見的用于客戶端處理器的一個或多個完成隊列。用于客戶端處理器的提交隊列用于發(fā)送命令(例如讀取請求、寫入請求)到客戶端處理器。用于客戶端處理器的完成隊列用于用信號通知客戶端處理器其發(fā)送給另一實體的命令已經(jīng)完成。
客戶端1380還可以包括用于將客戶端1380耦合到通信架構(gòu)的客戶端交換機,其中該客戶端交換機可以包括一個或多個交換設(shè)備。如果客戶端交換機包括多個交換機,每個交換機可以連接到每個其他交換機,可以連接到交換架構(gòu)中的交換機的子集,或可以僅連接到一個其他交換機。在本發(fā)明的一個實施方式中,客戶端交換機中的每一個交換機是硬件和邏輯的組合,被配置成允許數(shù)據(jù)和消息在客戶端1380與存儲設(shè)施1355之間傳輸。
在這樣的實施方式中,客戶端交換機可以包括一個或多個端口,其中每個端口可以被配置為透明橋或不透明橋。實施為透明橋的端口允許根復(fù)合體繼續(xù)發(fā)現(xiàn)連接(直接或間接)到該端口的設(shè)備(其可以是其他根復(fù)合體、開關(guān)、pci橋或端點)。相反,當(dāng)根復(fù)合體遇到實施為非透明橋的端口時,根復(fù)合體不能夠繼續(xù)發(fā)現(xiàn)連接到該端口的設(shè)備,而是,該根復(fù)合體將該端口視為端點。
當(dāng)端口被實施為非透明橋時,非透明橋任一側(cè)上的設(shè)備可以僅使用郵箱 系統(tǒng)和門鈴中斷來通信(由客戶端交換機實施)。門鈴中斷允許非透明橋的一側(cè)的處理器發(fā)送中斷給非透明橋的另一側(cè)的處理器。此外,郵箱系統(tǒng)包括在交換架構(gòu)任一側(cè)的處理器可讀取和可寫入的一個或多個寄存器。上述的寄存器使得在客戶端交換機的任一側(cè)的處理器能夠在該非透明橋上傳遞控制和狀態(tài)信息。
為了從在非透明橋的一側(cè)的設(shè)備向非透明橋的另一側(cè)的設(shè)備發(fā)送pci事務(wù),pci事務(wù)必須被定址到實施非透明橋的端口。在接收到pci事務(wù)時,客戶端交換機執(zhí)行地址轉(zhuǎn)譯(使用直接地址轉(zhuǎn)譯機制或基于查找表的轉(zhuǎn)譯機制)。得到的地址然后用于向非透明橋的另一側(cè)的合適設(shè)備路由分組。
客戶端交換機被配置由此客戶端存儲器的至少一部分對于存儲設(shè)施可直接訪問。也就是說,客戶端交換機的一側(cè)的存儲設(shè)施可以經(jīng)由客戶端交換機直接訪問在客戶端交換機另一側(cè)的客戶端存儲器??蛻舳私粨Q機可以包括由連接到客戶端交換機的客戶端處理器或存儲設(shè)施編程的dma引擎。dma引擎可以被編程以從在存儲設(shè)施可訪問的客戶端存儲器的部分中的地址讀取數(shù)據(jù),并將該數(shù)據(jù)的副本直接寫入到存儲設(shè)施或存儲模塊中的存儲器。此外,dma引擎可以被編程以從存儲設(shè)施讀取數(shù)據(jù)并將該數(shù)據(jù)的副本直接寫入到存儲設(shè)施可以訪問到的客戶端存儲器的部分中的地址。
在本發(fā)明的一個實施方式中,dma引擎支持組播。在這樣的實施方式中,存儲設(shè)施中的處理器可以創(chuàng)建組播群組,其中該組播群組的每一個成員對應(yīng)于存儲設(shè)施的存儲器中的唯一目的地地址。該組播群組的每一個成員與描述符相關(guān)聯(lián),該描述符指定:(i)目的地地址;(ii)源地址;(iii)傳輸大小字段;以及(iv)控制字段。用于描述符的每一個的源地址保持恒定,而目的地地址針對每個描述符改變。一旦創(chuàng)建了組播群組,通過定標(biāo)組播群組地址的交換機的數(shù)據(jù)傳輸(包括dma引擎發(fā)起的傳輸)將該數(shù)據(jù)的同樣的副本置于與組播群組相關(guān)聯(lián)的所有目的地端口中。該交換機并行處理所有組 播群組描述符。
現(xiàn)在參考圖6b,根據(jù)另一實施方式,存儲設(shè)施包括控制模塊1216和至少兩個存儲模塊群組1236和1238。控制模塊1216包括交換架構(gòu)1234,其直接連接到ioma1218、iomb1220、處理器a1222、處理器b1224、fpgaa1230(如果有的話)、fpga1232(如果有的話)、存儲模塊群組a1236中的存儲模塊1236a-1236n和存儲模塊群組b1238中的存儲模塊1238a-1238n。上述部件之間的所有通信(除了處理器a1222與處理器b1224之間的)通過交換架構(gòu)1234傳遞。在該技術(shù)的一個實施方式中,控制模塊1216內(nèi)的處理器1222和1224能夠使用例如點對點互連(例如因特爾quickpath互連)直接通信。
在一個實施方式中,控制模塊1216中的兩個iom1218和1220加倍用于控制模塊1216的i/o帶寬(相對于使用單個iom的控制模塊的i/o帶寬)。此外,第二iom(或另外iom)的添加增加可以連接到給定控制模塊的客戶端的數(shù)量,以及通過擴展,能夠連接到存儲設(shè)施的客戶端的數(shù)量。在一個實施方式中,使用交換架構(gòu)1234處理各種連接的部件(上述的)之間的通信允許處理器1222和1224的每一個(經(jīng)由交換架構(gòu)1234)直接訪問連接到交換架構(gòu)1234的所有fpga1230和1232和所有存儲模塊(1236a-1236n、1238a-1238n)。
參考圖6c,根據(jù)另一實施方式,存儲設(shè)施包括(經(jīng)由交換架構(gòu)1246)連接到存儲模塊群組(1256,1258,1260,1262)中的多個存儲模塊(未示出)的控制模塊1240??刂颇K1240包括兩個iom(1242、1244)、兩個處理器(1248、1250)和存儲器(1252、1254)。在一個實施方式中,控制模塊1240中的所有部件經(jīng)由交換架構(gòu)1246通信。這些部件的操作與上述的操作類似。
在一個實施方式中,處理器a1248被配置成主要處理關(guān)于存儲或獲取 來自存儲模塊群組a和b(1256、1258)的數(shù)據(jù)的請求,而處理器b1250被配置成主要處理關(guān)于存儲和獲取來自存儲模塊群組c和d(1260、1262)的數(shù)據(jù)的請求。但是,處理器(1248、1250)被配置成(經(jīng)由交換架構(gòu)1246)與所有存儲模塊群組(1256,1258,1260,1262)通信。該配置使得控制模塊1240在處理器之間擴展i/o請求的處理和/或提供內(nèi)置的冗余來處理處理器之一故障的情形。
參考圖6d,根據(jù)另一個實施方式,存儲設(shè)施包括兩個控制模塊(1264、1266)。每個控制模塊包括iom(1296、1298、1300、1302)、處理器(1268、1270、1272、1274)、存儲器(1276、1278、1280、1282)以及fpga(如果有的話)(1288、1290、1292、1294)??刂颇K(1264、1266)的每一個包括交換架構(gòu)(1284、1286),控制模塊內(nèi)的部件通過該交換架構(gòu)通信。
在一個實施方式中,控制模塊內(nèi)的處理器(1268,1270,1272,1274)可以使用例如點對點互連(例如因特爾quickpath互連)彼此直接通信。此外,控制模塊a中的處理器(1268、1270)可以經(jīng)由到控制模塊b中的交換架構(gòu)(1286)的直接連接與控制模塊b中的部件通信。類似地,控制模塊b中的處理器(1272、1274)可以經(jīng)由到控制模塊a中的交換架構(gòu)(1284)的直接連接與控制模塊a中的部件通信。
在一個實施方式中,控制模塊的每一個連接到各種存儲模塊(由存儲模塊群組(1304,1306,1308,1310)表示)。每個控制模塊可以與連接到控制模塊中的交換架構(gòu)的存儲模塊通信。此外,控制模塊a(1264)中的處理器可以使用交換架構(gòu)b(1286)與連接到控制模塊b(266)的存儲模塊通信。類似地,控制模塊b(1266)中的處理器可以使用交換架構(gòu)a(1284)與連接到控制模塊a(1264)的存儲模塊通信。
控制模塊之間的互連允許存儲控制在存儲設(shè)施間分配i/o負載,而不管哪個控制模塊接收i/o請求。此外,控制模塊的互連使得存儲設(shè)施能夠處理 更大數(shù)量的i/o請求。此外,控制模塊的互連在控制模塊(或這里的一個或多個部件)故障的情況下提供內(nèi)置冗余。
在一個實施方式中,在控制模塊中的存儲器間對存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)進行鏡像。在這樣的情況中,控制模塊中的處理器發(fā)送必要的命令以更新存儲設(shè)施內(nèi)的所有存儲器,由此在所有存儲器間鏡像存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)。以這種方式,任意處理器可以使用其自己的存儲器來確定存儲設(shè)施中的數(shù)據(jù)(如由上述的n元組定義的)的位置。該功能允許任意處理器服務(wù)關(guān)于存儲模塊內(nèi)的數(shù)據(jù)位置的任意i/o請求。此外,通過鏡像存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu),當(dāng)存儲器之一故障時存儲設(shè)施可以繼續(xù)操作。
根據(jù)一些實施方式,上述部件的一些(例如控制模塊和/或存儲模塊)可以被集成在通信架構(gòu)(例如pcie架構(gòu))中。
圖7是示出根據(jù)本發(fā)明的一個實施方式的具有通信架構(gòu)的系統(tǒng)的框圖。在該示例中,pcie架構(gòu)被用作通信架構(gòu)的示例,以用于示例的目的。但是,可以理解也能夠應(yīng)用其他類型的通信架構(gòu)。在一個實施方式中,pcie架構(gòu)(2100)由兩個或更多片(2104a、2104b)構(gòu)成,其中每個片耦合到處理器(2112a、2112b)和一個或多個客戶端(2102a-2102b)??蛻舳?102a-2102b可以代表上述客戶端的任意。
在一個實施方式中,每個客戶端(2102a-2102b)是一種物理設(shè)備,包括處理器(或另一類型的處理部件)、存儲器和使得該物理設(shè)備能夠連接到pcie架構(gòu)(2100)的物理接口。此外,每個客戶端包括實施pcie標(biāo)準(zhǔn)(或其部分)的功能,其被需要實施本發(fā)明的一個或多個實施方式??蛻舳?102a-2102b還包括發(fā)送和/或接收事務(wù)層分組(tlp)的功能。tlp對應(yīng)于根據(jù)pcie標(biāo)準(zhǔn)定義的一種類型的分組。在本發(fā)明的一個實施方式中,tlp使得客戶端能夠從pcie架構(gòu)讀取數(shù)據(jù)并將數(shù)據(jù)寫入到pcie架構(gòu)。例如另一種方式,tlp使得客戶端能夠傳輸數(shù)據(jù)到pcie架構(gòu)中的位置和從該位置傳 輸數(shù)據(jù)。在本發(fā)明的一個實施方式中,客戶端的一個或多個操作作為pcie端點,即發(fā)起事務(wù)的設(shè)備和/或是該事務(wù)的目標(biāo)的設(shè)備??蛻舳说拿恳粋€可以經(jīng)由鏈路(即客戶端與pcie架構(gòu)之間的物理連接)連接到pcie架構(gòu)。
每個片(2104a、2104b)包括輸入/輸出(io)級交換機(its)(2108a、2108b)、集線器級交換機(hts)(2106a、2106b)以及一個或多個持久存儲模塊(psm)2110a-2110b。關(guān)于its,每個its是連接到一個或多個客戶端(2102a-2102b)的物理pcie交換機。每個its還耦合到相同片中的hts,its位于該片中。此外,每個its可以耦合到在不同于該its所位于的片的片中的一個或多個hts。在本發(fā)明的一個實施方式中,每個its連接到pci架構(gòu)中的每一個hts,由此產(chǎn)生pcie架構(gòu)中的各級之間的完全連接的網(wǎng)格。本發(fā)明的實施方式可以在沒有各級之間的完全連接的網(wǎng)格的情況下被實施,且不偏離本發(fā)明。
在本發(fā)明的一個實施方式中,每個its被配置成:(i)從其連接的客戶端接收tlp并使用地址路由(例如存儲器地址路由)將該tlp路由到該tis上的合適出口端口(上游端口或下游端口的一個),以及(ii)從its連接到的一個或多個hts接收tlp并使用地址路由將該tlp路由到該tis上的合適的出口端口(典型地下游端口)。
每個hts是耦合到一個或多個its(2108a-2108b)和一個或多個持久存儲模塊(psm(2110a-2110b))的物理pcie交換機。每個hts耦合到該hts位于的相同片中的its。此外,每個hts可以連接到在不同于該hts位于的片的片中的零個或更多個its。在本發(fā)明的一個實施方式中,每個hts連接到pcie架構(gòu)中的每一個其他its,由此產(chǎn)生pcie架構(gòu)中的各級之間的完全連接的網(wǎng)格。每個hts還可以經(jīng)由其根端口(未示出)連接到處理器。本發(fā)明的實施方式可以在沒有各級之間的完全連接的網(wǎng)的情況下被實施而不偏離本發(fā)明。
在一個實施方式中,每個hts被配置成:(1)從其連接的持久存儲模塊(psm)接收tlp并使用地址路由將該tlp路由到hts上的合適出口端口(典型地下游端口)以及(ii)從hts連接到的一個或多個its接收tlp并使用地址路由將該tlp路由到該hts上的合適的出口端口(上游端口和/或下游端口的一個或多個)。
在一個實施方式中,存儲模塊(2100a-2100b)的每一個包括持久存儲(未示出)且可選地包括易失性存儲器(未示出)(例如動態(tài)隨機存取存儲器(dram)、同步dram、sdrsdram和ddrsdram)。持久存儲可以包括但不限于nand閃存、nor閃存、磁性ram存儲器(m-ram)、轉(zhuǎn)矩磁性ram存儲器(st-mram)、相變存儲器(pcm)、憶阻存儲器、定義為非易失性存儲級存儲器(scm)的任意其他存儲器、磁盤和光盤。本領(lǐng)域技術(shù)人員可以理解本發(fā)明的實施方式不限于存儲級存儲器。在本發(fā)明的一個實施方式中,psm的每一個是僅一個片的部分。
處理器2112a-2112b的每一個可以是具有被配置成執(zhí)行指令的單核或被配置成執(zhí)行指令的多核的電子電路的群組。處理器可以使用復(fù)雜指令集(cisc)架構(gòu)或精簡指令集(risc)架構(gòu)來實施。在本發(fā)明的一個或多個實施方式中,處理器包括根復(fù)合體(如pcie標(biāo)準(zhǔn)定義的)(未示出)。該根復(fù)合體將處理器連接到至少一個片或存儲器(114a、114b)(例如動態(tài)隨機存取存儲器(dram)、同步dram、sdrsdram以及ddrsdram),其經(jīng)由pcie架構(gòu)可訪問但是不是pcie架構(gòu)中的任意片的部分。
在一個實施方式中,pcie架構(gòu)2100內(nèi)的處理器(2112a、2112b)能夠使用例如處理器互連(2116)(例如因特爾quickpath互連、因特爾前側(cè)總線或amd超傳輸)來通信。本領(lǐng)域技術(shù)人員可以理解其他點對點通信機制可以用于允許處理器(2112a、2112b)之間的直接通信而不偏離本發(fā)明的實施方式。雖然客戶端耦合到its且psm耦合到hts,但客戶端也可以耦合 到hts且psm連接到its。
在另一實施方式中,pcie架構(gòu)可以被實施由此其不包括任何psm2110a-2110b;而是,its和hts都連接到客戶端的分開的集合,其中pcie架構(gòu)促進客戶端之間的通信。此外,雖然示出的pcie架構(gòu)僅包括兩個片、兩個處理器和四個psm,但是pcie架構(gòu)2100可以被實施為更少或更多數(shù)量的上述部件的每一者,而不偏離本發(fā)明。此外,雖然pcie架構(gòu)2100連接到四個客戶端和兩個存儲器,本發(fā)明的實施方式可以被實施以使得pcie架構(gòu)與更少或更多數(shù)量的客戶端和/或存儲器連接。
此外,雖然參考包括存儲(例如psm2110a-2110b)的pcie架構(gòu)描述本發(fā)明的實施方式,但是本發(fā)明的實施方式可以被實施為使得任意兩個設(shè)備使用pcie架構(gòu)通信。例如,在本發(fā)明的一個實施方式中,客戶端可以是刀片服務(wù)器,其中刀片服務(wù)器不包括任何物理nic卡且可以用網(wǎng)絡(luò)端點設(shè)備來替換psm。
在該示例中,網(wǎng)絡(luò)端點設(shè)備是被配置成使用聯(lián)網(wǎng)協(xié)議與網(wǎng)絡(luò)(即有線網(wǎng)絡(luò)、無線網(wǎng)絡(luò)或其組合)對接和經(jīng)由pcie與pcie架構(gòu)對接的設(shè)備。網(wǎng)絡(luò)端點設(shè)備的示例是picenic卡。網(wǎng)絡(luò)端點設(shè)備每一個可以包括持久存儲(如以上參考psm描述的)和存儲端點設(shè)備存儲器(例如動態(tài)隨機存儲存儲器(dram)、同步dram、sdrsdram、ddrsdram或任意其他類型的易失性存儲器)的組合。
在另一示例中,在本發(fā)明的一個或多個實施方式中,psm2110a-2110b可以用存儲端點設(shè)備(即包括存儲數(shù)據(jù)和服務(wù)讀取和寫入來自客戶端的請求的功能的設(shè)備)替換。存儲端點設(shè)備每一個可以包括持久存儲(如以上參考psm所述的)和存儲端點設(shè)備存儲器(例如動態(tài)隨機存儲存儲器(dram)、同步dram、sdrsdram、ddrsdram或任意其他類型的易失性存儲器)的組合。存儲端點設(shè)備的示例是存儲設(shè)施。本發(fā)明不限于該示例。
此外,本發(fā)明的實施方式可以被擴展到包含經(jīng)由pcie架構(gòu)通信的兩個或更多個設(shè)備。在一般情況中,psm2110a-2110b可以被歸納為目標(biāo)設(shè)備,其中該目標(biāo)設(shè)備可以包括psm、網(wǎng)絡(luò)端點設(shè)備、存儲端點設(shè)備或能夠使用pcie通信的任意其他設(shè)備。雖然pcie架構(gòu)2100已經(jīng)被示出為包括psm(或更一般地目標(biāo)設(shè)備),但是pcie架構(gòu)2100可以被實施由此其不包括該目標(biāo)設(shè)備;而是pcie架構(gòu)2100僅包括用于連接到目標(biāo)設(shè)備的必須的物理部件。
圖8是示出根據(jù)本發(fā)明的一個實施方式的存儲模塊的示例的框圖。存儲模塊2320包括存儲模塊控制器(2322)、存儲器(2324)和一個或多個持久存儲器模塊(2330a-2330n)。持久存儲器模塊2330a-2330n可以是固態(tài)存儲器設(shè)備,例如閃存設(shè)備。在一個實施方式中,存儲模塊控制器(2322)被配置成接收從一個或多個控制模塊讀取數(shù)據(jù)和/或向一個或多個控制模塊寫入數(shù)據(jù)的請求。此外,該存儲模塊控制器(2322)被配置成使用存儲器(2324)和/或持久存儲器模塊(2330a-2330n)服務(wù)該讀取和寫入請求。存儲模塊控制器(2322)可以包括dma引擎,其中dma引擎被配置成從存儲器(2324)或從持久存儲器模塊(2330a-2330n)的一個讀取數(shù)據(jù)并將該數(shù)據(jù)的副本寫入到客戶端存儲器中的物理位置。此外,dma引擎可以被配置成將來自存儲器(2324)的數(shù)據(jù)寫入到持久存儲器模塊的一個或多個。在本發(fā)明的一個實施方式中,dma引擎被配置成由處理器編程。
存儲器(2324)可以是任意易失性存儲器,包括但不限于動態(tài)隨機存取存儲器(dram)、同步dram、sdrsdram和ddrsdram。存儲器(2324)可以在邏輯上或物理上被劃分成圓頂存儲器(2326)和緩存(2328)。存儲模塊控制器(2322)被配置成在通知存儲模塊中功率故障的情況下(或存儲模塊可能丟失功率的另一情況下)將圓頂存儲器(2326)的整個內(nèi)容寫入到持久存儲器模塊(2330a-2330n)的一個或多個。在本發(fā)明的一個實施方式中,存儲模塊控制器(2322)被配置成在存儲模塊實際功率損失與功率故障 通知時間之間將圓頂存儲器(2326)的整個內(nèi)容寫入到持久存儲器模塊(2330a-2330n)的一個或多個。相反,在功率故障的情況下(或存儲模塊可能丟失功率的另一情況下),緩存(2328)的內(nèi)容丟失。
持久存儲器模塊可以是使用固態(tài)存儲器存儲持久數(shù)據(jù)的任意數(shù)據(jù)存儲設(shè)備。在本發(fā)明的一個實施方式中,固態(tài)存儲器可以包括但不限于nand閃存、nor閃存、磁性ram存儲器(m-ram)、轉(zhuǎn)矩磁性ram存儲器(st-mram)、相變存儲器(pcm)、憶阻存儲器或定義為非易失性存儲級存儲器(scm)的任意其他存儲器。本領(lǐng)域技術(shù)人員可以理解本發(fā)明的實施方式不限于存儲級存儲器。
在一個實施方式中,以下的存儲位置是統(tǒng)一地址空間的部分:(i)經(jīng)由客戶端交換機可訪問的客戶端存儲器的部分,(ii)控制模塊中的存儲器,(iii)存儲模塊中的存儲器,以及(iv)固態(tài)存儲器模塊。因此,從存儲設(shè)施中的處理器角度,上述存儲位置(雖然物理上分開)看起來是物理地址的單個池。例如另一方式,處理器可以發(fā)出針對存儲在統(tǒng)一地址空間中的物理地址的任意處的數(shù)據(jù)的讀取和/或?qū)懭胝埱?。上述存儲位置可以稱為使用統(tǒng)一地址空間可訪問的存儲架構(gòu)。統(tǒng)一地址空間部分由客戶端交換機中的非透明橋創(chuàng)建,該客戶端交換機允許控制模塊中的處理器“看到”客戶端存儲器的部分。因此,控制模塊中的處理器可以在其能夠“看到”的客戶端存儲器的部分中執(zhí)行讀取和/或?qū)懭胝埱蟆?/p>
之前詳細描述的一些部分在對計算機存儲器內(nèi)的數(shù)據(jù)比特的操作的算法和符號表示方面被描述。這些算法描述和表示是數(shù)據(jù)處理領(lǐng)域中的技術(shù)人員使用的方式以最有效向本領(lǐng)域其他技術(shù)人員表達其工作實質(zhì)。算法在這里且一般地理解為是導(dǎo)致期望結(jié)果的自我一致的操作序列。操作是需要物理量的物理操作。
但是應(yīng)當(dāng)明白所有這些和類似術(shù)語與合適的物理量相關(guān)聯(lián)且僅是應(yīng)用 于這些量的方便的標(biāo)簽。除非從上述描述明顯的具體指明,可以理解本說明書使用例如權(quán)利要求書中提出的這些術(shù)語的描述是指計算機系統(tǒng)或類似電子計算設(shè)備的動作和過程,操作和變換計算機系統(tǒng)的寄存器和存儲器中表示為物理(電子)量的數(shù)據(jù)為在計算機系統(tǒng)存儲器或寄存器或其他這樣的信息存儲、傳輸或顯示設(shè)備內(nèi)的表示物理量的類似其他數(shù)據(jù)。
本發(fā)明的實施方式還涉及用于執(zhí)行這里的操作的裝置。該計算機程序被存儲在非暫態(tài)計算機可讀介質(zhì)中。機器可讀介質(zhì)包括用于以機器(例如計算機)可讀的形式存儲信息的任意機制。例如,機器可讀(例如計算機可讀)介質(zhì)包括機器(例如計算機)可讀存儲介質(zhì)(例如只讀存儲器(“rom”)、隨機存取存儲器(“ram”)、磁盤存儲介質(zhì)、光存儲介質(zhì)、閃存設(shè)備)。
之前圖中示出的過程或方法可以由處理邏輯來執(zhí)行,該處理邏輯包括硬件(例如電路、專用邏輯等)、軟件(例如包含在非暫態(tài)計算機可讀介質(zhì)中)或其組合。雖然上面根據(jù)一些順序操作描述了過程和方法,但是應(yīng)當(dāng)理解所述的操作的一些可以以不同順序被執(zhí)行。此外,可以并行而不是按順序執(zhí)行一些操作。
本發(fā)明的實施方式?jīng)]有參考任意特定編程語言來描述。應(yīng)當(dāng)理解各種編程語言可以用于實施如這里所述的本發(fā)明的實施方式的教示。
在以上說明書中,已經(jīng)參考了本發(fā)明的特定示意性實施方式描述本發(fā)明的實施方式。明顯的是可以對其進行各種修改而不偏離如權(quán)利要求書提出的本發(fā)明的更寬實質(zhì)和范圍。因此說明書和附圖視為是示例性而非限制性的。