訪問存儲在服務(wù)器上高速緩存中的數(shù)據(jù)記錄的設(shè)備和方法
【專利摘要】服務(wù)器和/或客戶端存儲元數(shù)據(jù)哈希映射,所述元數(shù)據(jù)哈希映射包括與用于存儲在服務(wù)器上的高速緩存中的數(shù)據(jù)記錄的鍵相關(guān)聯(lián)的一個或多個條目。每個條目存儲對應(yīng)的數(shù)據(jù)記錄的元數(shù)據(jù),其中所述元數(shù)據(jù)包括服務(wù)器側(cè)遠(yuǎn)程指針以及所述鍵的版本標(biāo)識符,所述服務(wù)器側(cè)遠(yuǎn)程指針引用存儲在所述高速緩存中的對應(yīng)的數(shù)據(jù)記錄。使用所提供的鍵通過以下訪問所選擇的數(shù)據(jù)記錄:(1)使用所提供的鍵標(biāo)識在所述元數(shù)據(jù)哈希映射中的可能匹配的條目;(2)使用來自可能匹配的條目的服務(wù)器側(cè)遠(yuǎn)程指針來訪問存儲在高速緩存中的數(shù)據(jù)記錄;以及(3)使用所提供的鍵和來自可能匹配的條目的版本標(biāo)識符來確定所訪問的數(shù)據(jù)記錄是否匹配于所選擇的數(shù)據(jù)記錄。
【專利說明】訪問存儲在服務(wù)器上高速緩存中的數(shù)據(jù)記錄的設(shè)備和方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明一般而言涉及由計算機進(jìn)行的數(shù)據(jù)庫管理系統(tǒng),并且特別地涉及RDMA優(yōu) 化的高性能分布式高速緩存(cache)。
【背景技術(shù)】
[0002] 當(dāng)今的消費者要求即時響應(yīng)的驅(qū)動器應(yīng)用以開發(fā)多種緩存方案。小規(guī)格的應(yīng) 用可以依賴本地高速緩存和復(fù)制(replication)。然而,在各請求之間的服務(wù)器相似性 (affinity)不能被確保且涉及的數(shù)據(jù)空間是龐大的情況下,當(dāng)向外擴展因特網(wǎng)應(yīng)用和使用 云時,不再能夠使用本地高速緩存。替代地,系統(tǒng)不得不依賴于必須被遠(yuǎn)程訪問的劃分的并 分布的高速緩存(例如 WebSphere Extreme Scale? 或 Oracle Coherence?)。
[0003] 常規(guī)的鍵-值(key-value)高速緩存架構(gòu)是使得客戶端通過將鍵作為參數(shù)而傳遞 的網(wǎng)絡(luò)發(fā)送對數(shù)據(jù)的請求到服務(wù)器。服務(wù)器在其高速緩存中為了所關(guān)聯(lián)的對象-值、例如 對于數(shù)據(jù)對象的句柄(handle)或到數(shù)據(jù)對象指針而進(jìn)行鍵查找(通?;诠#╤ash))。 如果找到,則數(shù)據(jù)對象被串行化并被返回給客戶端。在接收到串行化的數(shù)據(jù)對象時,客戶端 對其去串行化并將其返回到進(jìn)行請求的應(yīng)用。
【發(fā)明內(nèi)容】
[0004] 根據(jù)本發(fā)明的一個或多個實施例,提供了用于訪問存儲在服務(wù)器上的高速緩存中 的一個或多個數(shù)據(jù)記錄的方法、設(shè)備和制造品。服務(wù)器和/或客戶端存儲元數(shù)據(jù)哈希映 射(map),其包括一個或多個與用于存儲在服務(wù)器上的高速緩存中的數(shù)據(jù)記錄的鍵相關(guān)聯(lián) 的條目(entry)。每一個條目存儲用于對應(yīng)的數(shù)據(jù)記錄的元數(shù)據(jù),其中該元數(shù)據(jù)包括引用 (reference)存儲在高速緩存中的對應(yīng)的數(shù)據(jù)記錄的服務(wù)器側(cè)遠(yuǎn)程指針以及鍵的版本標(biāo)識 符。通過以下使用所提供的鍵訪問所選擇的數(shù)據(jù)記錄:(1)使用所提供的鍵標(biāo)識在元數(shù)據(jù) 哈希映射中的可能匹配的條目;(2)使用來自元數(shù)據(jù)哈希映射中的可能匹配的條目的服務(wù) 器側(cè)遠(yuǎn)程指針來訪問存儲在高速緩存中的一個或多個數(shù)據(jù)記錄;和(3)使用所提供的鍵和 來自元數(shù)據(jù)哈希映射中的可能匹配的條目的版本標(biāo)識符來確定所訪問的數(shù)據(jù)記錄是否匹 配于所選擇的數(shù)據(jù)記錄。
【專利附圖】
【附圖說明】
[0005] 現(xiàn)在參考附圖,附圖中相同的參考數(shù)字通篇代表相應(yīng)的部分:
[0006] 圖1是圖解可以用于實現(xiàn)本發(fā)明的至少一個實施例的要素的示例網(wǎng)絡(luò)數(shù)據(jù)處理 系統(tǒng)的圖。
[0007] 圖2是圖解可以用于實現(xiàn)本發(fā)明的至少一個實施例的要素的示例數(shù)據(jù)處理系統(tǒng) 的圖。
[0008] 圖3是圖解可以用于實現(xiàn)本發(fā)明的至少一個實施例的要素的示例數(shù)據(jù)處理系統(tǒng) 的圖。
[0009] 圖4A是圖解根據(jù)本發(fā)明的至少一個實施例的使用RDM用于高速緩存的系統(tǒng)環(huán)境 的示意圖。
[0010] 圖4B是圖解根據(jù)本發(fā)明的至少一個實施例的與RDMA操作一起使用的元數(shù)據(jù)哈希 映射的不意圖。
[0011] 圖4C是圖解根據(jù)本發(fā)明的至少一個實施例的服務(wù)器在某個指定的時間將來自元 數(shù)據(jù)哈希映射的條目傳輸?shù)揭粋€或多個客戶端的示意圖。
[0012] 圖5是圖解根據(jù)本發(fā)明的至少一個實施例的使用RDMA優(yōu)化的高速緩存來訪問存 儲在服務(wù)器上的高速緩存中的數(shù)據(jù)記錄的一般步驟或功能的流程圖。
【具體實施方式】
[0013] 在以下描述中,參考附圖,該附圖形成本說明書的一部分并且在附圖中通過圖解 示出其中可以實施本發(fā)明的一個或多個具體實施例。應(yīng)該理解,可以利用其它實施例,并且 可以不脫離本發(fā)明的范圍而進(jìn)行結(jié)構(gòu)的和功能的改變。
[0014] 鍵
[0015] 在以上"【背景技術(shù)】"中描述的流程需要至少四次通過TCP/IP堆棧,例如,客戶端到 網(wǎng)絡(luò)接口控制器(NIC)、NIC到服務(wù)器、服務(wù)器到NIC和NIC到客戶端。此外,數(shù)據(jù)對象需要 兩次經(jīng)歷(去)串行化操作,并且數(shù)據(jù)對象在其流經(jīng)眾多的I/O堆棧層時被多次復(fù)制。因 此,遠(yuǎn)程訪問可能比本地訪問慢了多達(dá)三個數(shù)量級(即數(shù)百微妙vs.納秒)。這或者完全阻 止了向外擴展應(yīng)用,或者使得應(yīng)用過分地慢。
[0016] 在此描述的本發(fā)明的實施例包括重新架構(gòu)的、分布式鍵-值對高速緩存,其被適 當(dāng)?shù)嘏渲糜糜赗DMA (Remote Direct Memory Access遠(yuǎn)程直接存儲器訪問)通信,避免上面 描述的TCP/IP協(xié)議堆棧問題,并降低數(shù)據(jù)傳輸?shù)牟僮飨到y(tǒng)涉及。這得到通過網(wǎng)絡(luò)的極其快 的、基于鍵的高速緩存查找。
[0017] 代替為客戶端提供到存儲在服務(wù)器上的高速緩存的遠(yuǎn)程獲得/放置接口(get/ put interface),服務(wù)器提供了客戶端可訪問的元數(shù)據(jù)哈希映射,其包括由高速緩存條目 的鍵配對到包括它們的遠(yuǎn)程RDMA指針和鍵的版本標(biāo)識符的元數(shù)據(jù)而組成的鍵-值對。元 數(shù)據(jù)哈希映射允許客戶端使用鍵來查找高速緩存條目的元數(shù)據(jù),然后在單側(cè)RDMA操作中 使用遠(yuǎn)程RDMA指針并進(jìn)行與鍵的版本標(biāo)識符的比較來訪問在服務(wù)器上的高速緩存條目。
[0018] 單側(cè)RDMA操作不涉及服務(wù)器側(cè)的軟件,因為這些操作由RDMA NIC進(jìn)行,其中NIC 進(jìn)行直接到或來自于服務(wù)器的存儲器的DMA操作,這導(dǎo)致甚至在重負(fù)載以下的非常低的服 務(wù)器CPU利用率。具體地,可以使用單側(cè)RDMA操作來實現(xiàn)讀取、更新和刪除操作,而創(chuàng)建操 作需要一些服務(wù)器側(cè)的軟件涉及,因為創(chuàng)建操作引入了新鍵。
[0019] 因此,本發(fā)明可以用于諸如零售、旅行、銀行業(yè)務(wù)、信息服務(wù)等的與上下文高度相 關(guān)的和個人化的應(yīng)用的更快的頁面呈現(xiàn)。本發(fā)明的實施例還可以用于諸如零售、移動、信用 卡等的"大數(shù)據(jù)"應(yīng)用的更快的實時分析中。另外,本發(fā)明的實施例可以用于諸如高速數(shù)據(jù) 捕捉、實時(on-the-fly)的數(shù)據(jù)豐富等的任何以因特網(wǎng)規(guī)模通信速率的數(shù)據(jù)處理。
[0020] 因此,本發(fā)明的實施例所展示的優(yōu)點是實際的并且自然幾乎是顛覆性的。RDMA優(yōu) 化的高速緩存通過增加總處理能力并加速依賴于對分布式數(shù)據(jù)的訪問的等待時間至關(guān)重 要的消費者情景而"超越(leapfrog) " 了現(xiàn)有技術(shù)的性能。
[0021] 本申請與以上標(biāo)識的交叉引用的申請?zhí)峁┝肆硗獾母倪M(jìn):
[0022] 1.消除了保留鍵的客戶端側(cè)復(fù)制本的必要性。
[0023] 2.消除了廣播者將服務(wù)器側(cè)修改多播(multicast)到客戶端的必要性。
[0024] 3.弓丨入了對鍵的版本控制(versioning)。
[0025] 在此實施例中,服務(wù)器在大的預(yù)分配的并固定的(pinned)/登記的存儲器頁中存 儲所有高速緩存條目。對于每個被添加到高速緩存的條目,創(chuàng)建包含關(guān)于條目在高速緩存 中的位置的信息以及對于條目的鍵的版本的元數(shù)據(jù)。該元數(shù)據(jù)可以用于經(jīng)由RDMA網(wǎng)絡(luò)適 配器從服務(wù)器的外部訪問高速緩存條目。
[0026] 服務(wù)器在通過RDMA已知的存儲而分配的存儲器區(qū)域中連續(xù)地存儲條目的鍵和數(shù) 據(jù)值。鍵也包括唯一的版本標(biāo)識符,其等同于在它的元數(shù)據(jù)中存儲的標(biāo)識符。服務(wù)器存儲到 高速緩存條目的句柄或指針以及在元數(shù)據(jù)哈希映射中的通過條目的鍵而散列的(hashed) 鍵的版本標(biāo)識符。
[0027] 元數(shù)據(jù)哈希映射被存儲在服務(wù)器上,而客戶端可以僅存儲來自該元數(shù)據(jù)哈希映射 的條目的子集。通過使用實質(zhì)上減少沖突(collision)并因此避免在客戶端存儲器中存儲 鍵的高級散列技術(shù),元數(shù)據(jù)哈希映射被保持為相對小,對于甚至具有幾十千兆字節(jié)(GB)大 小的大的高速緩存具有幾十兆字節(jié)(MB)的大小。
[0028] 在啟動時,客戶端以空的元數(shù)據(jù)哈希映射開始,該空的元數(shù)據(jù)哈希映射充當(dāng)本地 元數(shù)據(jù)高速緩存。因此,客戶端對于高速緩存丟失(miss)、高速緩存命中和陳舊元數(shù)據(jù)不同 地做出反應(yīng)??蛻舳耸褂盟脑獢?shù)據(jù)哈希映射來本地查找遠(yuǎn)程高速緩存條目的句柄并使用 它來通過RDMA直接對條目進(jìn)行CRUD (創(chuàng)建、讀取、更新、刪除)操作。
[0029] 硬件和軟件環(huán)塏
[0030] 如本領(lǐng)域技術(shù)人員將認(rèn)識到的,本發(fā)明的方面可以體現(xiàn)為系統(tǒng)、方法或計算機程 序產(chǎn)品。因而,本發(fā)明的方面可以采取完全硬件實施例、完全軟件實施例(包括固件,常駐 軟件,微代碼等)或組合了軟件和硬件方面的實施例的形式,其所有通常可以在此稱為"電 路" "模塊"或"系統(tǒng)"。此外,本發(fā)明的方面可以采取體現(xiàn)在一個或多個具有在其上包括的 計算機可讀程序代碼的計算機可讀介質(zhì)的計算機程序產(chǎn)品的形式。
[0031] 可以利用一個或多個計算機可讀介質(zhì)的組合。計算機可讀介質(zhì)可以是計算機可讀 信號介質(zhì)或計算機可讀存儲介質(zhì)。計算機可讀存儲介質(zhì)可以是例如但不限于電、磁、光、電 磁、紅外線或半導(dǎo)體系統(tǒng)、設(shè)備或裝置、或以上的任意適當(dāng)?shù)慕M合。計算機可讀存儲介質(zhì)的 更具體的示例(非窮盡的列表)將包括如下:具有一條或多條導(dǎo)線的電連接、便攜計算機磁 盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦除可編程只讀存儲器(EPROM或閃 存)、光纖、便攜式致密盤只讀存儲器(⑶-ROM)、光存儲設(shè)備、磁存儲設(shè)備、或以上的任意適 當(dāng)?shù)慕M合。在本文檔的上下文中,計算機可讀存儲介質(zhì)可以是可以包含或存儲用于由指令 執(zhí)行系統(tǒng)、設(shè)備或者裝置使用或與該指令執(zhí)行系統(tǒng)、設(shè)備或者裝置結(jié)合使用的程序的任何 切實的介質(zhì)。
[0032] 計算機可讀的信號介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號, 其中承載了計算機可讀的程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括但不限 于電磁信號、光信號或上述的任意合適的組合。計算機可讀的信號介質(zhì)還可以是計算機可 讀存儲介質(zhì)以外的任何計算機可讀介質(zhì),該計算機可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于 由指令執(zhí)行系統(tǒng)、裝置或者設(shè)備使用或者與其結(jié)合使用的程序。
[0033] 體現(xiàn)在計算機可讀介質(zhì)上的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,所述介質(zhì)包括 但不限于:無線、有線、光纜、RF等,或上述的任意合適的組合。
[0034] 可以以一種或多種程序設(shè)計語言或其組合來編寫用于執(zhí)行本發(fā)明操作的計算機 程序代碼,所述程序設(shè)計語言包括面向?qū)ο蟮某绦蛟O(shè)計語言一諸如Java、Smalltalk、C++, 還包括常規(guī)的過程式程序設(shè)計語言一諸如"C"語言或類似的程序設(shè)計語言。程序代碼可以 完全地在用戶計算機上執(zhí)行、部分地在用戶計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部 分在用戶計算機上部分在遠(yuǎn)程計算機上執(zhí)行、或者完全在遠(yuǎn)程計算機或服務(wù)器上執(zhí)行。在 涉及遠(yuǎn)程計算機的情形中,遠(yuǎn)程計算機可以通過任意種類的網(wǎng)絡(luò)--包括局域網(wǎng)(LAN)或 廣域網(wǎng)(WAN)-連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網(wǎng)服務(wù)提 供商來通過因特網(wǎng)連接)。
[0035] 以下參照根據(jù)本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機程序產(chǎn)品的流程圖和/ 或框圖描述本發(fā)明的方面。應(yīng)當(dāng)理解,流程圖和/或框圖的每個方框以及流程圖和/或框 圖中各方框的組合,都可以由計算機程序指令實現(xiàn)。這些計算機程序指令可以提供給通用 計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機器,使得這些 計算機程序指令通過計算機的處理器或其它可編程數(shù)據(jù)處理裝置執(zhí)行,產(chǎn)生了實現(xiàn)流程圖 和/或框圖中的方框中規(guī)定的功能/動作的裝置。
[0036] 也可以把這些計算機程序指令存儲在能使得計算機、其它可編程數(shù)據(jù)處理裝置或 其它設(shè)備以特定方式工作的計算機可讀介質(zhì)中,這樣,存儲在計算機可讀介質(zhì)中的指令產(chǎn) 生出包括實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/動作的指令的制造品。
[0037] 也可以把計算機程序指令加載到計算機、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備 上,使得在計算機、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計 算機實現(xiàn)的過程,從而使得在計算機或其它可編程裝置上執(zhí)行的指令能夠提供實現(xiàn)流程圖 和/或框圖中的方框中規(guī)定的功能/動作的過程。
[0038] 附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個實施例的系統(tǒng)、方法和計算機程 序產(chǎn)品的可能實現(xiàn)的體系架構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個方框可以 代表模塊、程序段或代碼的一部分,該模塊、程序段或代碼的一部分包含一個或多個用于實 現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些替換的實現(xiàn)中,方框中所標(biāo)注的功能 也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,連續(xù)示出的兩個方框?qū)嶋H上可以基本并 行地執(zhí)行,或者這些塊有時也可以按相反的順序執(zhí)行,這依賴于所涉及的功能。也要注意的 是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合可以由執(zhí)行規(guī) 定的功能或動作的專用的基于硬件的系統(tǒng)或者由專用硬件與計算機指令的組合來實現(xiàn)。
[0039] 現(xiàn)在參考圖1,給出了其中可以實現(xiàn)本發(fā)明的網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100的圖形表示。 網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100包含網(wǎng)絡(luò)102,其是用于提供在網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100內(nèi)連接在一起 的各種裝置和計算機之間的通信鏈接的介質(zhì)。網(wǎng)絡(luò)102可以包括諸如導(dǎo)線、無線通信鏈接 或光纖電纜等的連接。
[0040] 在所描述的示例中,服務(wù)器104與存儲單元106 -起連接到網(wǎng)絡(luò)102。另外,客戶 端108、110和112連接到網(wǎng)絡(luò)102。這些客戶端108、110和112可以是例如個人計算機或 網(wǎng)絡(luò)計算機。在所描述的示例中,服務(wù)器104提供諸如引導(dǎo)文件、操作系統(tǒng)圖像和程序的數(shù) 據(jù)到客戶端108、110和112。客戶端108、110和112是對于服務(wù)器104的客戶端。網(wǎng)絡(luò)數(shù) 據(jù)處理系統(tǒng)100可以包括另外的服務(wù)器、客戶端和其它未示出的裝置。在所描述的示例中, 網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100是具有代表使用TCP/IP協(xié)議套件來彼此通信的網(wǎng)絡(luò)和網(wǎng)關(guān)的世界 范圍集合的網(wǎng)絡(luò)102的因特網(wǎng)。
[0041] 參考圖2,依照本發(fā)明的實施例描繪了可以實施為服務(wù)器、例如圖1的服務(wù)器104 的數(shù)據(jù)處理系統(tǒng)的框圖。數(shù)據(jù)處理系統(tǒng)200可以是包括多個連接到系統(tǒng)總線206的處理器 202和204的對稱多處理器(SMP)系統(tǒng)。替代地,可以采用單處理器系統(tǒng)。存儲器控制器/ 高速緩存208也連接到系統(tǒng)總線206,該存儲器控制器/高速緩存208提供到本地存儲器 209的接口。I/O總線橋210連接到系統(tǒng)總線206,并提供到I/O總線212的接口。存儲器 控制器/高速緩存208和I/O總線橋210可以如所繪而被集成。
[0042] 連接到I/O總線212的外圍組件互連(PCI)總線橋214提供到PCI局部總線216 的接口。多個調(diào)制解調(diào)器可以連接到PCI局部總線216。典型的PCI總線實現(xiàn)將支持四個 PCI擴展槽或內(nèi)插(add-in)連接器??梢酝ㄟ^經(jīng)內(nèi)插板連接到PCI局部總線216的調(diào)制解 調(diào)器218和網(wǎng)絡(luò)適配器220來提供到圖1中的網(wǎng)絡(luò)計算機108U10和112的通信鏈接。另 外的PCI總線橋222和224提供用于另外的PCI局部總線226和228的接口,從這些另外 的PCI局部總線可以支持另外的調(diào)制解調(diào)器和網(wǎng)絡(luò)適配器。以此方式,數(shù)據(jù)處理系統(tǒng)200 允許到多個網(wǎng)絡(luò)計算機的連接。存儲器映射的圖形適配器230和硬盤232也可以如所繪直 接或間接地連接到I/O總線212。
[0043] 本領(lǐng)域技術(shù)人員會理解,圖2中描述的硬件可以變化。例如,除了或替代所描述的 硬件,也可以使用諸如光盤驅(qū)動器等的其它外圍裝置。所描述的示例并不打算暗示對本發(fā) 明的架構(gòu)限制。
[0044] 在圖2描述的數(shù)據(jù)處理系統(tǒng)200可以是例如運行高級交互執(zhí)行(AIX)操作系統(tǒng)或 LINUX操作系統(tǒng)的IBM e-服務(wù)器p系列系統(tǒng),其是位于紐約阿芒克的國際商業(yè)機器公司的 產(chǎn)品。
[0045] 服務(wù)器104可以提供可以被用戶訪問以允許對于本發(fā)明的實施例的方面的用戶 交互的合適的網(wǎng)站或其它基于因特網(wǎng)的圖形用戶界面。在一個實施例中,網(wǎng)景(Netscape) 網(wǎng)頁服務(wù)器、IBM的WebSphere因特網(wǎng)工具套件、用于Linux、Unix和Windows的IBM DB2 (也 稱為"用于LUW的IBM DB2")平臺和Sybase的數(shù)據(jù)庫平臺與Sun Solaris操作系統(tǒng)平臺 結(jié)合而使用。另外,諸如JBDC驅(qū)動器,IBM連接池化(pooling)和IBM MQ系列連接方法的 組件可以用于提供到幾個源的數(shù)據(jù)訪問。如在此使用的術(shù)語網(wǎng)頁并不打算限制可以用于與 用戶交互的文檔或程序的類型。例如,除標(biāo)準(zhǔn)HTML文檔以外,典型的網(wǎng)站可以包括多種形 式、Java小應(yīng)用程序、Java腳本、動態(tài)服務(wù)器頁面(ASP)、Java服務(wù)器頁面(JSP)、公共網(wǎng)關(guān) 接口腳本(CGI)、可擴展標(biāo)記語言(XML)、動態(tài)HTML,級聯(lián)樣式表(CSS)、幫助程序、插件等。
[0046] 現(xiàn)在參考圖3,描繪了圖解其中可以實現(xiàn)本發(fā)明的實施例的方面的數(shù)據(jù)處理系統(tǒng) 的框圖。數(shù)據(jù)處理系統(tǒng)300是客戶端計算機的示例。數(shù)據(jù)處理系統(tǒng)300使用外圍組件互 連(PCI)局部總線架構(gòu)。盡管所描述的示例使用PCI總線,但是可以使用諸如加速圖形端 口(AGP)和工業(yè)標(biāo)準(zhǔn)架構(gòu)(ISA)的其它總線架構(gòu)。處理器302和主存儲器304通過PCI橋 308連接到PCI局部總線306。PCI橋308也可以包括集成存儲器控制器和用于處理器302 的高速緩存存儲器。到PCI局部總線306的另外的連接可以通過直接組件互連或通過內(nèi)插 板來完成。在所描述的示例中,局域網(wǎng)(LAN)適配器310、小型計算機系統(tǒng)界面(SCSI)主機 總線適配器312和擴展總線接口 314通過直接組件連接而連接到PCI局部總線306。與此 相對,音頻適配器316、圖形適配器318和音頻/視頻適配器319通過插入到擴展槽中的內(nèi) 插板而連接到PCI局部總線306。
[0047] 擴展總線接口 314提供用于鍵盤和鼠標(biāo)適配器320、調(diào)制解調(diào)器322和另外的存 儲器324的連接。SCSI主機總線適配器312提供用于硬盤驅(qū)動器326、磁帶驅(qū)動器328和 ⑶-ROM驅(qū)動器330的連接。典型的局部總線實施將支持三個或四個PCI擴展槽或內(nèi)插連接 器。
[0048] 操作系統(tǒng)運行于處理器302上,并用于協(xié)調(diào)和提供在圖3的數(shù)據(jù)處理系統(tǒng)300內(nèi) 的各種組件的控制。該操作系統(tǒng)可以是商業(yè)上可用的操作系統(tǒng),比如Windows XP?,其 可從微軟公司獲得。諸如Java的面向?qū)ο蟮木幊滔到y(tǒng)可以與操作系統(tǒng)結(jié)合運行并通過從 Java程序或者在數(shù)據(jù)處理系統(tǒng)300上執(zhí)行的程序?qū)Σ僮飨到y(tǒng)的調(diào)用。"Java"是太陽微系 統(tǒng)公司的注冊商標(biāo)。用于操作系統(tǒng)的指令、面向?qū)ο蟮牟僮飨到y(tǒng)和程序位于諸如硬盤驅(qū)動 器326的存儲設(shè)備中,并可以被加載到主存儲器304中用于由處理器302執(zhí)行。
[0049] 本領(lǐng)域技術(shù)人員會理解,圖3中的硬件可以取決于實現(xiàn)而變化。除了或替代圖3 中所描述的硬件,可以使用其它內(nèi)部硬件或外圍設(shè)備、比如閃存R〇M(或等效的非易失存儲 器)或光學(xué)驅(qū)動器等。同樣,本發(fā)明的處理可以應(yīng)用到多處理器數(shù)據(jù)處理系統(tǒng)。
[0050] 作為另一示例,數(shù)據(jù)處理系統(tǒng)300可以是獨立的系統(tǒng),被配置為不依靠某種類型 的網(wǎng)絡(luò)通信接口而可啟動,無論數(shù)據(jù)處理系統(tǒng)300是否包括某種類型的網(wǎng)絡(luò)通信接口。作 為進(jìn)一步的示例,數(shù)據(jù)處理系統(tǒng)300可以是個人數(shù)字助理(PDA)設(shè)備,其被配置有ROM和/ 或快閃ROM以便提供非易失存儲器用于存儲操作系統(tǒng)文件和/或用戶生成的數(shù)據(jù)。
[0051] 圖3中所繪的示例和以上描述的示例不打算暗示架構(gòu)性限制。例如,數(shù)據(jù)處理系 統(tǒng)300可以是筆記本計算機或手持計算機以及PDA。另外,數(shù)據(jù)處理系統(tǒng)300也可以是信 息站(kiosk)或網(wǎng)頁裝置。另外,本發(fā)明可以存在于任意的由計算機系統(tǒng)使用的數(shù)據(jù)存儲 介質(zhì)(即,軟盤、致密盤、硬盤、磁帶、R〇M、RAM等)上。(術(shù)語"計算機"、"系統(tǒng)"、"計算機系 統(tǒng)"和"數(shù)據(jù)處理系統(tǒng)"在此可互換使用。)
[0052] RDMA優(yōu)化的高諫緩存
[0053] 圖4A是圖解使用RDMA用于高速緩存的系統(tǒng)環(huán)境的示意圖,該系統(tǒng)環(huán)境包括通過 RDMA NIC404和406連接到客戶端402的服務(wù)器400,其中RDMA NIC404和406使用標(biāo)準(zhǔn)聯(lián) 網(wǎng)協(xié)議而通信。RDMA的核心概念是遠(yuǎn)程指針408a、408b的使用。服務(wù)器400輸出服務(wù)器側(cè) 遠(yuǎn)程指針408a到客戶端402,其查閱(refer to)在存儲在服務(wù)器400的存儲器414中的 固定的/登記的頁412中的數(shù)據(jù)記錄410。類似地,客戶端402可以具有客戶端側(cè)遠(yuǎn)程指 針408b,其查閱在存儲在客戶端402的存儲器416中的固定的/登記的頁412中的數(shù)據(jù)記 錄410,該指針可以輸出或可以不輸出到服務(wù)器400。在這兩個實例中,指針408a、408b包 括句柄,該句柄包括頁412值和記錄410的地址值。存儲在服務(wù)器400的存儲器414中的 頁412中的記錄410提供高速緩存,而存儲在客戶端402的存儲器416中的頁412中的記 錄410提供用于由客戶端402執(zhí)行的一個或多個應(yīng)用的數(shù)據(jù)(未示出)。單側(cè)的RDMA操作 允許客戶端402使用服務(wù)器側(cè)遠(yuǎn)程指針408a直接訪問(讀取和蓋寫)存儲在服務(wù)器400 的存儲器414中的頁412中的記錄410。
[0054] 具體地,客戶端402的RDMA NIC406遠(yuǎn)程控制服務(wù)器400的RDMANIC404。從客戶 端402的存儲器416取回遠(yuǎn)程指針408a。RDMA NIC406然后將該遠(yuǎn)程指針408a傳輸?shù)椒?wù) 器400的RDMA NIC404。RDMA NIC404進(jìn)行DMA(直接存儲器訪問)操作,將記錄410傳送到 服務(wù)器400的存儲器414中和從服務(wù)器400的存儲器414中傳送出去,如遠(yuǎn)程指針408a所 指定的。類似地,客戶端402的RDMA NIC406進(jìn)行DMA操作,將記錄410傳送到客戶端402 的存儲器416中和從客戶端402的存儲器416中傳送出去,這可以指定或否則與遠(yuǎn)程指針 408b相關(guān)聯(lián)。
[0055] 這些RDMA操作不需要任何軟件在服務(wù)器400或客戶端402中的執(zhí)行,由此沒有 CPU涉及并且沒有在服務(wù)器400或客戶端402上的CPU利用。從而,這得到客戶端402進(jìn)入 和離開服務(wù)器400的存儲器414的非常快的、近似線速(wire speed)的遠(yuǎn)程訪問(以及類 似地,服務(wù)器400進(jìn)入和離開客戶端402的存儲器416的遠(yuǎn)程訪問)。例如,由客戶端402 對存儲在服務(wù)器400的存儲器414中的記錄410的讀取或蓋寫可以在單個數(shù)位的微秒內(nèi)發(fā) 生。
[0056] 在本發(fā)明的一個實施例中,與RDMA操作一起使用元數(shù)據(jù)哈希映射418,如圖4B所 示。服務(wù)器400創(chuàng)建元數(shù)據(jù)哈希映射418,其中在元數(shù)據(jù)哈希映射418中的每個條目或槽與 記錄410的鍵420相關(guān)聯(lián),其中鍵420被散列以選擇哈希映射418中的槽。在元數(shù)據(jù)哈希 映射418中的相關(guān)聯(lián)的條目存儲包括用于記錄410的元數(shù)據(jù)的對象-值422,其中該元數(shù) 據(jù)包括用于記錄410的服務(wù)器側(cè)遠(yuǎn)程指針408a以及鍵420的版本標(biāo)識符422c,該服務(wù)器 側(cè)遠(yuǎn)程指針408a包括存儲了記錄410的頁412的地址422a和記錄410在頁412內(nèi)的地址 422b。該元數(shù)據(jù)還可以包括數(shù)據(jù)410的大小(未示出)。
[0057] 元數(shù)據(jù)哈希映射418的大小通常僅是為記錄410和頁412所分配的存儲器414的 量的一小部分。例如,與為記錄410所分配的可以具有幾十千兆字節(jié)的大小的存儲器414 中的頁412相比較,元數(shù)據(jù)哈希映射418可以具有幾十兆字節(jié)的大小。通過使用實質(zhì)上減 少了沖突的高級散列技術(shù),元數(shù)據(jù)哈希映射418可以被保持為相對?。ɡ缭獢?shù)據(jù)哈希映 射418不需要包含所有條目的鍵420,而僅需要包含具有實際沖突的那些槽的鍵)。
[0058] 如圖4C所示,服務(wù)器400在某個指定的時間將來自元數(shù)據(jù)哈希映射418的一個或 多個條目傳輸?shù)揭粋€或多個客戶端,如箭頭(1)所表示的。一般而言,這將在響應(yīng)于由服務(wù) 器400在客戶端402的指示(direction)下進(jìn)行的CRUD(創(chuàng)建、讀取、更新、刪除)操作而 更新服務(wù)器400上的元數(shù)據(jù)哈希映射418時發(fā)生。
[0059] 典型地,客戶端402將僅在它們的元數(shù)據(jù)哈希映射418的本地復(fù)制本中維持在服 務(wù)器400的元數(shù)據(jù)哈希映射418中發(fā)現(xiàn)的條目的子集??蛻舳?02可以使用它們的元數(shù) 據(jù)哈希映射418的本地復(fù)制本來使用鍵420本地查找與記錄410相關(guān)聯(lián)的元數(shù)據(jù),以便對 存儲在服務(wù)器400的存儲器414中的記錄410進(jìn)行使用RDMA的CRUD (創(chuàng)建、讀取、更新、刪 除)操作。
[0060] 最后,服務(wù)器400在某個其他指定的時間將來自其元數(shù)據(jù)哈希映射418的一個或 多個條目傳輸?shù)揭粋€或多個客戶端402,如箭頭(3)所表示的。例如,這也可以發(fā)生在例如 由客戶端402請求時、在客戶端402啟動時、在由服務(wù)器400請求時、在服務(wù)器400啟動時、 在元數(shù)據(jù)哈希映射418為了其它原因而改變時或在其它間隔時等等。
[0061] CRUD 操作
[0062] 使用本發(fā)明的實施例的RDM優(yōu)化的高速緩存進(jìn)行的CRUD操作的細(xì)節(jié)在以下詳細(xì) 描述。如之前所述,對記錄410的讀取和蓋寫很少涉及或不涉及任意軟件在服務(wù)器400中 的執(zhí)行,由此有很少的或沒有CPU涉及以及很少的或沒有在服務(wù)器400上的CPU利用。另 一方面,對記錄410的創(chuàng)建或刪除可能需要軟件在服務(wù)器400中的更多的執(zhí)行。
[0063] 此外,記錄410的創(chuàng)建、刪除或更新還可能需要將維持在服務(wù)器400上的元數(shù)據(jù)哈 希映射418中條目的復(fù)制本傳輸?shù)娇蛻舳?02,使得在記錄410被創(chuàng)建、刪除或更新時客戶 端402上的元數(shù)據(jù)哈希映射418的復(fù)制本可以被更新。
[0064] 創(chuàng)律
[0065] 在創(chuàng)建(或插入)操作中,進(jìn)行以下步驟:
[0066] ?客戶端402進(jìn)行RDMA-發(fā)送操作并傳遞來自新記錄410的鍵420、用于鍵420的 哈希碼和用于鍵420的值。
[0067] ?服務(wù)器400在它的存儲器414中的頁412中分配和登記新記錄410。與新記錄 410相關(guān)聯(lián)的是從客戶端402接收的鍵420和用于鍵420的值、以及包括新記錄410的元數(shù) 據(jù)的對象-值422,其中該元數(shù)據(jù)包括用于新記錄410的服務(wù)器側(cè)遠(yuǎn)程指針408a (即到服務(wù) 器400的本地指針)以及鍵420的版本標(biāo)識符422c,該服務(wù)器側(cè)遠(yuǎn)程指針408a包括存儲記 錄410的頁412的地址422a和記錄410在頁412之內(nèi)的地址422b。
[0068] ?服務(wù)器400使用鍵420的哈希碼來標(biāo)識元數(shù)據(jù)哈希映射418中的槽并將包括新 記錄410的元數(shù)據(jù)的對象-值422添加到元數(shù)據(jù)哈希映射418中的槽,其中該元數(shù)據(jù)包括 新記錄410的服務(wù)器側(cè)遠(yuǎn)程指針408a (即到服務(wù)器400的本地指針)以及鍵420的版本標(biāo) 識符422c,該服務(wù)器側(cè)遠(yuǎn)程指針408a包括存儲記錄410的頁412的地址422a和記錄410 在頁面412內(nèi)的地址422b。如果成功,則服務(wù)器400將確認(rèn)(acknowledgement,ACK)傳輸 到客戶端402,其包括對于新記錄410的來自元數(shù)據(jù)哈希映射418的對象-值422。當(dāng)客戶 端402接收到ACK時,通過在元數(shù)據(jù)哈希映射418的槽中添加該對象-值422而更新它的 元數(shù)據(jù)哈希映射418。
[0069] ?否則,如果未成功,服務(wù)器400將非確認(rèn)(non-acknowledgement NACK)傳輸?shù)娇?戶端402。當(dāng)客戶端402接收到NACK時,其返回錯誤指示到一個或多個應(yīng)用。
[0070] 創(chuàng)建(或插入)操作的結(jié)果包括以下:
[0071] ?服務(wù)器400上的高速緩存包括新記錄410。
[0072] ?服務(wù)器400上的元數(shù)據(jù)哈希映射418被更新為反映服務(wù)器400上的高速緩存的 當(dāng)前狀態(tài)。
[0073] ?在客戶端402上的元數(shù)據(jù)哈希映射418中的一個或多個條目被更新為反映服務(wù) 器400上的高速緩存的當(dāng)前狀態(tài)。
[0074] 創(chuàng)建(或插入)操作的等待時間是:
[0075] ?對于在服務(wù)器400上的創(chuàng)建操作通常為10-30 μ s。
[0076] ?直至客戶端402已經(jīng)接收到對象-值422的另外的10-15 μ s。
[0077] MM
[0078] 在讀取操作中,進(jìn)行以下步驟:
[0079] ?客戶端402散列期望的記錄410的鍵420以在它的元數(shù)據(jù)哈希映射418的復(fù)制 本中標(biāo)識存儲了包括記錄410的元數(shù)據(jù)的對象-值422的一個或多個條目,其中該元數(shù)據(jù) 包括記錄410的服務(wù)器側(cè)遠(yuǎn)程指針408a以及鍵420的版本標(biāo)識符422c,該服務(wù)器側(cè)遠(yuǎn)程指 針408a包括存儲記錄410的頁412的地址422a和記錄410在頁412內(nèi)的地址422b。
[0080] ?具體地,鍵420的散列返回來自元數(shù)據(jù)哈希映射418的一個或多個可能匹配的條 目的集合。低沖突散列功能確保了具有超過一個來自元數(shù)據(jù)哈希映射418的可能匹配的條 目的集合是稀少的。
[0081] ?對于每一個可能匹配的條目,進(jìn)行以下步驟:
[0082] 客戶端402在它的存儲器416中的頁412中分配和登記用于記錄410的本地數(shù) 據(jù)結(jié)構(gòu)。(這可以在啟動時進(jìn)行一次,并且對隨后的操作再次使用。)與本地數(shù)據(jù)結(jié)構(gòu)相關(guān) 聯(lián)的并引用記錄410和頁412兩者的是客戶端側(cè)遠(yuǎn)程指針408b。
[0083] 客戶端402使用來自哈希映射418的服務(wù)器側(cè)遠(yuǎn)程指針408a作為源并使用客 戶端側(cè)遠(yuǎn)程指針408b作為目標(biāo)進(jìn)行在服務(wù)器400上的單側(cè)RDMA-讀取操作,并且服務(wù)器 400上的記錄410被復(fù)制到客戶端402上的記錄410中。
[0084] 客戶端402確定從服務(wù)器400返回的記錄410中的鍵420是否匹配于期望的記 錄410的鍵420。
[0085] 如果鍵420匹配,則客戶端402確定從服務(wù)器400返回的記錄410中的版本標(biāo) 識符422c是否匹配于在客戶端402上存儲的元數(shù)據(jù)哈希映射418的對象-值422中發(fā)現(xiàn) 的版本標(biāo)識符422c。
[0086] 如果版本標(biāo)識符422c匹配,則鍵420有效,并且記錄410有效??蛻舳?02可 以照原樣使用在其記錄410中的數(shù)據(jù)或?qū)⑵鋸?fù)制到別處。
[0087] 如果版本標(biāo)識符422c不匹配,則元數(shù)據(jù)哈希映射418中的條目是陳舊的,并且 該條目被從元數(shù)據(jù)哈希映射418移除。
[0088] 在完成之后,客戶端402可以保持或清空任意被分配的存儲器。
[0089] ?如果鍵420不匹配,或如果鍵420匹配但是版本標(biāo)識符422c不匹配,則客戶端 402發(fā)送鍵420到服務(wù)器400并且主動請求取回相關(guān)聯(lián)的數(shù)據(jù)記錄410。作為響應(yīng),服務(wù)器 400可以將確認(rèn)(ACK)傳輸?shù)娇蛻舳?02并返回包括鍵420的相關(guān)聯(lián)的數(shù)據(jù)記錄410和對 象-值422,且客戶端402返回數(shù)據(jù)記錄410到一個或多個應(yīng)用并利用對象-值422更新 其元數(shù)據(jù)哈希映射418。否則,如果不成功,則服務(wù)器400將非確認(rèn)(NACK)傳輸?shù)娇蛻舳?402,并且客戶端402返回錯誤指示到一個或多個應(yīng)用。讀取操作的結(jié)果包括如下:
[0090] ?可以用所請求的鍵420的新的或有效的對象-值422更新在客戶端402上的元 數(shù)據(jù)哈希映射418。
[0091] ?數(shù)據(jù)記錄410或錯誤指示可以被返回到一個或多個應(yīng)用。
[0092] 讀取操作的等待時間是:
[0093] ?當(dāng)鍵和版本標(biāo)識符匹配時,通常是3-10 μ s ;否則,是10-30 μ s以請求來自服務(wù) 器400的數(shù)據(jù)記錄410。
[0094] 審新
[0095] 在更新操作中,進(jìn)行以下步驟:
[0096] ?客戶端402散列期望的記錄410的鍵420以在它的元數(shù)據(jù)哈希映射418的復(fù)制 本中標(biāo)識存儲了包含用于記錄410的元數(shù)據(jù)的對象-值422的一個或多個條目,其中該元 數(shù)據(jù)包括用于記錄410的服務(wù)器側(cè)遠(yuǎn)程指針408a以及鍵420的版本標(biāo)識符422c,該服務(wù)器 側(cè)遠(yuǎn)程指針408a包括存儲了記錄410的頁412的地址422a和記錄410在頁412之內(nèi)的地 址 422b。
[0097] ?具體地,鍵420的散列返回來自元數(shù)據(jù)哈希映射418的一個或多個可能匹配的條 目的集合。低沖突散列功能確保了具有超過一個來自元數(shù)據(jù)哈希映射418的可能匹配的條 目的集合是稀少的。
[0098] ?對于每一個可能匹配的條目,進(jìn)行以下步驟:
[0099] 客戶端402在它的存儲器416中的頁面412中分配和登記用于記錄410的本地 數(shù)據(jù)結(jié)構(gòu)。(這可以在啟動時進(jìn)行一次,并且對隨后的操作再次使用。)與本地數(shù)據(jù)結(jié)構(gòu)相 關(guān)聯(lián)的并引用記錄410和頁412兩者的是客戶端側(cè)遠(yuǎn)程指針408b。
[0100] 客戶端402使用來自哈希映射418的服務(wù)器側(cè)遠(yuǎn)程指針408a作為源并使用客 戶端側(cè)遠(yuǎn)程指針408b作為目標(biāo)進(jìn)行在服務(wù)器400上的單側(cè)RDMA-讀取操作,并且服務(wù)器 400上的記錄410被復(fù)制到客戶端402上的記錄410中。
[0101] 客戶端402確定從服務(wù)器400返回的記錄410中的鍵420是否匹配于期望的記 錄410的鍵420。
[0102] 如果鍵420匹配,則客戶端402確定從服務(wù)器400返回的記錄410中的版本標(biāo) 識符422c是否匹配于在客戶端402上存儲的元數(shù)據(jù)哈希映射418的對象-值422中發(fā)現(xiàn) 的版本標(biāo)識符422c。
[0103] 如果版本標(biāo)識符422c匹配,則鍵420有效,并且記錄410有效??蛻舳?02使 用客戶端側(cè)遠(yuǎn)程指針408b作為源并使用來自哈希映射418的服務(wù)器側(cè)遠(yuǎn)程指針408a作為 目標(biāo)在服務(wù)器400上進(jìn)行單側(cè)的RDMA-寫入操作。
[0104] 如果版本標(biāo)識符422c不匹配,則元數(shù)據(jù)哈希映射418中的條目是陳舊的,并且 該條目被從元數(shù)據(jù)哈希映射418移除。
[0105] 在完成之后,客戶端402可以保持或清空任意被分配的存儲器。
[0106] ?如果(a)鍵420不匹配,或(b)鍵420匹配但是版本標(biāo)識符422c不匹配,或(c) 鍵420匹配且版本標(biāo)識符422c匹配但是之前的數(shù)據(jù)記錄410的大小小于新數(shù)據(jù)記錄410 的大小,則客戶端402發(fā)送該數(shù)據(jù)記錄410到服務(wù)器400并且主動請求更新存儲在服務(wù)器 400上的相關(guān)聯(lián)的數(shù)據(jù)記錄410。服務(wù)器400產(chǎn)生新的版本標(biāo)識符并更新數(shù)據(jù)記錄410以 及元數(shù)據(jù)哈希映射418。
[0107] ?在接收到更新請求之后,服務(wù)器400在它的元數(shù)據(jù)哈希映射418中定位用于由客 戶端402在消息中傳遞的鍵420的槽。
[0108] ?如果該槽有效,則服務(wù)器400在它的存儲器414中的頁412中分配和登記新記錄 410。與新記錄410相關(guān)聯(lián)的是從客戶端402接收的鍵420和用于鍵420的值、以及包括新 記錄410的元數(shù)據(jù)的對象-值422,其中該元數(shù)據(jù)包括用于新記錄410的服務(wù)器側(cè)遠(yuǎn)程指針 408a(即到服務(wù)器400的本地指針)以及鍵420的版本標(biāo)識符422c,該服務(wù)器側(cè)遠(yuǎn)程指針 408a包括存儲記錄410的頁412的地址422a和記錄410在頁面412內(nèi)的地址422b。
[0109] ?-旦新記錄410被創(chuàng)建,服務(wù)器400用來自新記錄410的信息來替換用于鍵420 的元數(shù)據(jù)哈希映射418中的相關(guān)聯(lián)的槽中的舊記錄410,并且通過將其版本標(biāo)識符設(shè)置為 無效和返回其存儲器區(qū)域到分配器的空閑池來移除舊記錄410。
[0110] ?如果成功,則服務(wù)器400將確認(rèn)(ACK)傳輸?shù)娇蛻舳?02,并且返回鍵420和更新 的對象-值422,其中客戶端402返回成功指示到一個或多個應(yīng)用,并用被更新的對象-值 422來更新其元數(shù)據(jù)哈希映射418。
[0111] ?否則,如果不成功,則服務(wù)器400將非確認(rèn)(NACK)傳輸?shù)娇蛻舳?02,并且客戶 端402返回錯誤指示到一個或多個應(yīng)用。
[0112] 更新操作的結(jié)果包括如下:
[0113] ?在客戶端402上的記錄410被復(fù)制到服務(wù)器400上的記錄410中,由此更新服務(wù) 器400上的高速緩存。
[0114] ?可以用所請求的鍵420的新的或有效的對象-值422來更新服務(wù)器400和客戶 端402兩者上的元數(shù)據(jù)哈希映射418。
[0115] 更新操作的等待時間是:
[0116] ?當(dāng)匹配發(fā)生時,通常是2-5 μ s ;否則是10-30 μ s。
[0117] 臟
[0118] 在刪除操作中,進(jìn)行以下步驟:
[0119] ?客戶端402散列鍵420并進(jìn)行RDMA-發(fā)送操作,將鍵420和用于鍵420的哈希碼 傳遞到服務(wù)器400。
[0120] ?服務(wù)器400使用鍵420和用于鍵420的哈希碼在它的元數(shù)據(jù)哈希映射418的復(fù) 制本中標(biāo)識存儲了對象-值422的條目。
[0121] ?如果來自服務(wù)器400上的元數(shù)據(jù)哈希映射418的鍵420匹配于從客戶端402接 收的鍵420,則從服務(wù)器400上的元數(shù)據(jù)哈希映射418移除該條目,并從服務(wù)器400上的高 速緩存移除該數(shù)據(jù)記錄410 (即,該版本標(biāo)識符被設(shè)置為無效,并且其存儲器被返回到分配 器的空閑池)。
[0122] ?如果成功,服務(wù)器400將確認(rèn)(ACK)傳輸?shù)娇蛻舳?02,其包括對象-值422,并 且客戶端402返回成功指示到一個或多個應(yīng)用并從其元數(shù)據(jù)哈希映射418移除該條目。
[0123] ?否則,如果不成功,則服務(wù)器400將非確認(rèn)(NACK)傳輸?shù)娇蛻舳?02,并且客戶 端402返回錯誤指示到一個或多個應(yīng)用。
[0124] 刪除操作的結(jié)果包括如下:
[0125] ?在服務(wù)器400上的記錄410可以被刪除,服務(wù)器400上的元數(shù)據(jù)哈希映射418可 以被更新。
[0126] ?客戶端402上的記錄410可以被刪除,服務(wù)器400上的元數(shù)據(jù)哈希映射418可以 被更新。
[0127] 刪除操作的等待時間是:
[0128] ?通常是 10-30 μ s。
[0129] 與刪除操作有關(guān)的其它考慮包括:
[0130] ?服務(wù)器400可以對其刪除的記錄410進(jìn)行"垃圾收集",然后更新哈希映射418來 反映服務(wù)器400上的高速緩存的當(dāng)前狀態(tài)。
[0131] ?在一個或多個客戶端402上的元數(shù)據(jù)哈希映射418可能包含陳舊的對象-值 422。然而,這將不會打破一致性,因為客戶端402應(yīng)該為了正確性而檢查對象-值422中 的版本標(biāo)識符422。
[0132] 元數(shù)據(jù)哈希映射審新
[0133] 如上所述,服務(wù)器400可以在某個指定的時間將來自其元數(shù)據(jù)哈希映射418的一 個或多個條目傳輸?shù)揭粋€或多個客戶端402,例如當(dāng)由服務(wù)器400在客戶端402的指示下進(jìn) 行的CRUD操作導(dǎo)致元數(shù)據(jù)哈希映射418的一個或多個條目被更新時,并且僅那些被更新的 條目被服務(wù)器400傳輸并被客戶端402接收。此外,服務(wù)器400可以在某個指定的時間將 來自其元數(shù)據(jù)哈希映射418的一個或多個條目傳輸?shù)揭粋€或多個客戶端402,例如當(dāng)客戶 端402請求時、在客戶端402啟動時、當(dāng)服務(wù)器400請求、在服務(wù)器400啟動時、當(dāng)元數(shù)據(jù)哈 希映射418為其它原因而改變時、或在其它間隔時等等。另外,對哈希映射418的更新可以 大量地發(fā)生(例如整個哈希映射418)或遞增地發(fā)生(例如僅哈希映射418中的改變的條 目)或使用其一些組合而發(fā)生。
[0134] 在一個實施例中,當(dāng)在客戶端402的本地元數(shù)據(jù)哈希映射418中還未發(fā)現(xiàn)鍵420 時,客戶端402可以以空的元數(shù)據(jù)哈希映射418開始并且將"緩存丟失"傳達(dá)(relay)到 服務(wù)器400,導(dǎo)致包括用于記錄410的元數(shù)據(jù)的對象-值422被服務(wù)器400返回到客戶端 402,其中該元數(shù)據(jù)包括用于記錄410的服務(wù)器側(cè)遠(yuǎn)程指針408a以及鍵420的版本標(biāo)識符 422c,該服務(wù)器側(cè)遠(yuǎn)程指針408a包括存儲了記錄410的頁412的地址422a和記錄410在 頁面412內(nèi)的地址422b。此實施例具有以下含義:
[0135] ?本地元數(shù)據(jù)哈希映射418的大小可以被調(diào)整為期望數(shù)量的條目。
[0136] ?可以在用戶機402上實現(xiàn)自動化條目收回(eviction)來釋放本地元數(shù)據(jù)哈希映 射418中的條目,盡管諸如活動時間(TTL)、最近最少使用(LRU)、最不常用(LFU)的所使用 的策略是依賴于應(yīng)用的并且可以從本發(fā)明的一個實施例到另一個實施例變化。
[0137] 在其它實施例中,可以在將元數(shù)據(jù)哈希映射418中的條目從服務(wù)器400傳輸?shù)娇?戶端402以及隨后從客戶端402更新服務(wù)器400上的元數(shù)據(jù)哈希映射418時使用任意數(shù)量 的不同技術(shù)。
[0138] 邏輯流稈
[0139] 圖5是圖解根據(jù)本發(fā)明的一個實施例的用于訪問存儲在服務(wù)器400上的高速緩存 中的數(shù)據(jù)記錄410的一般步驟或功能的流程圖。
[0140] 塊500表示在服務(wù)器400和/或一個或多個客戶端402上存儲元數(shù)據(jù)哈希映射 418的步驟或功能,其中該元數(shù)據(jù)哈希映射418包括與用于存儲在服務(wù)器400上的高速緩 存中的數(shù)據(jù)記錄410的鍵420相關(guān)聯(lián)的一個或多個條目,并且每一個條目存儲了包括用于 相應(yīng)的數(shù)據(jù)記錄410的元數(shù)據(jù)的對象-值422,其中該元數(shù)據(jù)包括引用相應(yīng)的數(shù)據(jù)記錄410 的服務(wù)器側(cè)遠(yuǎn)程指針408a以及鍵420的版本標(biāo)識符422c,該服務(wù)器側(cè)遠(yuǎn)程指針408a包括 存儲了記錄410的頁面412的地址422a和記錄410在頁面412內(nèi)的地址422b。通常,客戶 端402上的元數(shù)據(jù)哈希映射418僅存儲在服務(wù)器400上的元數(shù)據(jù)哈希映射418中存儲的條 目的子集,并且僅當(dāng)在客戶端402的指示下由服務(wù)器400進(jìn)行的創(chuàng)建、讀取、更新或刪除操 作導(dǎo)致元數(shù)據(jù)哈希映射418的一個或多個條目被更新時,更新在客戶端402上的元數(shù)據(jù)哈 希映射418,并且僅那些被更新的條目被服務(wù)器400傳輸并被客戶端402接收。
[0141] 塊502表示客戶端402或服務(wù)器400使用所提供的鍵420通過以下來訪問存儲在 服務(wù)器400上的高速緩存中的所選擇的數(shù)據(jù)記錄410的步驟或功能:(1)使用所提供的鍵 420來標(biāo)識在元數(shù)據(jù)哈希映射418中的一個或多個可能匹配的條目;(2)使用來自元數(shù)據(jù)哈 希映射418中的可能匹配的條目的服務(wù)器側(cè)遠(yuǎn)程指針408a來訪問存儲在服務(wù)器400上的 高速緩存中的一個或多個數(shù)據(jù)記錄410 ;并使用所提供的鍵420和來自元數(shù)據(jù)哈希映射418 中的可能匹配的條目的版本標(biāo)識符422c來確定所訪問的數(shù)據(jù)記錄410是否匹配于所選擇 的數(shù)據(jù)記錄410。具體地,可以通過使用服務(wù)器側(cè)遠(yuǎn)程指針來進(jìn)行在客戶端402上的一個 或多個RDMA操作以經(jīng)由RDMA NIC直接訪問存儲在服務(wù)器400上的高速緩存中的數(shù)據(jù)記錄 410來訪問數(shù)據(jù)記錄410。
[0142] 塊504表示除了在塊500中進(jìn)行的更新之外、將來自元數(shù)據(jù)哈希映射418的一個 或多個條目從服務(wù)器400傳輸?shù)揭恍┗蛉康目蛻舳?02以便更新元數(shù)據(jù)哈希映射418的 可選步驟或功能(通常由與塊500中所述的事件不同的事件而觸發(fā))。
[0143] 結(jié)論
[0144] 這結(jié)束對本發(fā)明的詳細(xì)描述。以下描述了用于完成本發(fā)明的一些替代實施例。
[0145] 本領(lǐng)域的技術(shù)人員將認(rèn)識到,可以不脫離本發(fā)明的范圍而對此配置進(jìn)行許多修 改。具體地,本領(lǐng)域的技術(shù)人員將認(rèn)識到,可以使用以上組件的任意組合或任意數(shù)量的不同 組件、包括計算機程序、外圍設(shè)備和其它裝置來實現(xiàn)本發(fā)明,只要通過其進(jìn)行類似的功能。
[0146] 例如,任意類型的計算機、比如主機、小型計算機或個人計算機可以與本發(fā)明的實 施例一起使用或用于本發(fā)明的實施例。另外,不同于高速緩存應(yīng)用的許多類型的應(yīng)用可以 從本發(fā)明獲益。具體地,進(jìn)行遠(yuǎn)程訪問的任意應(yīng)用可以從本發(fā)明獲益。
[0147] 為了例示和描述的目的給出了對本發(fā)明的優(yōu)選實施例的以上描述。不意圖窮盡或 限制本發(fā)明到所公開的精確形式。依照上述教導(dǎo),許多修改和變化是可能的。意圖本發(fā)明 的范圍不被此詳細(xì)描述所限制,而是由附于此的權(quán)利要求限定。
【權(quán)利要求】
1. 一種用于訪問存儲在服務(wù)器上的高速緩存中的數(shù)據(jù)記錄的設(shè)備,包括: (a) 服務(wù)器或客戶端,存儲元數(shù)據(jù)哈希映射,其中所述元數(shù)據(jù)哈希映射包括與用于存儲 在服務(wù)器上的高速緩存中的數(shù)據(jù)記錄的鍵相關(guān)聯(lián)的一個或多個條目,每個條目存儲對應(yīng)的 數(shù)據(jù)記錄的元數(shù)據(jù),并且所述元數(shù)據(jù)包括服務(wù)器側(cè)遠(yuǎn)程指針以及所述鍵的版本標(biāo)識符,所 述服務(wù)器側(cè)遠(yuǎn)程指針引用存儲在所述服務(wù)器上的高速緩存中的對應(yīng)的數(shù)據(jù)記錄;以及 (b) 所述服務(wù)器或客戶端使用所提供的鍵通過以下來訪問存儲在所述服務(wù)器上的高速 緩存中的所選擇的數(shù)據(jù)記錄: (1) 使用所提供的鍵標(biāo)識在所述元數(shù)據(jù)哈希映射中的一個或多個可能匹配的條目; (2) 使用來自所述元數(shù)據(jù)哈希映射中的可能匹配的條目的服務(wù)器側(cè)遠(yuǎn)程指針來訪問存 儲在所述服務(wù)器上的高速緩存中的一個或多個數(shù)據(jù)記錄;以及 (3) 使用所提供的鍵和來自所述元數(shù)據(jù)哈希映射中的可能匹配的條目的版本標(biāo)識符來 確定所訪問的數(shù)據(jù)記錄是否匹配于所選擇的數(shù)據(jù)記錄。
2. 根據(jù)權(quán)利要求1所述的設(shè)備,其中在客戶端上的所述元數(shù)據(jù)哈希映射存儲在所述服 務(wù)器上的元數(shù)據(jù)哈希映射中存儲的條目的子集。
3. 根據(jù)權(quán)利要求1所述的設(shè)備,其中當(dāng)由所述服務(wù)器在所述客戶端的指示下進(jìn)行的創(chuàng) 建、讀取、更新或刪除操作導(dǎo)致元數(shù)據(jù)哈希映射被更新時,更新在客戶端上的元數(shù)據(jù)哈希映 射。
4. 根據(jù)權(quán)利要求3所述的設(shè)備,還包括所述客戶端從所述服務(wù)器接收對所述元數(shù)據(jù)哈 希映射的更新。
5. 根據(jù)權(quán)利要求1所述的設(shè)備,其中所述訪問(2)包括使用服務(wù)器側(cè)遠(yuǎn)程指針在所述 客戶端上進(jìn)行一個或多個遠(yuǎn)程直接存儲器訪問(RDMA)操作,以經(jīng)由RDMA網(wǎng)絡(luò)接口控制器 直接地訪問存儲在所述服務(wù)器上的高速緩存中的數(shù)據(jù)記錄。
6. 根據(jù)權(quán)利要求5所述的設(shè)備,其中進(jìn)行所述一個或多個RDMA操作還包括所述客戶端 通過以下進(jìn)行創(chuàng)建操作: 所述客戶端進(jìn)行到服務(wù)器的發(fā)送操作,并將鍵、所述鍵的哈希碼和所述鍵的值傳遞到 服務(wù)器; 所述服務(wù)器使用所述鍵和所述鍵的值來在所述高速緩存中分配新的數(shù)據(jù)記錄;以及 使用哈希碼更新所述服務(wù)器上的元數(shù)據(jù)哈希映射以將用于新數(shù)據(jù)記錄的鍵、新數(shù)據(jù)記 錄的服務(wù)器側(cè)遠(yuǎn)程指針和所述鍵的版本標(biāo)識符添加到該元數(shù)據(jù)哈希映射。
7. 根據(jù)權(quán)利要求5所述的設(shè)備,其中進(jìn)行所述一個或多個RDMA操作還包括客戶端通過 以下進(jìn)行讀取操作: 客戶端使用來自元數(shù)據(jù)哈希表中的可能匹配的條目的服務(wù)器側(cè)遠(yuǎn)程指針來進(jìn)行在所 述服務(wù)器上的單側(cè)RDMA讀取操作。
8. 根據(jù)權(quán)利要求5所述的設(shè)備,其中進(jìn)行所述一個或多個RDMA操作還包括客戶端通過 以下進(jìn)行更新操作: 客戶端使用來自元數(shù)據(jù)哈希表中的可能匹配的條目的服務(wù)器側(cè)遠(yuǎn)程指針來進(jìn)行在所 述服務(wù)器上的單側(cè)RDMA讀取操作, 當(dāng)所訪問的數(shù)據(jù)記錄之一匹配于所選擇的數(shù)據(jù)記錄時,所述客戶端使用所述服務(wù)器側(cè) 遠(yuǎn)程指針來進(jìn)行到服務(wù)器的單側(cè)RDMA寫入操作并蓋寫所述所訪問的記錄之一,以及 當(dāng)所訪問的數(shù)據(jù)記錄不匹配于所選擇的數(shù)據(jù)記錄時,所述客戶端進(jìn)行到所述服務(wù)器的 發(fā)送操作并將鍵、該鍵的哈希碼和該鍵的值傳遞到所述服務(wù)器用于更新所述服務(wù)器上的高 速緩存。
9. 根據(jù)權(quán)利要求5所述的設(shè)備,其中進(jìn)行所述一個或多個RDMA操作還包括客戶端通過 以下進(jìn)行刪除操作: 客戶端進(jìn)行到服務(wù)器的發(fā)送操作并將鍵、該鍵的哈希碼和該鍵的值傳遞到所述服務(wù)器 用于刪除在所述服務(wù)器上的高速緩存中存儲的所選擇的數(shù)據(jù)記錄。
10. -種用于訪問存儲在服務(wù)器上的高速緩存中的數(shù)據(jù)記錄的方法,包括: (a) 在服務(wù)器或客戶端上存儲元數(shù)據(jù)哈希映射,其中所述元數(shù)據(jù)哈希映射包括與用于 存儲在服務(wù)器上的高速緩存中的數(shù)據(jù)記錄的鍵相關(guān)聯(lián)的一個或多個條目,每個條目存儲對 應(yīng)的數(shù)據(jù)記錄的元數(shù)據(jù),并且所述元數(shù)據(jù)包括服務(wù)器側(cè)遠(yuǎn)程指針以及所述鍵的版本標(biāo)識 符,所述服務(wù)器側(cè)遠(yuǎn)程指針引用存儲在所述服務(wù)器上的高速緩存中的對應(yīng)的數(shù)據(jù)記錄;以 及 (b) 所述服務(wù)器或客戶端使用所提供的鍵通過以下訪問存儲在所述服務(wù)器上的高速緩 存中的所選擇的數(shù)據(jù)記錄: (1) 使用所提供的鍵標(biāo)識在所述元數(shù)據(jù)哈希映射中的一個或多個可能匹配的條目; (2) 使用來自所述元數(shù)據(jù)哈希映射中的可能匹配的條目的服務(wù)器側(cè)遠(yuǎn)程指針來訪問存 儲在所述服務(wù)器上的高速緩存中的一個或多個數(shù)據(jù)記錄;以及 (3) 使用所提供的鍵和來自所述元數(shù)據(jù)哈希映射中的可能匹配的條目的版本標(biāo)識符來 確定所訪問的數(shù)據(jù)記錄是否匹配于所選擇的數(shù)據(jù)記錄。
11. 根據(jù)權(quán)利要求10所述的方法,其中在客戶端上的所述元數(shù)據(jù)哈希映射存儲在所述 服務(wù)器上的元數(shù)據(jù)哈希映射中存儲的條目的子集。
12. 根據(jù)權(quán)利要求10所述的方法,其中當(dāng)由所述服務(wù)器在所述客戶端的指示下進(jìn)行的 創(chuàng)建、讀取、更新或刪除操作導(dǎo)致元數(shù)據(jù)哈希映射被更新時,更新在客戶端上的元數(shù)據(jù)哈希 映射。
13. 根據(jù)權(quán)利要求12所述的方法,還包括所述客戶端從所述服務(wù)器接收對所述元數(shù)據(jù) 哈希映射的更新。
14. 根據(jù)權(quán)利要求10所述的方法,其中所述訪問(2)包括使用服務(wù)器側(cè)遠(yuǎn)程指針在所 述客戶端上進(jìn)行一個或多個遠(yuǎn)程直接存儲器訪問(RDMA)操作,以經(jīng)由RDMA網(wǎng)絡(luò)接口控制 器直接地訪問存儲在所述服務(wù)器上的高速緩存中的數(shù)據(jù)記錄。
15. 根據(jù)權(quán)利要求14所述的方法,其中進(jìn)行所述一個或多個RDMA操作還包括所述客戶 端通過以下進(jìn)行創(chuàng)建操作: 所述客戶端進(jìn)行到服務(wù)器的發(fā)送操作,并將鍵、所述鍵的哈希碼和所述鍵的值傳遞到 服務(wù)器; 所述服務(wù)器使用所述鍵和所述鍵的值來在所述高速緩存中分配新的數(shù)據(jù)記錄;以及 使用哈希碼更新所述服務(wù)器上的元數(shù)據(jù)哈希映射以將用于新數(shù)據(jù)記錄的鍵、新數(shù)據(jù)記 錄的服務(wù)器側(cè)遠(yuǎn)程指針和所述鍵的版本標(biāo)識符添加到該元數(shù)據(jù)哈希映射。
16. 根據(jù)權(quán)利要求14所述的方法,其中進(jìn)行所述一個或多個RDMA操作還包括客戶端通 過以下進(jìn)行讀取操作: 客戶端使用來自元數(shù)據(jù)哈希表中的可能匹配的條目的服務(wù)器側(cè)遠(yuǎn)程指針來進(jìn)行在所 述服務(wù)器上的單側(cè)RDMA讀取操作。
17. 根據(jù)權(quán)利要求14所述的方法,其中進(jìn)行所述一個或多個RDMA操作還包括客戶端通 過以下進(jìn)行更新操作: 客戶端使用來自元數(shù)據(jù)哈希表中的可能匹配的條目的服務(wù)器側(cè)遠(yuǎn)程指針來進(jìn)行在所 述服務(wù)器上的單側(cè)RDMA讀取操作, 當(dāng)所訪問的數(shù)據(jù)記錄之一匹配于所選擇的數(shù)據(jù)記錄時,所述客戶端使用所述服務(wù)器側(cè) 遠(yuǎn)程指針來進(jìn)行到服務(wù)器的單側(cè)RDMA寫入操作并蓋寫所述所訪問的記錄之一,以及 當(dāng)所訪問的數(shù)據(jù)記錄不匹配于所選擇的數(shù)據(jù)記錄時,所述客戶端進(jìn)行到所述服務(wù)器的 發(fā)送操作并將鍵、該鍵的哈希碼和該鍵的值傳遞到所述服務(wù)器用于更新所述服務(wù)器上的高 速緩存。
18. 根據(jù)權(quán)利要求14所述的方法,其中進(jìn)行所述一個或多個RDMA操作還包括客戶端通 過以下進(jìn)行刪除操作: 客戶端進(jìn)行到服務(wù)器的發(fā)送操作并將鍵、該鍵的哈希碼和該鍵的值傳遞到所述服務(wù)器 用于刪除在所述服務(wù)器上的高速緩存中存儲的所選擇的數(shù)據(jù)記錄。
【文檔編號】G06F12/08GK104123235SQ201410171220
【公開日】2014年10月29日 申請日期:2014年4月25日 優(yōu)先權(quán)日:2013年4月26日
【發(fā)明者】X.R.格林, T.J.薩洛 申請人:國際商業(yè)機器公司