版權(quán)聲明
本專利文件的公開(kāi)內(nèi)容的一部分包含受版權(quán)保護(hù)的材料。版權(quán)所有者不反對(duì)專利文件或?qū)@_(kāi)內(nèi)容中的任何一個(gè)的復(fù)制,如其在專利與商標(biāo)局專利文檔或記錄中出現(xiàn)的,但是除此之外無(wú)論如何保留所有的版權(quán)權(quán)利。
相關(guān)申請(qǐng)的交叉引用
本申請(qǐng)要求于2016年3月7日提交的美國(guó)臨時(shí)專利申請(qǐng)no.62/304,348的利益,其通過(guò)引用并入本文。
發(fā)明背景
1.發(fā)明領(lǐng)域
本發(fā)明涉及用于實(shí)時(shí)通信的網(wǎng)絡(luò)布置和網(wǎng)絡(luò)協(xié)議。更具體地,本發(fā)明涉及通過(guò)遠(yuǎn)程直接存儲(chǔ)器訪問(wèn)的信息或其他信號(hào)在存儲(chǔ)器、輸入/輸出設(shè)備或中央處理單元之間的互連和轉(zhuǎn)移。
2.相關(guān)技術(shù)的描述
本文使用的某些首字母縮略詞和縮寫(xiě)的意義在表1中給出。
表1-首字母縮略詞和縮寫(xiě)
rdma是從一臺(tái)計(jì)算機(jī)的存儲(chǔ)器到其它計(jì)算機(jī)的存儲(chǔ)器的直接存儲(chǔ)器訪問(wèn),而不涉及任一臺(tái)計(jì)算機(jī)的操作系統(tǒng)。常見(jiàn)的rdma實(shí)現(xiàn)方式包括通過(guò)融合以太網(wǎng)的rdma(roce)、infiniband和iwarp。rdma支持一組受限的原子操作:
(1)提取和添加(faad)。這里原子性地修改存儲(chǔ)器位置的內(nèi)容:將x設(shè)置為x+a,其中,x是存儲(chǔ)器位置,而a是某個(gè)值。
在添加操作之前的位置中的數(shù)據(jù)被返回給請(qǐng)求者。當(dāng)該操作在并發(fā)環(huán)境中執(zhí)行時(shí),其它進(jìn)程從未看見(jiàn)中間結(jié)果。
(2)比較和交換(cas)。這個(gè)操作讀取遠(yuǎn)程數(shù)據(jù),將其與比較值進(jìn)行比較,并且如果它們相等,則將遠(yuǎn)程數(shù)據(jù)與給定的交換數(shù)據(jù)進(jìn)行交換。cas操作的原子性確保新值是基于最新信息計(jì)算的;如果遠(yuǎn)程數(shù)據(jù)與此同時(shí)已經(jīng)被另一線程更新,則置換將會(huì)失敗。操作的結(jié)果應(yīng)指示置換是成功還是失敗。
rdma通常由消息傳遞協(xié)議作為媒介。消息傳遞接口(mpi)是通信協(xié)議,其被廣泛用于高性能計(jì)算系統(tǒng)中的進(jìn)程間的消息交換。這種系統(tǒng)通常使用rdma傳輸。用戶利用mpi可定義一組進(jìn)程,稱為通信器。每個(gè)通信器具有相對(duì)于系統(tǒng)上的所有其它通信器的唯一通信器標(biāo)識(shí)符(整數(shù))。
在一個(gè)示例中,公開(kāi)號(hào)為2010/0106948的美國(guó)專利申請(qǐng)?zhí)岢錾婕皩?duì)隊(duì)列的rdma訪問(wèn)的共享消息隊(duì)列的管理。處理設(shè)備合作以處理隊(duì)列數(shù)據(jù)。當(dāng)一個(gè)處理設(shè)備成功訪問(wèn)隊(duì)列數(shù)據(jù)時(shí),隊(duì)列數(shù)據(jù)被鎖定用于該處理設(shè)備的獨(dú)占使用。處理設(shè)備能夠處理數(shù)據(jù)并返回已處理的隊(duì)列數(shù)據(jù)。
發(fā)明概述
本發(fā)明的實(shí)施方式通過(guò)實(shí)現(xiàn)對(duì)通用對(duì)象池的原子訪問(wèn)來(lái)擴(kuò)展當(dāng)前支持的通過(guò)rdma傳輸?shù)脑硬僮?。?duì)象池可由網(wǎng)絡(luò)接口控制器以完全卸載的方式通過(guò)網(wǎng)絡(luò)來(lái)訪問(wèn),即,沒(méi)有主機(jī)處理器的任何參與。甚至在存在多個(gè)代理訪問(wèn)相同的數(shù)據(jù)結(jié)構(gòu)的情況下,也保證了在應(yīng)答者節(jié)點(diǎn)上的操作的原子性。對(duì)象池可包含任何大小或任何類(lèi)型的一系列對(duì)象,并且該數(shù)據(jù)具有任何結(jié)構(gòu)。
根據(jù)本發(fā)明的實(shí)施方式提供了通信的方法,其在包括第一網(wǎng)絡(luò)元件和第二網(wǎng)絡(luò)元件的網(wǎng)絡(luò)元件的架構(gòu)中實(shí)現(xiàn)。第二網(wǎng)絡(luò)元件具有儲(chǔ)存在其存儲(chǔ)器中的將被訪問(wèn)的對(duì)象池。該方法通過(guò)以下動(dòng)作實(shí)現(xiàn):在第一網(wǎng)絡(luò)元件中發(fā)起對(duì)第二網(wǎng)絡(luò)元件的存儲(chǔ)器的遠(yuǎn)程直接存儲(chǔ)器訪問(wèn)的請(qǐng)求;將該請(qǐng)求通過(guò)架構(gòu)發(fā)送到第二網(wǎng)絡(luò)元件;通過(guò)原子性地執(zhí)行該請(qǐng)求來(lái)訪問(wèn)對(duì)象池的指定成員;并通過(guò)架構(gòu)將請(qǐng)求的執(zhí)行的結(jié)果返回到第一網(wǎng)絡(luò)元件。
根據(jù)方法的一個(gè)方面,訪問(wèn)池由取得池的對(duì)象中的一個(gè)的原子獲取操作來(lái)執(zhí)行。
根據(jù)方法的另一個(gè)方面,池被布置成先進(jìn)先出隊(duì)列,并且返回結(jié)果包括取得隊(duì)列的下一對(duì)象。訪問(wèn)可包括使下一對(duì)象出列。
根據(jù)方法的再一個(gè)方面,池被布置成后進(jìn)先出隊(duì)列,并且返回結(jié)果包括取得隊(duì)列的下一對(duì)象。訪問(wèn)可包括使下一對(duì)象出列。
根據(jù)方法的其它方面,訪問(wèn)池由在原子壓入操作中將新對(duì)象添加到池中來(lái)執(zhí)行。
根據(jù)方法的附加方面,池被布置成先進(jìn)先出隊(duì)列,并且添加新對(duì)象包括使新對(duì)象入列。
根據(jù)方法的又一個(gè)方面,池被布置成后進(jìn)先出隊(duì)列,并且添加新對(duì)象包括使新對(duì)象入列。
根據(jù)方法的另一個(gè)方面,原子性地執(zhí)行請(qǐng)求通過(guò)被連接到主機(jī)計(jì)算機(jī)的設(shè)備獨(dú)立地控制。
根據(jù)本發(fā)明的實(shí)施方式還提供了網(wǎng)絡(luò)元件的架構(gòu),其包括第一網(wǎng)絡(luò)元件和第二網(wǎng)絡(luò)元件。第二網(wǎng)絡(luò)元件具有存儲(chǔ)器和儲(chǔ)存在存儲(chǔ)器中的對(duì)象的池。第一網(wǎng)絡(luò)元件可操作用于發(fā)起對(duì)第二網(wǎng)絡(luò)元件的存儲(chǔ)器的遠(yuǎn)程直接存儲(chǔ)器訪問(wèn)的請(qǐng)求;將該請(qǐng)求通過(guò)架構(gòu)發(fā)送到第二網(wǎng)絡(luò)元件;通過(guò)原子性地執(zhí)行該請(qǐng)求來(lái)訪問(wèn)池;并通過(guò)架構(gòu)將請(qǐng)求的執(zhí)行的結(jié)果返回到第一網(wǎng)絡(luò)元件。
第一網(wǎng)絡(luò)元件可包括網(wǎng)絡(luò)接口卡。用于控制原子操作的執(zhí)行的原子控制器可位于網(wǎng)絡(luò)接口卡中。
附圖簡(jiǎn)述
為了更好的理解本發(fā)明,通過(guò)示例的方式對(duì)本發(fā)明的詳細(xì)描述進(jìn)行參考,本發(fā)明的詳細(xì)描述將結(jié)合附圖來(lái)閱讀,其中,相似的元件被給定相似的參考數(shù)字,并且,其中:
圖1示意性地示出其中應(yīng)用了本發(fā)明的原理的計(jì)算機(jī)系統(tǒng);
圖2是圖1中所示的系統(tǒng)中的計(jì)算節(jié)點(diǎn)的框圖;
圖3是示出根據(jù)本發(fā)明的實(shí)施方式的原子獲取操作的圖示;
圖4是用于根據(jù)本發(fā)明的實(shí)施方式的對(duì)對(duì)象池的原子訪問(wèn)的布置的框圖;以及
圖5是根據(jù)本發(fā)明的實(shí)施方式的原子控制器的操作的功能示意圖。
發(fā)明的詳細(xì)描述
在下面的描述中,闡述了許多具體的細(xì)節(jié)以提供對(duì)本發(fā)明的各種原理的徹底理解。然而,對(duì)于本領(lǐng)域技術(shù)人員將明顯的是,對(duì)于實(shí)踐本發(fā)明并不總是必然需要全部的這些細(xì)節(jié)。在這個(gè)實(shí)例中,用于傳統(tǒng)的算法和過(guò)程的眾所周知的電路、控制邏輯和計(jì)算機(jī)程序指令的細(xì)節(jié)沒(méi)有被詳細(xì)示出,以免不必要地混淆一般概念。
通過(guò)引用并入本文的文檔被視為本申請(qǐng)的組成部分,就在這些并入的文檔中以與本說(shuō)明書(shū)中明確地或隱含地做出的定義沖突的方式所定義的任何術(shù)語(yǔ)的方面來(lái)說(shuō),僅應(yīng)考慮本說(shuō)明書(shū)中的定義。
定義
“交換架構(gòu)”或“架構(gòu)”是指其中網(wǎng)絡(luò)節(jié)點(diǎn)通常通過(guò)許多端口經(jīng)由一個(gè)或多個(gè)網(wǎng)絡(luò)交換機(jī)(諸如,縱橫交換機(jī))互連的網(wǎng)絡(luò)拓?fù)??;ミB是可配置的,使得數(shù)據(jù)經(jīng)由指定端口從一個(gè)節(jié)點(diǎn)傳輸?shù)搅硪粋€(gè)節(jié)點(diǎn)。對(duì)于交換架構(gòu)的常見(jiàn)應(yīng)用是高性能底板。
“對(duì)象池”是駐留在存儲(chǔ)器中的一組可達(dá)數(shù)據(jù)對(duì)象。當(dāng)該組被排序時(shí),池中的“下一對(duì)象”是當(dāng)對(duì)象按順序被處理時(shí)將被下一個(gè)訪問(wèn)的對(duì)象。
在共享存儲(chǔ)器上作用的“原子操作”表現(xiàn)為相對(duì)于其它進(jìn)程或線程在單一步驟中完成。當(dāng)原子存儲(chǔ)在共享變量上執(zhí)行時(shí),沒(méi)有其它線程或進(jìn)程會(huì)觀察到修改半完成。當(dāng)原子加載在共享變量上執(zhí)行時(shí),其在出現(xiàn)在單一時(shí)刻時(shí)讀取整個(gè)值。當(dāng)原子修改操作被執(zhí)行時(shí),沒(méi)有其它線程或進(jìn)程會(huì)觀察到中間值。
概覽
本發(fā)明的實(shí)施方式提供使用rdma傳輸網(wǎng)絡(luò)對(duì)對(duì)象池的訪問(wèn)。對(duì)象池是用于以特定方式組織數(shù)據(jù)的通用數(shù)據(jù)結(jié)構(gòu)。在對(duì)象池中組織數(shù)據(jù)的一般方式包括fifo、lifo和列表:
列表-在特定順序中的一定數(shù)量的對(duì)象。不同的對(duì)象通常經(jīng)由索引來(lái)訪問(wèn)。
fifo-用于組織和操縱對(duì)象緩沖器的方法。在fifo中,在緩沖器中最舊的對(duì)象最先被處理。
lifo-在lifo中,放置在緩沖器(或堆棧頂部)中的最新的對(duì)象最先被處理。
在此上下文中的對(duì)象是位的集合并且可以是任何大小。
提取和添加以及比較和交換提供對(duì)于rdma應(yīng)用的有限功能。應(yīng)用程序編寫(xiě)者使用它們來(lái)實(shí)現(xiàn)信號(hào)量或?qū)?shù)組的分布式訪問(wèn)。但是,這些操作不能直接用于實(shí)現(xiàn)更復(fù)雜的算法,諸如從整數(shù)池中選擇下一個(gè)整數(shù)。這種選擇可以在mpi通信器創(chuàng)建中使用,從而以完全卸載的方式給出下一個(gè)通信器標(biāo)識(shí)符。在通信器創(chuàng)建中,所有通信器進(jìn)程從整數(shù)池接收下一個(gè)整數(shù),并將其用作通信器標(biāo)識(shí)符。當(dāng)通信器被銷(xiāo)毀時(shí),通信器標(biāo)識(shí)符返回到整數(shù)池。
在另一示例中,應(yīng)用準(zhǔn)備數(shù)據(jù)段的全局池以供架構(gòu)中的遠(yuǎn)程進(jìn)程使用。需要數(shù)據(jù)的每個(gè)進(jìn)程從全局池獲取其下一個(gè)數(shù)據(jù)段。當(dāng)完成一個(gè)數(shù)據(jù)段時(shí),它可以再次訪問(wèn)全局池以獲取下一個(gè)數(shù)據(jù)段。通常,這通過(guò)提取和添加操作與之后的rdma讀取操作(rdma_read)的組合來(lái)執(zhí)行。這涉及使用對(duì)象池通過(guò)架構(gòu)的兩次往返。然后,請(qǐng)求進(jìn)程必須處理原子響應(yīng),并創(chuàng)建rdma_read操作。因此,存在兩個(gè)相關(guān)操作,而不是一個(gè)原子操作。
系統(tǒng)構(gòu)架
現(xiàn)在參考圖1,其示意性地示出其中應(yīng)用了本發(fā)明的原理的示例性計(jì)算機(jī)系統(tǒng)10。系統(tǒng)10被配置為在infiniband架構(gòu)中使用,但是其對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō)可以適用于其它網(wǎng)絡(luò)。系統(tǒng)10包括由諸如infiniband交換架構(gòu)的包網(wǎng)絡(luò)19互連的節(jié)點(diǎn)12、14、16、18。在圖示的實(shí)施方式中,節(jié)點(diǎn)12和14是發(fā)起者節(jié)點(diǎn),而節(jié)點(diǎn)16和18是應(yīng)答者節(jié)點(diǎn),但是通常任何給定節(jié)點(diǎn)可以同時(shí)是發(fā)起者和應(yīng)答者。在該示例中,存在來(lái)自在主機(jī)22上執(zhí)行的一組進(jìn)程20的發(fā)起者進(jìn)程。充當(dāng)發(fā)起者的節(jié)點(diǎn)12或節(jié)點(diǎn)14向nic24(例如,infiniband主機(jī)通道適配器)提交對(duì)資源的請(qǐng)求,以將消息發(fā)送至在目標(biāo)(應(yīng)答者)節(jié)點(diǎn)16、18的主機(jī)22上執(zhí)行的一組進(jìn)程20中的目標(biāo)進(jìn)程。接收到工作請(qǐng)求后,發(fā)起者節(jié)點(diǎn)的nic向應(yīng)答者節(jié)點(diǎn)的nic發(fā)送包,以建立連接。如上所述,任何可靠的協(xié)議都適合于該連接。
現(xiàn)在參考圖2,其是根據(jù)本發(fā)明的實(shí)施方式的計(jì)算節(jié)點(diǎn)的框圖,其示意性地示出節(jié)點(diǎn)12、14、16、18的功能組件,以及具體地示出在提供傳輸服務(wù)中涉及的nic24的元件。雖然nic在圖2中被示出,但是本發(fā)明的原理可適用于具有處理電路的其它網(wǎng)絡(luò)元件。主機(jī)22包括運(yùn)行進(jìn)程20(圖1)的中央處理單元cpu26和主機(jī)應(yīng)用28,并具有可由cpu26訪問(wèn)的主機(jī)存儲(chǔ)器30。存儲(chǔ)器30通常用于保存進(jìn)程和系統(tǒng)數(shù)據(jù)以及由nic24使用的上下文信息。nic24包括用于經(jīng)由總線34與主機(jī)22通信的主機(jī)接口32以及用于將包發(fā)送到網(wǎng)絡(luò)19和從網(wǎng)絡(luò)19接收包的網(wǎng)絡(luò)接口36。網(wǎng)絡(luò)接口36包括包發(fā)送者40和原子控制器42。下面描述的功能通過(guò)與適當(dāng)?shù)拇鎯?chǔ)器緩存46、包發(fā)送者40和原子控制器42合作的處理電路44來(lái)實(shí)現(xiàn)。
對(duì)對(duì)象池的原子操作
本發(fā)明的實(shí)施方式通過(guò)實(shí)現(xiàn)對(duì)通用對(duì)象池的原子訪問(wèn)來(lái)擴(kuò)展rdma原子提取和添加以及比較和交換操作。rdma傳輸上的原子訪問(wèn)操作被完全卸載,即它們不需要主機(jī)處理器或主機(jī)cpu的軟件參與。相反,它們?cè)诟郊釉O(shè)備中實(shí)現(xiàn),諸如鏈接到主機(jī)的nic。甚至在存在多個(gè)代理訪問(wèn)相同的數(shù)據(jù)結(jié)構(gòu)的情況下,也保證了在應(yīng)答者節(jié)點(diǎn)上的操作的原子性。對(duì)象池可以包含任何大小或類(lèi)型的對(duì)象,并且數(shù)據(jù)可以具有任何結(jié)構(gòu)。在存在多個(gè)代理或進(jìn)程訪問(wèn)對(duì)象池中的相同的數(shù)據(jù)結(jié)構(gòu)的情況下,也保證了在網(wǎng)絡(luò)的應(yīng)答者節(jié)點(diǎn)上的操作的原子性。本發(fā)明的實(shí)施方式與對(duì)象池的組織無(wú)關(guān)。例如,對(duì)象池可以被組織為fifo、lifo或列表。對(duì)象池位置可以在任何網(wǎng)絡(luò)元件中,例如主機(jī)存儲(chǔ)器、nic或交換機(jī)中。
用于根據(jù)本發(fā)明的實(shí)施方式處理對(duì)象池的命令,例如原子獲取和原子壓入操作,以及諸如在不出列的情況下訪問(wèn)隊(duì)列的頂部的動(dòng)作和訪問(wèn)隊(duì)列中的特定元素的動(dòng)作。原子獲取操作導(dǎo)致池中的“下一對(duì)象”被返回給請(qǐng)求者。下一對(duì)象取決于對(duì)象池的組織。例如,如果對(duì)象池是對(duì)象{a1,a2,a3......}的有序列表,并且對(duì)象a1是在將要在該對(duì)象池上執(zhí)行的原子獲取操作之前訪問(wèn)的最后一個(gè)對(duì)象,那么對(duì)象a2是下一個(gè)對(duì)象并將在原子獲取操作中被返回。對(duì)于fifo和lifo對(duì)象池的下一個(gè)對(duì)象將同樣被理解,并且可以但不一定包括使下一對(duì)象出列。
可以通過(guò)應(yīng)用本發(fā)明的原理實(shí)現(xiàn)的示例性原子操作的列表如下:
壓入-使下一元素入列。
彈出-使下一元素出列。
取頂-讀取第一元素。
讀取(i)-讀取在位置i的元素。
計(jì)數(shù)-獲取池中的元素的數(shù)量。
清除-從池中移除所有元素。
刪除(i)-刪除第i個(gè)元素。
現(xiàn)在參考圖3,其是示出根據(jù)本發(fā)明的實(shí)施方式的位于網(wǎng)絡(luò)中的對(duì)象池中的原子獲取操作的圖示。網(wǎng)絡(luò)包括連接到交換機(jī)56、58的節(jié)點(diǎn)48、50、52、54。對(duì)象池60由塊62表示。塊62表示包含對(duì)象池的網(wǎng)絡(luò)元件,在這個(gè)示例中是fifo。實(shí)際上,對(duì)象池可分布在多個(gè)節(jié)點(diǎn)之間,原子操作同時(shí)定向到該多個(gè)節(jié)點(diǎn)。在這種情況下,請(qǐng)求者維護(hù)來(lái)自目標(biāo)中的每個(gè)的返回信息以驗(yàn)證結(jié)合的原子性。此外,應(yīng)答者必須知道對(duì)象池的位置。通常其將在與應(yīng)答者相同的節(jié)點(diǎn)上。然而,在更復(fù)雜的情況下,對(duì)象池可以在其它節(jié)點(diǎn)上,應(yīng)答者需要知道該其它節(jié)點(diǎn),因?yàn)閼?yīng)答者需要發(fā)起對(duì)那些遠(yuǎn)程對(duì)象池的遠(yuǎn)程操作。在任何情況下,對(duì)象池60的下一對(duì)象當(dāng)前是對(duì)象64。節(jié)點(diǎn)48例如使用mpi和常規(guī)的路由和交換技術(shù)通過(guò)到交換機(jī)56的消息將原子獲取操作定向到對(duì)象池60。該消息被中繼到與塊62相對(duì)應(yīng)的網(wǎng)絡(luò)元件位置。對(duì)象64(fifo的頭)從對(duì)象池60中被提取,并經(jīng)由交換機(jī)56返回到節(jié)點(diǎn)48。序列的原子性由原子控制器保證,其在下面描述。
現(xiàn)在參考圖4,其是根據(jù)本發(fā)明的實(shí)施方式的用于對(duì)對(duì)象池68進(jìn)行原子訪問(wèn)的布置66的框圖。斷線70上方的元件通常位于主機(jī)計(jì)算機(jī)中,而線70下方的元件在諸如網(wǎng)絡(luò)接口卡的網(wǎng)絡(luò)元件中實(shí)現(xiàn)。盡管布置66被示為包括多個(gè)單獨(dú)的功能塊,但是這些塊不一定是單獨(dú)的物理實(shí)體,而是表示存儲(chǔ)在處理器可訪問(wèn)的存儲(chǔ)器中的不同的計(jì)算任務(wù)或數(shù)據(jù)對(duì)象。這些任務(wù)可以在單個(gè)處理器上或在多個(gè)處理器上運(yùn)行的軟件中執(zhí)行。軟件可以體現(xiàn)在用于與計(jì)算機(jī)系統(tǒng)一起使用的各種已知非暫時(shí)性介質(zhì)(諸如磁盤(pán)或硬盤(pán)驅(qū)動(dòng)器或cd-rom)中的任一個(gè)上。代碼可以分布在這樣的介質(zhì)上,或者可以通過(guò)網(wǎng)絡(luò)從另一計(jì)算機(jī)系統(tǒng)(未示出)的存儲(chǔ)器或儲(chǔ)存器分布到布置66??蛇x地或另外地,布置66可以包括數(shù)字信號(hào)處理器、現(xiàn)場(chǎng)可編程門(mén)陣列或硬連線邏輯。布置66關(guān)于infiniband實(shí)現(xiàn)被描述,但是加以必要修改可以適用于其它網(wǎng)絡(luò)通信標(biāo)準(zhǔn)。
應(yīng)用72包括使用硬件驅(qū)動(dòng)器74以便訪問(wèn)遠(yuǎn)程或本地存儲(chǔ)器對(duì)象池(諸如對(duì)象池68)并獲得池中的下一對(duì)象的軟件代碼。當(dāng)對(duì)象池是無(wú)組織的時(shí),原子操作可能導(dǎo)致隨機(jī)元素的訪問(wèn)。在一個(gè)實(shí)施方式中,驅(qū)動(dòng)器74將infiniband動(dòng)詞轉(zhuǎn)換成硬件特定命令。在列表1中給出了根據(jù)本發(fā)明的原理實(shí)現(xiàn)定向到對(duì)象池的原子操作的infiniband實(shí)施方式中的示例性動(dòng)詞定義。
列表1
ibv_exp_obj_pool_access(ibv_qp*qp,ibv_obj_poolpool,ibv_obj_pool_opoperation,void*data)
列表1中的參數(shù)如下:
qp:請(qǐng)求者隊(duì)列對(duì)(qp),操作在請(qǐng)求者隊(duì)列對(duì)(qp)上執(zhí)行。qp的傳輸必須是可靠的。
池:請(qǐng)求者打算訪問(wèn)的遠(yuǎn)程對(duì)象池。
op:將要對(duì)對(duì)象池執(zhí)行的操作,例如彈出/壓入/取頂。
數(shù)據(jù):根據(jù)操作的特定字段。例如,壓入操作需要對(duì)象指針,對(duì)象指針需要被壓入。彈出操作需要存儲(chǔ)器指針來(lái)存儲(chǔ)彈出響應(yīng)。
infiniband動(dòng)詞在互聯(lián)網(wǎng)上可獲得或從加利佛尼亞州95054的圣塔克拉拉2900stenderway的mellanoxtechnologies公司可獲得的文獻(xiàn)mellanoxib-verbsapi(vapi),mellanoxsoftwareprogrammer'sinterfaceforinfinibandverbs,(2001)中被描述,其通過(guò)引用并入本文。驅(qū)動(dòng)器74控制包發(fā)送者76,包發(fā)送者76負(fù)責(zé)將數(shù)據(jù)包發(fā)送到架構(gòu)中。原子控制器78經(jīng)由架構(gòu)處理原子操作,并且負(fù)責(zé)確保操作的原子性。另外,原子控制器78響應(yīng)于原子操作將信息傳遞至包發(fā)送者76以用于中繼到操作的請(qǐng)求者。
在原子獲取操作中,應(yīng)用72調(diào)用相應(yīng)的功能或動(dòng)詞,諸如標(biāo)準(zhǔn)動(dòng)詞ibv_post_sent的適當(dāng)修改的版本,其由驅(qū)動(dòng)器74轉(zhuǎn)換成用于nic或其它網(wǎng)絡(luò)元件的命令。在infiniband實(shí)現(xiàn)中,該命令是工作隊(duì)列元件80(wqe)。工作隊(duì)列元件80被傳送到包發(fā)送者76,并且從那里經(jīng)由架構(gòu)被傳送到遠(yuǎn)程目標(biāo)(未示出)中的對(duì)象池,例如對(duì)象池68??蛇x地,工作隊(duì)列元件80可以訪問(wèn)本地對(duì)象池,在這種情況下,包發(fā)送者76執(zhí)行環(huán)回操作。
在遠(yuǎn)程目標(biāo)處,原子控制器78控制原子獲取的執(zhí)行的定時(shí)、協(xié)調(diào)關(guān)于正在對(duì)象池68上執(zhí)行的其它原子操作的執(zhí)行。當(dāng)原子控制器78確定原子獲取可以被執(zhí)行時(shí),原子控制器78根據(jù)池中對(duì)象的特定組織,使用rdma從對(duì)象池68讀取下一對(duì)象,如上所述。當(dāng)提取下一對(duì)象時(shí),原子控制器78將其傳遞到包發(fā)送者76,用于中繼到請(qǐng)求者,在該示例中,請(qǐng)求者是應(yīng)用72。
用于原子壓入操作的順序與原子獲取操作類(lèi)似,除了新的元素被插入到對(duì)象池68中。在fifo和lifo隊(duì)列的情況下,原子壓入操作使新對(duì)象入列。在另一示例中,原子壓入操作可以將元素插入到鏈表中。原子控制器78將原子壓入操作的結(jié)果中繼給請(qǐng)求者,例如對(duì)象池68的狀態(tài),其可以是空的、滿的或處于兩者之間。
現(xiàn)在參考圖5,其是根據(jù)本發(fā)明的實(shí)施方式的原子控制器78(圖4)的操作的功能示意圖。原子控制器78的輸入是執(zhí)行原子操作82的請(qǐng)求,其可以使用任何合適的rdma協(xié)議作為消息被傳達(dá)。當(dāng)消息在原子控制器78中被接收時(shí),要訪問(wèn)的對(duì)象池在池解析塊84中被解析,并且該請(qǐng)求被放置在用于特定對(duì)象池的等待隊(duì)列86中。等待隊(duì)列86是由另一等待隊(duì)列88表示的等待隊(duì)列集合的成員。等待隊(duì)列86、88被動(dòng)態(tài)地分配并且與相應(yīng)的對(duì)象池相關(guān)聯(lián)。根據(jù)對(duì)于原子操作82的請(qǐng)求中的字段選擇適當(dāng)?shù)牡却?duì)列。
對(duì)于原子操作82的請(qǐng)求在等待隊(duì)列86中等待其將被服務(wù)的輪次。如果隊(duì)列中沒(méi)有定向到對(duì)象池的相同區(qū)域的在前的其它操作,則原子操作可以被服務(wù)。換句話說(shuō),定向到對(duì)象池的不相交區(qū)域的不同原子操作可以并發(fā)執(zhí)行,這是因?yàn)椴煌僮髦胁粫?huì)影響其它操作的結(jié)果。所需的原子排序由控制等待隊(duì)列86、88的原子控制器78中的邏輯執(zhí)行。
當(dāng)對(duì)于原子操作82的請(qǐng)求達(dá)到等待隊(duì)列86的頭部時(shí),它可以在相關(guān)聯(lián)的對(duì)象池90上操作。根據(jù)對(duì)象池90的特性,單一原子操作可以涉及使用rdma在對(duì)象池90中的多次寫(xiě)入或讀取。
當(dāng)原子操作完成時(shí),其從等待隊(duì)列86中被移除。原子控制器78創(chuàng)建適于特定原子操作的結(jié)果的發(fā)送描述符。假如等待隊(duì)列86變?yōu)榭?,則它被釋放并且可以被重新分配用于隨后的原子操作。重新分配的工作隊(duì)列可以涉及對(duì)象池90或不同的對(duì)象池。
本領(lǐng)域中的技術(shù)人員將認(rèn)識(shí)到,本發(fā)明不被限制于上文所具體示出和描述的內(nèi)容。相反,本發(fā)明的范圍包括上文所描述的各種特征的組合和子組合以及本領(lǐng)域技術(shù)人員在閱讀以上描述之后將想到的且未在現(xiàn)有技術(shù)中公開(kāi)的其變型和修改。