基于htm和單向rdma操作的分布式哈希表方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及內(nèi)存鍵值系統(tǒng)的方法,具體地,涉及一種基于HTM和單向RDMA操作的分布式哈希表方法。
【背景技術(shù)】
[0002]大規(guī)模的網(wǎng)絡(luò)應(yīng)用需要使用內(nèi)存來(lái)存儲(chǔ)數(shù)據(jù),使得大數(shù)據(jù)集的訪問(wèn)速度能夠滿足用戶需求。而內(nèi)存鍵值系統(tǒng)正是一種滿足這種需求的高速數(shù)據(jù)緩存系統(tǒng)。內(nèi)存鍵值系統(tǒng)的優(yōu)勢(shì)在于將所有數(shù)據(jù)存儲(chǔ)在內(nèi)存,從而當(dāng)訪問(wèn)數(shù)據(jù)時(shí),只需要訪問(wèn)內(nèi)存,避免了以往存儲(chǔ)系統(tǒng)訪問(wèn)磁盤導(dǎo)致的性能下降。
[0003]硬件事務(wù)內(nèi)存(HTM,Hardware Transact1nal memory)是基于硬件實(shí)現(xiàn)的事務(wù)性內(nèi)存,可以簡(jiǎn)化了并發(fā)程序的編寫。HTM的基本的想法是要聲明一個(gè)代碼區(qū)域作為一個(gè)事務(wù),事務(wù)(transact1n)執(zhí)行并原子地提交所有結(jié)果到內(nèi)存(如果事務(wù)成功),或中止并取消所有的結(jié)果(如果事務(wù)失敗)。硬件事務(wù)以較低的開銷提供原子性(Atomicity),一致性(Consistency)和隔離性(Isolat1n)等一系列有用的特性,大大簡(jiǎn)化并發(fā)程序的編寫。
[0004]遠(yuǎn)程直接內(nèi)存訪問(wèn)(RDMA,Remote Direct Memory Access),是當(dāng)前高性能網(wǎng)絡(luò)設(shè)備提供的一種模式,能夠直接對(duì)遠(yuǎn)端節(jié)點(diǎn)已注冊(cè)的內(nèi)存空間進(jìn)行讀寫訪問(wèn),完全不需要服務(wù)器機(jī)器的CPU進(jìn)行協(xié)助。然而現(xiàn)在的內(nèi)存鍵值系統(tǒng)仍然只是以傳統(tǒng)方式使用這些高性能網(wǎng)絡(luò)互聯(lián)設(shè)備,未能充分挖掘硬件性能。比如,直接使用InfiniBand網(wǎng)卡提供的兼容以太網(wǎng)編程接口的IP over InfiniteBand(IPoIB)模式。該模式下只能達(dá)到有限的傳輸帶寬和較長(zhǎng)的網(wǎng)絡(luò)延遲。比如以lK-byte網(wǎng)絡(luò)包傳輸為例,IPoIB模式帶寬達(dá)和延時(shí)分別為每秒12.2萬(wàn)次和60微秒。而使用RDMA時(shí),傳輸帶寬和網(wǎng)絡(luò)延時(shí)則分別能夠達(dá)到149.6萬(wàn)次和3微秒,性能提升達(dá)一個(gè)數(shù)量級(jí)。
[0005]因此如何針對(duì)遠(yuǎn)程直接內(nèi)存訪問(wèn)(RDMA)模式特征,以及處理器提供的高效事務(wù)性內(nèi)存(HTM)模式特征,設(shè)計(jì)內(nèi)存鍵值系統(tǒng),充分發(fā)揮高性能網(wǎng)絡(luò)互聯(lián)設(shè)備單向訪問(wèn)特性,充分利用處理器的事務(wù)性內(nèi)存,提高內(nèi)存鍵值系統(tǒng)的帶寬,降低請(qǐng)求的延遲,并且不需要遠(yuǎn)程處理器參與,實(shí)已成為本領(lǐng)域技術(shù)人員亟待解決的技術(shù)難題。
【發(fā)明內(nèi)容】
[0006]針對(duì)現(xiàn)有技術(shù)中的缺陷,本發(fā)明的目的是提供一種基于HTM和單向RDMA操作的分布式哈希表方法。
[0007]根據(jù)本發(fā)明提供的基于HTM和單向RDMA操作的分布式哈希表方法,包括如下步驟:
[0008]步驟1:服務(wù)器端初始化內(nèi)存鍵值系統(tǒng),建立客戶端和服務(wù)器端之間的連接;
[0009]步驟2:客戶端在服務(wù)器端的內(nèi)存鍵值系統(tǒng)內(nèi)讀取存儲(chǔ)目標(biāo)鍵值對(duì)的主頭部或者間接頭部;
[0010]步驟3:根據(jù)主頭部或者間接頭部的內(nèi)容,找到值在服務(wù)器端的具體位置,判斷請(qǐng)求類型。判斷請(qǐng)求類別的理由是:讀請(qǐng)求不需要復(fù)雜的上鎖過(guò)程,而寫請(qǐng)求需要。
[0011]若請(qǐng)求類型為讀請(qǐng)求,則發(fā)送單向RDMA的讀請(qǐng)求,讀取服務(wù)器端的具體位置處的值,進(jìn)入步驟6;其中,單向指的是請(qǐng)求不需要目標(biāo)機(jī)器的處理器協(xié)助完成;
[0012]若請(qǐng)求類型是寫請(qǐng)求則發(fā)送單向RDMA的CAS(比較并交換Compare and Swap)請(qǐng)求,原子性地上鎖,CAS請(qǐng)求不執(zhí)行的時(shí)候,則繼續(xù)重試,直到CAS成功,進(jìn)入步驟4;原子性地上鎖指的是CAS請(qǐng)求只有成功與不執(zhí)行兩種,不會(huì)有中間狀態(tài);
[0013]步驟4:根據(jù)主頭部或者間接頭部存儲(chǔ)的值的具體位置,發(fā)送單向RDMA寫請(qǐng)求,把值寫到服務(wù)端存儲(chǔ)值的具體位置,覆蓋原來(lái)的值;
[0014]步驟5:發(fā)送單向RDMA的寫請(qǐng)求,釋放遠(yuǎn)端的鎖;
[0015]步驟6:檢查初始時(shí)存儲(chǔ)目標(biāo)值的鍵值對(duì)主頭部或者間接頭部里的自增量與讀取的目標(biāo)值中的自增量是否一致;若不一致則返回執(zhí)行步驟2,若一致,則結(jié)束。
[0016]具體地,初始時(shí)讀取存儲(chǔ)目標(biāo)值的鍵值對(duì)的主頭部或者間接頭部時(shí)包含有鍵的自增量,在讀取目標(biāo)值時(shí)也包含了值的自增量,若這兩個(gè)自增量若不一致,說(shuō)明讀取頭部以及讀取具體值的過(guò)程中服務(wù)器端發(fā)生了插入或者刪除操作,讀取到的具體值可能是不正確的需要重新讀取,返回執(zhí)行步驟2。
[0017]優(yōu)選地,所述步驟1包括:
[0018]步驟1.1:服務(wù)器端初始化內(nèi)存鍵值系統(tǒng),具體地,計(jì)算每一個(gè)鍵值對(duì)中的鍵的哈希值,并將鍵值對(duì)存儲(chǔ)在對(duì)應(yīng)的主頭部或者間接頭部,如附圖1所示,主頭部的位置是固定的,當(dāng)插入新的鍵值對(duì)的時(shí)候,優(yōu)先在主頭部中分配一個(gè)空槽存儲(chǔ)目標(biāo)鍵,當(dāng)主頭部空間使用完了之后,則分配一個(gè)間接頭部,并將主頭部指向新的間接頭部,構(gòu)成一個(gè)鏈表;然后分配一個(gè)實(shí)際的項(xiàng),用于存儲(chǔ)具體的值,并在主頭部或者間接頭部里記錄好項(xiàng)的地址。
[0019]步驟1.2:建立客戶端和服務(wù)器端之間的連接;具體地,客戶端向服務(wù)器端發(fā)送連接請(qǐng)求,服務(wù)器端收到連接請(qǐng)求后向客戶端發(fā)送回執(zhí)消息,客戶端獲得服務(wù)器端一段內(nèi)存的遠(yuǎn)程直接訪問(wèn)的權(quán)限。
[0020]優(yōu)選地,所述步驟2包括:
[0021]步驟2.1:客戶端通過(guò)計(jì)算鍵值對(duì)請(qǐng)求的鍵的哈希值得到該鍵在服務(wù)器端對(duì)應(yīng)的主頭部的位置后向服務(wù)器端發(fā)送遠(yuǎn)程內(nèi)存讀請(qǐng)求;
[0022]步驟2.2:將所述主頭部的四個(gè)空槽全部讀回,并檢查所述四個(gè)空槽的鍵是否與鍵值對(duì)請(qǐng)求的鍵相等;
[0023]步驟2.3:若鍵值對(duì)請(qǐng)求的鍵與主頭部?jī)?nèi)空槽的鍵相等,則進(jìn)入步驟3;
[0024]若鍵值對(duì)請(qǐng)求的鍵與主頭部的所有空槽的鍵不相等,則進(jìn)入步驟2.4;
[0025]步驟2.4:根據(jù)主頭部最后一個(gè)空槽的內(nèi)容,求出間接頭部在服務(wù)器端的位置,并向服務(wù)器端發(fā)送遠(yuǎn)程內(nèi)存讀請(qǐng)求,將間接頭部的四個(gè)空槽全部讀回,檢查間接頭部的四個(gè)空槽的鍵是否與鍵值對(duì)請(qǐng)求的鍵相等;
[0026]若鍵值對(duì)請(qǐng)求的鍵與間接頭部?jī)?nèi)空槽的鍵相等,則進(jìn)入步驟3;否則,進(jìn)入步驟2.5;
[0027]步驟2.5:在鍵值對(duì)請(qǐng)求的鍵與間接頭部?jī)?nèi)空槽的鍵不相等時(shí),則重新執(zhí)行步驟2.1,當(dāng)內(nèi)存鍵值系統(tǒng)內(nèi)所有空槽均訪問(wèn)過(guò)一次卻依然沒(méi)有找到與鍵值對(duì)請(qǐng)求的鍵相等的空槽時(shí),說(shuō)明鍵值系統(tǒng)中并沒(méi)有此鍵值對(duì),查詢操作結(jié)束;
[0028]優(yōu)選地,所述步驟3中的原子性地上鎖存在一次性不能夠成功拿鎖的情況,當(dāng)拿鎖不成功時(shí)重復(fù)嘗試拿鎖直到成功為止。
[0029]與現(xiàn)有技術(shù)相比,本發(fā)明具有如下的有益效果:
[0030]1、本發(fā)明提出的基于HTM和單向RDMA操作的分布式哈希表方法,能夠在不需要服務(wù)器端參與的情況下,縮短鍵值請(qǐng)求的延遲;
[0031]2、本發(fā)明提出的基于HTM和單向RDMA操作的分布式哈希表方法,充分發(fā)揮高性能網(wǎng)絡(luò)互聯(lián)設(shè)備單向訪問(wèn)特性,充分利用處理器的事務(wù)性內(nèi)存,提高內(nèi)存鍵值系統(tǒng)的帶寬,增大系統(tǒng)的吞吐量。
【附圖說(shuō)明】
[0032]通過(guò)閱讀參照以下附圖對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
[0033]圖1為本發(fā)明提供的基于HTM和單向RDMA操作的分布式哈希表方法的結(jié)構(gòu)圖;
[0034]圖2為本發(fā)明提供的基于HTM和單向RDMA操作的分布式哈希表方法的流程示意圖。
【具體實(shí)施方式】
[0035]下面結(jié)合具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明。以下實(shí)施例將有助于本領(lǐng)域的技術(shù)人員進(jìn)一步理解本發(fā)明,但不以任何形式限制本發(fā)明。應(yīng)當(dāng)指出的是,對(duì)本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn)。這些都屬于本發(fā)明的保護(hù)范圍。
[0036]具體地,如圖2所示,本發(fā)明提供的基于HTM和單向RDMA操作的分布式哈希表方法包括以下步驟:
[0037]步驟S1:服務(wù)器端初始化內(nèi)存鍵值系統(tǒng),計(jì)算每一個(gè)鍵值對(duì)的鍵的哈希值,并將鍵值對(duì)存儲(chǔ)在對(duì)應(yīng)的主頭部(Main Header)或者間接頭部(Indirect Header),并分配一個(gè)實(shí)際的項(xiàng)(Entry),用于存儲(chǔ)具體的值。
[0038]具體地,每一個(gè)主頭部有4個(gè)空槽(slot),每個(gè)空槽可以存儲(chǔ)一對(duì)鍵值對(duì),若4個(gè)空槽均被占用,貝分配一個(gè)間接頭部(Indirect Header)來(lái)放置最細(xì)的鍵值對(duì)。
[0039]步驟S2:建立客戶端和服務(wù)器端之間的連接;
[0040]具體地,客戶端向服務(wù)器端發(fā)送連接請(qǐng)求,服務(wù)器端收到連接請(qǐng)求后向客戶端發(fā)送回執(zhí)消息(使用傳統(tǒng)方法),雙方建立連接,客戶端擁有服務(wù)器端一段內(nèi)存的遠(yuǎn)程直接訪問(wèn)的權(quán)限,之后可以遠(yuǎn)程讀寫而不會(huì)影響服務(wù)器。
[0041 ]步驟S3:客戶端查找與鍵值對(duì)請(qǐng)求的鍵相等的鍵的空槽位置;
[0042]所述步驟S3包括:
[0043 ]步驟S301:客戶端通過(guò)計(jì)算鍵值對(duì)請(qǐng)求的鍵的哈希值得到該鍵在服務(wù)器端對(duì)應(yīng)的主頭部的位置后向服務(wù)器端發(fā)送遠(yuǎn)程內(nèi)存讀請(qǐng)求;
當(dāng)前第1頁(yè)
1 
2